使用外部DeepLink打开Android应用时跳转Chrome并显示403错误
排查App Links跳转异常(外部链接跳Chrome并403)的解决方案
核心排查与修复步骤:
1. 先解决Asset Links文件的访问与有效性问题
- 直接在浏览器访问
https://mydomain.co/.well-known/assetlinks.json,确认能正常返回JSON内容,不会出现403/404或跳转登录页。如果这里浏览器都拿不到文件,Android系统肯定验证失败,会 fallback 到浏览器打开链接,而你的服务器对/app路径设了权限,就会显示403。 - 核对
sha256_cert_fingerprints:必须和发布版签名证书的指纹完全一致(别用调试版证书)。用命令生成正确指纹:
复制SHA256值时要去掉空格,格式保持keytool -list -v -keystore 你的发布签名文件.jksAA:BB:CC:...的样式。 - 用在线JSON校验工具检查
assetlinks.json的语法,确保没有引号、逗号这类低级错误。
2. 核对Manifest配置细节
- 确保
android:autoVerify="true"只在处理该域名的唯一一个intent-filter上,多了会导致验证冲突。 - 确认
pathPrefix="/app"覆盖了你测试的链接(比如https://mydomain.co/app/profile/edit_profile是符合规则的),但如果服务器本身对/app路径设了访问限制,一旦App Links验证失败,浏览器打开就会403——这本质是验证没通过导致的 fallback。
3. 查看设备上的App Links验证状态
- 打开设备「设置」→「应用」→ 你的App →「打开链接」,看是否显示「已验证」。如果是「未验证」,说明系统没通过Asset Links校验,会直接跳浏览器。
- 用adb命令强制重新验证并查看日志:
日志里会明确给出验证失败的原因(比如证书不匹配、Asset Links文件无法访问等)。adb shell pm verify-app-links --re-verify co.myapp.app adb logcat -b all -s PackageManager
4. 服务器端的额外配置检查
- 确保
assetlinks.json的返回头Content-Type是application/json,有些服务器默认返回text/plain,会导致Android系统无法解析。 - 确认域名的HTTPS证书是受信任的正规CA颁发的,自签名证书会导致验证失败。
- 如果域名有重定向(比如HTTP转HTTPS、www转非www),要保证
assetlinks.json在最终跳转的目标域名上能正常访问,重定向不能中断验证流程。
5. 理解测试场景的差异
- adb命令是直接唤起App,跳过了系统的App Links验证逻辑,所以adb测试正常不代表验证通过。必须通过外部场景(比如短信、第三方App里的链接)测试,才能触发完整的验证流程。
内容的提问来源于stack exchange,提问作者devB78
相关产品推荐
相关产品推荐

