使用通配符域名时Android App Link未自动验证的问题排查
我的AndroidManifest.xml配置如下:
<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" /> <data android:scheme="https" android:host="*.example.com" /> </intent-filter>
assetlinks.json配置如下:
{ "relation": ["delegate_permission/common.handle_all_urls"], "target": { "namespace": "android_app", "package_name": "com.example.main", "sha256_cert_fingerprints": ["256 sha256_cert_fingerprints"] } }
应用安装后,App链接验证页面显示链接未自动验证。但在AndroidManifest.xml中指定具体子域名sandbox.example.com时,链接会在应用安装后立即自动验证。
请问通配符域名支持自动验证吗?若支持,我的配置是否存在问题?注:此处使用example.com作为示例域名,未使用实际域名。
通配符域名支持App Links自动验证,但你的配置存在关键问题
问题根源:assetlinks.json的部署位置错误
当使用*.example.com这类通配符域名时,Android系统会自动去**根域名example.com**下的.well-known目录查找assetlinks.json文件,而非某个子域名。你当前仅在单个子域名下部署了验证文件,无法满足通配符场景的验证要求。
正确配置方案
将assetlinks.json部署到根域名的指定路径
必须把文件放在https://example.com/.well-known/assetlinks.json,不能放在sandbox.example.com这类子域名路径下。保证验证文件的可访问性
- 文件需通过HTTPS直接访问,无跳转、无身份验证拦截
- 服务器返回的Content-Type必须为
application/json
遵守通配符规则限制
- 通配符仅支持一级子域名匹配(例如
*.example.com可匹配a.example.com,但不支持a.b.example.com) - 禁止使用多级通配符(如
*.*.example.com)
- 通配符仅支持一级子域名匹配(例如
核对签名指纹的正确性
替换配置中的"256 sha256_cert_fingerprints"为应用签名的真实SHA-256指纹,格式要求为大写字母+冒号分隔(示例:AA:BB:CC:DD:EE:...)
验证方法
你可以使用Android Studio内置的App Links验证工具,或者通过adb shell dumpsys package domain-preferred-apps命令查看系统中App Links的验证状态,确认通配符域名是否已通过验证。
内容的提问来源于stack exchange,提问作者ThinkAndCode

