Android Deeplink无法处理HTTP/HTTPS协议问题求助
解决Flutter Android端HTTP/HTTPS深度链接跳转浏览器问题
当使用HTTP/HTTPS作为深度链接的scheme时,系统会优先选择浏览器打开——因为浏览器也注册了这类scheme的Intent Filter。要让系统优先跳转你的应用,必须完成域名与应用的关联验证,具体步骤如下:
1. 修正AndroidManifest.xml配置
确保Intent Filter中的每个<data>标签都明确指定host,并保留android:autoVerify="true"开启自动验证:
<!-- Deep linking --> <meta-data android:name="flutter_deeplinking_enabled" android:value="true" /> <intent-filter android:autoVerify="true"> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <!-- 为HTTP和HTTPS分别配置完整的scheme+host --> <data android:scheme="http" android:host="mywebsite.com" /> <data android:scheme="https" android:host="mywebsite.com" /> </intent-filter>
注意:这段配置要放在你希望接收深度链接的Activity标签内(通常是MainActivity)
2. 创建并部署Digital Asset Links文件
你需要在域名的.well-known目录下放置assetlinks.json文件,用来证明你的应用有权处理该域名的链接:
- 文件路径:
https://mywebsite.com/.well-known/assetlinks.json - 文件内容格式:
[{ "relation": ["delegate_permission/common.handle_all_urls"], "target": { "namespace": "android_app", "package_name": "com.yourcompany.yourapp", "sha256_cert_fingerprints": ["你的应用签名SHA256指纹"] } }]
获取签名SHA256指纹:
- 正式签名:执行以下命令(替换为你的keystore路径和别名):
keytool -list -v -keystore your-release-keystore.jks -alias your-alias
- Debug签名:使用Android默认debug keystore(路径通常是
~/.android/debug.keystore,密码android):
keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey
3. 验证关联有效性
- 确保
assetlinks.json可以通过HTTPS正常访问(不能有重定向,必须直接返回文件内容) - 可以使用Android Studio的App Links Assistant(Tools > App Links Assistant)来验证配置是否正确
4. 测试深度链接
- 不要直接在浏览器地址栏输入链接,建议在网页中放置链接并点击测试
- 或者使用adb命令测试:
adb shell am start -a android.intent.action.VIEW -d "https://mywebsite.com"
完成以上步骤后,系统会验证应用与域名的关联关系,优先打开你的应用而非浏览器。
内容的提问来源于stack exchange,提问作者Mohammad Bahadori
相关产品推荐
相关产品推荐

