Flutter Deeplink在Android SDK30可用,SDK33+仅打开浏览器问题排查
Android SDK33深度链接直接跳转浏览器问题排查方案
可能的原因及对应解决方法
1. SDK33对应用链接验证的严格性提升
Android 13(SDK33)强化了android:autoVerify="true"的验证逻辑,即使Google Play控制台显示链接正常,本地测试设备可能未完成验证:
- 排查点:检查服务器根目录下
.well-known/assetlinks.json文件,确保包含**所有构建变体(debug/release)**的SHA256证书指纹,格式无语法错误。 - 解决方案:
- 生成debug和release包的SHA256指纹,全部添加到assetlinks.json中,示例格式:
[ { "relation": ["delegate_permission/common.handle_all_urls"], "target": { "namespace": "android_app", "package_name": "你的应用包名", "sha256_cert_fingerprints": ["DEBUG_SHA256", "RELEASE_SHA256"] } } ] - 确保设备网络正常,能访问该json文件(无代理、防火墙拦截),重启应用后重新触发验证。
- 生成debug和release包的SHA256指纹,全部添加到assetlinks.json中,示例格式:
2. adb测试命令的参数优先级问题
你当前使用的adb命令仅指定了BROWSABLE类别,SDK33下可能让浏览器的intent匹配优先级高于应用:
- 解决方案:修改命令,同时添加
DEFAULT类别,确保intent匹配更准确:.\adb shell 'am start -a android.intent.action.VIEW -c android.intent.category.DEFAULT -c android.intent.category.BROWSABLE -d "https://myApp.my-server.de/my-deeplink/1"'
3. 本地debug包未通过验证
Google Play控制台的验证基于release包的指纹,但本地测试的debug包指纹可能未加入assetlinks.json,导致SDK33设备判定应用未通过链接验证:
- 解决方案:
- 先测试Google Play商店安装的release包,验证深度链接是否正常跳转,排除debug包的问题。
- 若需要debug测试,将debug包的SHA256指纹补充到assetlinks.json中,重新部署到服务器。
4. 设备应用链接验证状态异常
SDK33设备会单独存储每个应用的链接验证状态,若状态为“未验证”,系统会默认将链接交给浏览器处理:
- 排查点:进入设备设置→应用→你的应用→打开为链接,查看是否显示“已验证”。
- 解决方案:若显示“未验证”,检查assetlinks.json的配置是否正确,或手动清除应用缓存后重新触发验证。
内容的提问来源于stack exchange,提问作者derChris
相关产品推荐
相关产品推荐

