Flutter深度链接跳转浏览器而非应用问题排查(go_router)
深度链接始终在浏览器打开的排查与解决
1. AndroidManifest.xml 配置问题
- 增加 Intent Filter 优先级:浏览器的默认 Intent Filter 优先级可能高于你的应用,给应用的 intent-filter 添加
android:priority="999"(最高优先级为1000,避免冲突选999),确保系统优先选择你的应用处理链接。 - 校验 Scheme/Host/Path 匹配:如果测试链接是
https://yourdomain.com/path,要确保 intent-filter 的<data>标签包含android:scheme="https"、android:host="yourdomain.com",若有路径要求需补充android:pathPrefix="/path"规则。 - 确认目标 Activity:intent-filter 必须配置在启动 Activity(通常是 MainActivity)上,同时设置合适的启动模式(如
android:launchMode="singleTop"),避免重复创建实例。
2. Assetlinks.json 验证问题
- 检查文件位置与可访问性:必须放在
https://yourdomain.com/.well-known/assetlinks.json,直接用浏览器访问该 URL,确保返回正确 JSON 且无404、重定向情况。 - 校验 JSON 内容准确性:
- 包名需与 AndroidManifest 里的
package属性完全一致(如com.yourcompany.yourapp)。 - SHA-256 指纹要匹配签名密钥:Debug 版本用 debug 密钥指纹,Release 版本用 release 密钥指纹,可通过命令
keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android获取 debug 指纹。 - 确保 JSON 格式无语法错误,比如括号、逗号位置正确。
- 包名需与 AndroidManifest 里的
3. GoRouter 路由配置问题
- 确认深度链接路由匹配:比如链接路径是
/path,需在 GoRouter 的路由表中定义对应的GoRoute(path: '/path', builder: ...)。 - 检查路由初始化:确保
MaterialApp.router正确设置了routerConfig,且没有自定义逻辑拦截深度链接的处理。
4. 测试与系统缓存问题
- 清除默认应用关联:进入设备设置-应用-你的应用-清除默认操作;同时清除浏览器的默认设置,避免系统缓存旧的链接处理规则。
- 规范 adb 测试命令:使用
adb shell am start -W -a android.intent.action.VIEW -d "https://yourdomain.com/path" com.yourcompany.yourapp直接指定应用包名测试,若未指定包名,系统可能弹出选择器。 - 确认 Android 版本:Android 6.0 及以上才支持 assetlinks.json 关联,低于该版本需改用 Scheme 方式配置。
5. Firebase 托管配置问题
- 保留
.well-known路径访问:避免 Firebase 托管的重定向规则将所有请求导向 index.html,需单独放行.well-known路径的访问权限。 - 确保 HTTPS 配置:assetlinks.json 必须通过 HTTPS 访问,HTTP 链接无法触发应用关联。
内容的提问来源于stack exchange,提问作者Junaid Tariq
相关产品推荐
相关产品推荐

