Android下带动态子域名的Expo Deep Link无法唤起应用问题排查
问题描述
希望用户访问https://subdomain.myapp.com/post这类含任意动态子域名的链接时唤起Expo(SDK 46)应用,已完成以下配置但链接始终仅在浏览器打开,无唤起应用选项:
当前配置内容
- app.json中的intentFilters配置:
"intentFilters": [ { "action": "VIEW", "autoVerify": true, "data": [ { "scheme": "https", "host": "*.myapp.com", "pathPattern": "/post" } ], "category": ["BROWSABLE", "DEFAULT"] } ]
- 所有子域名下已部署
/.well-known/assetlinks.json文件:
[ { "relation": ["delegate_permission/common.handle_all_urls"], "target": { "namespace": "android_app", "package_name": "com.app.app", "sha256_cert_fingerprints": ["XX:38:A6:XX:28:XX:72:BB:29:CF:C7:25:3E:05:85:A4:D0:00:98:83:11:64:12:C8:06:32:A5:70:7B:BC:71:XX"] } } ]
- 测试操作:生成新构建包后,测试Slack、Gmail中的链接,以及执行adb命令:
adb shell am start -W -a android.intent.action.VIEW -d "https://subdomain.myapp.com/post/my-post-id"
排查与解决方向
- pathPattern匹配范围错误:当前配置的
pathPattern: "/post"仅能精确匹配/post路径,但测试链接是/post/my-post-id,需修改为/post.*或/post/.*才能覆盖带后续路径的链接。Android的pathPattern规则中,*匹配任意非斜杠字符,.*匹配任意字符(包含斜杠),可根据实际需求选择。 - assetlinks.json验证失效:
- 确认文件的HTTP响应头
Content-Type为application/json,服务器返回头错误会导致系统无法识别文件。 - 核对SHA256指纹:使用
keytool -list -v -keystore 你的密钥库文件.jks(或Expo生成的密钥库)获取对应构建版本(debug/release)的正确指纹,确保与文件中配置一致。 - 验证文件可通过HTTPS正常访问,无重定向,且所有子域名下的该文件内容完全一致。
- 确认文件的HTTP响应头
- Expo构建缓存残留:执行
expo prebuild --clean清理旧构建缓存后重新生成构建包,避免旧配置未更新。 - 系统验证状态检查:运行
adb shell pm get-app-links com.app.app查看应用链接的验证状态,若显示unverified,说明assetlinks.json配置存在问题,系统未通过验证。 - 应用权限设置:部分设备需手动在应用设置中开启“打开支持的链接”权限,检查应用的默认打开方式配置。
- 缩小测试范围:先测试精确匹配
https://subdomain.myapp.com/post的链接,确认能唤起应用后,再测试带ID的路径链接,逐步排查问题。
内容的提问来源于stack exchange,提问作者Eduardo Pedroso
相关产品推荐
相关产品推荐

