Firebase Android:已注册SHA256指纹仍出现无效AppCheck令牌错误
Firebase App Check 无效令牌问题排查及Play Integrity生效条件说明
一、无效令牌问题的常见排查点
- 确认签名指纹匹配:
你用./gradlew signingReport获取的SHA-256指纹,要确保是当前运行应用的签名配置对应的指纹。比如用debug签名运行,就得把debug的SHA-256加到Firebase控制台的Play Integrity和SafetyNet配置里;如果是release签名,要对应release的指纹。很多人会搞混debug和release的指纹,导致不匹配。 - 初始化代码的位置与方式:
不需要在所有Activity里初始化,正确的做法是在Application类的onCreate()方法里全局初始化,比如:
还要记得在AndroidManifest.xml里配置这个Application类。如果在Activity里重复初始化,可能会导致令牌生成异常。class MyApp : Application() { override fun onCreate() { super.onCreate() FirebaseApp.initializeApp(this) val appCheck = FirebaseAppCheck.getInstance() appCheck.installAppCheckProviderFactory( PlayIntegrityAppCheckProviderFactory.getInstance() ) } } - 检查Firebase控制台配置:
确保在Firebase控制台的App Check页面,已经正确启用了Play Integrity和SafetyNet,并且对应的SHA-256指纹已经添加到这两个验证方式的配置中,没有遗漏。另外,确认你的应用包名和控制台里的包名完全一致。 - 设备的Google Play服务版本:
Play Integrity依赖Google Play服务,物理设备上的Google Play服务版本过低可能导致验证失败,建议把设备的Google Play服务更新到最新版本。
二、Play Integrity的生效条件
官方文档提到的“仅支持Google Play分发的应用”,并不是说必须发布到Play商店才能测试。你可以通过以下方式在本地测试:
- 使用内部测试/封闭测试渠道:把应用上传到Play Console的内部测试渠道,然后用测试账号下载安装,此时Play Integrity可以正常工作。
- 使用Play Integrity的调试模式:在Firebase控制台的App Check页面,为你的应用添加调试令牌,然后在初始化时设置调试模式,这样本地运行的应用也能生成有效的App Check令牌。比如:
注意调试模式只用于开发阶段,正式发布前要移除。appCheck.installAppCheckProviderFactory( PlayIntegrityAppCheckProviderFactory.getInstance() ) // 调试模式设置 if (BuildConfig.DEBUG) { val debugProviderFactory = DebugAppCheckProviderFactory.getInstance() appCheck.installAppCheckProviderFactory(debugProviderFactory) }
如果直接用本地签名的APK在物理设备上运行(不上传到Play渠道),Play Integrity确实无法正常验证,因为它依赖Play商店的分发上下文来确认应用的合法性。
内容的提问来源于stack exchange,提问作者user20897932
相关产品推荐
相关产品推荐

