Flutter Android 12 Deep Link无法跳转至APP问题求助
Android 12 Flutter Deep Link 失效问题排查与解决
核心问题定位
Android 12及以上版本对App Links的验证逻辑更严格,你的assetlinks.json文件返回的Content-Type为application/octet-stream,不符合要求的application/json,导致域名验证失败(状态为legacy_failure),最终Deep Link被系统拦截,只能打开浏览器。
1. 修复assetlinks.json的Content-Type响应头
这是解决问题的关键,需确保服务器返回该文件时Content-Type为application/json,不同服务器的配置方式如下:
- Nginx:在站点配置中添加
location /.well-known/assetlinks.json { default_type application/json; } - Apache:在
.htaccess或虚拟主机配置中添加AddType application/json .json - 静态托管平台(如Netlify/Vercel):在项目根目录的配置文件中指定MIME类型,以Netlify为例,在
_netlify.toml中添加[[headers]] for = "/.well-known/assetlinks.json" [headers.values] Content-Type = "application/json"
验证修复结果:执行curl -I https://erecordstudio.com/.well-known/assetlinks.json,检查返回头中的Content-Type是否为application/json。
2. 重新触发域名验证
- 清除应用的验证缓存:执行
adb shell pm clear com.your.package.name(替换为你的Flutter应用包名) - 重新安装应用并打开一次,让系统重新发起验证请求
- 再次检查验证状态:执行
adb shell dumpsys package domain-preferred-apps,查找erecordstudio.com的状态,正常应为verified
3. 确认Manifest配置正确性
确保intent-filter的android:autoVerify="true"属性已正确添加,且data标签与域名匹配:
<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" /> <data android:scheme="https" android:host="erecordstudio.com" /> </intent-filter>
注意:如果存在多个intent-filter,每个需要自动验证的都要添加android:autoVerify="true"。
4. 验证assetlinks.json内容准确性
确认文件中的package_name与应用包名一致,sha256_cert_fingerprints为当前使用的签名证书指纹(测试用debug指纹,发布用release指纹),示例正确格式:
[{ "relation": ["delegate_permission/common.handle_all_urls"], "target": { "namespace": "android_app", "package_name": "com.your.package.name", "sha256_cert_fingerprints": ["AA:BB:CC:..."] } }]
内容的提问来源于stack exchange,提问作者vishal visvakarma
相关产品推荐
相关产品推荐

