Flutter Deep Links异常:adb命令正常但第三方应用无法唤起应用
Flutter Deep Links无法从其他应用唤起的解决方案
针对你遇到的adb命令可正常唤起应用,但其他应用打开链接直接跳转网页的问题,以下是关键排查和修复方向:
1. 处理Android App Link自动验证失败(autoVerify)
你在intent-filter中设置了android:autoVerify="true",这会触发Android App Link的验证机制:系统会检查域名hordevfree.online根目录下是否存在assetlinks.json文件,验证不通过时,系统不会将该域名的链接关联到你的应用,直接交由浏览器处理(adb命令会跳过这个验证步骤,所以能正常唤起)。
修复步骤:
- 在网站根目录(或
.well-known子目录)放置assetlinks.json,内容示例:
[{ "relation": ["delegate_permission/common.handle_all_urls"], "target": { "namespace": "android_app", "package_name": "com.hordev.porcicultor", "sha256_cert_fingerprints": ["你的应用签名SHA256指纹"] } }]
- 获取SHA256指纹:使用
keytool -list -v -keystore 你的签名文件路径命令获取(debug包可使用默认debug.keystore)。 - 验证文件可访问:确保通过
https://hordevfree.online/.well-known/assetlinks.json或https://hordevfree.online/assetlinks.json能正常访问该文件。
2. 提高Intent Filter优先级
如果存在其他应用(比如浏览器)的intent-filter也匹配该链接,可能因优先级更高导致被拦截。给你的deep link intent-filter添加优先级:
修改AndroidManifest.xml中的intent-filter:
<intent-filter android:autoVerify="true" android:priority="1000"> <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="hordevfree.online" android:pathPrefix="/"/> </intent-filter>
android:priority="1000"是允许的最高优先级,确保你的应用优先被系统匹配。
3. 重置应用关联与缓存
- 卸载并重新安装应用,确保系统重新读取Manifest配置。
- 清除浏览器的缓存和链接关联数据:进入浏览器设置→应用信息→清除数据。
- 在系统设置中手动关联:进入应用信息→打开支持的链接→确保已勾选你的域名。
额外测试建议
- 使用
adb shell pm get-app-links com.hordev.porcicultor命令查看应用的链接验证状态,确认是否显示verified。 - 尝试在短信、笔记应用中直接点击链接测试,而非从浏览器跳转。
内容的提问来源于stack exchange,提问作者Carlos Arévalo
相关产品推荐
相关产品推荐

