Flutter Android App Link(深度链接)无法在安卓设备打开应用排查
Android深度链接无法唤起Flutter应用的排查方案
结合你提供的配置和adb命令能正常启动应用的情况,以下是具体排查方向:
1. 检查App Links验证状态(核心原因)
你在intent-filter中设置了android:autoVerify="true",这会触发Android的App Links验证机制,只有验证通过,系统才会直接唤起应用,否则会跳转网页或弹出选择器:
- 验证
assetlinks.json的可访问性:确保设备能通过HTTPS访问https://192.168.1.92:8000/.well-known/assetlinks.json(注意必须用HTTPS,HTTP无法通过官方验证)。 - 核对SHA256指纹:确认
assetlinks.json中的指纹与你当前测试包的证书指纹一致。Debug包和Release包的指纹不同,Debug包可通过以下命令获取:keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android - 查看设备端验证结果:进入设备「设置」→「应用」→「你的应用」→「打开链接」,若显示「未验证」,说明验证流程未通过,需优先解决此问题。
2. 修正Intent Filter的Data配置
你的intent-filter中第二个<data>标签缺少host属性,会导致匹配范围异常,影响验证和链接唤起:
<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的本地测试配置 --> <data android:scheme="http" android:host="192.168.1.92:8000" /> <!-- 补充https的host配置 --> <data android:scheme="https" android:host="192.168.1.92:8000" /> </intent-filter>
另外,Android 12+对HTTP协议的App Links有严格限制,建议优先使用HTTPS进行测试(可使用自签名证书并让设备信任该证书)。
3. 处理Android 11+的包可见性限制
Android 11及以上版本需要声明包可见性,才能让浏览器唤起你的应用,在AndroidManifest.xml中添加以下配置:
<queries> <intent> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="https" /> </intent> </queries>
4. 重置应用默认打开方式
若之前用户手动选择过用浏览器打开该链接,系统会保留默认设置:
- 进入设备「设置」→「应用」→「你的应用」→「默认打开方式」,清除已设置的默认值,重新测试链接唤起。
5. 验证Flutter端的基础配置(次要)
虽然不影响应用唤起,但需确保Flutter端能接收链接:
- 在
main函数中通过WidgetsBinding.instance.platformDispatcher.defaultRouteName获取唤起链接,或使用路由配置处理跳转逻辑。
内容的提问来源于stack exchange,提问作者Affar
相关产品推荐
相关产品推荐

