更新assetlinks.json后Android App Links验证失败如何强制重验
App Links旧验证缓存不更新的解决方法
核心原因:Android系统对App Links验证失败的域名会自动拉长重试间隔,部分厂商定制ROM甚至会把重试间隔拉长到30天以上,这就是你更新配置2周后存量用户仍未自动完成重验证的根本原因。以下方案均不会影响已经正常使用App Links的用户,不需要用户手动执行adb操作。
首选方案:应用内主动触发定向重验证(无用户感知)
从Android 12(API 31)开始系统提供了原生的域验证管理接口,你可以在应用冷启动时做轻量检查:
- 调用
DomainVerificationManager获取当前应用所有声明域名的验证状态 - 仅对验证状态为失败、未验证的域名,调用系统接口发起后台重验证请求
- 系统会在后台静默拉取最新的assetlinks.json完成校验,全程无弹窗、不打扰用户,已经验证通过的域名不会触发任何额外操作
- Android 11及以下版本可通过Google Play服务的兼容API实现相同逻辑,不需要申请特殊权限
参考核心实现逻辑:
val domainVerificationManager = getSystemService(DomainVerificationManager::class.java) val userState = domainVerificationManager.getDomainVerificationUserState(packageName) val failedDomains = userState.hostToStateMap.filterValues { it == DomainVerificationUserState.DOMAIN_STATE_NONE }.keys if (failedDomains.isNotEmpty()) { // 仅对失败域名触发重验证 domainVerificationManager.requestDomainVerification( DomainVerificationRequest(failedDomains), activity, object : DomainVerificationManager.DomainVerificationCallback { override fun onComplete(result: Int) { // 校验结果无需额外处理,系统会自动更新App Links打开策略 } } ) }
零代码方案:通过应用版本更新触发系统自动重验证
如果不想新增代码逻辑,直接发布应用版本更新即可:
- 只要你新版本的AndroidManifest.xml中App Links对应的intent-filter配置(host、scheme、path规则)和旧版本保持一致,系统在应用覆盖安装完成后,会自动清空该应用之前的App Links验证失败缓存,强制发起一次全量域名重验证
- 该验证过程在应用安装后10分钟内由系统后台完成,用户无感知,不需要手动操作
- 该逻辑适用于所有Android 6.0及以上支持App Links的版本,覆盖绝大多数存量设备
兜底方案(针对长期不更新应用的用户)
对于长期不更新应用的存量用户,可以在对应域名的H5落地页做兼容:
- 检测到Android环境访问时,优先尝试通过应用自定义scheme唤起App
- 对确实无法自动唤起的用户,展示轻量引导,提示用户在系统设置中打开该域名「在应用中打开」的开关即可
注意事项
- 你当前同时配置debug、release签名指纹的assetlinks.json是正确的,不需要调整配置内容
- 不要修改assetlinks.json的存放路径,系统只会固定读取域名根目录下
.well-known/assetlinks.json路径的文件,改动路径会导致全量用户验证失败
内容的提问来源于stack exchange,提问作者Coder681
相关产品推荐
相关产品推荐

