Firebase手机号验证出现Invalid SafetyNetToken错误怎么办?
问题排查与解决方案
- 校验双应用的指纹配置完整性
因你配置了applicationIdSuffix ".debug",项目实际存在2个独立的应用身份,需要分别配置签名指纹:- 正式包(不带
.debug后缀的包名):配置发布签名的SHA-1、SHA-256 - Debug包(带
.debug后缀的包名):配置本地debug.keystore的SHA-1、SHA-256
注意:Firebase SafetyNet校验强制要求配置SHA-256,仅配置SHA-1无法通过校验,这是大多数同类问题的根因。配置完成后需要重新下载google-services.json放到项目对应目录,全量清理编译缓存后重新打包测试。
- 正式包(不带
- 检查Google Cloud项目的SafetyNet服务状态
进入对应Firebase项目绑定的Google Cloud控制台,确认以下配置:- SafetyNet API处于已启用状态,未被限制或配额超限
- OAuth同意屏幕已完成配置,若应用未正式发布,需要将测试用到的Google账号添加到测试用户列表中
- 校验依赖与环境配置
- 更新项目依赖的Firebase Auth组件到最新稳定版,推荐使用Firebase BOM统一管理版本,避免组件版本不兼容问题
- 测试设备的Google Play服务需更新到最新版本,部分老旧版本的Play服务会导致SafetyNet token生成异常
- 确认设备系统时间与网络时间同步,SafetyNet token有严格的有效期校验,设备时间偏差超过5分钟会直接导致token校验失败
- 优先使用搭载完整Google Play服务的真机测试,部分定制ROM或模拟器可能缺少SafetyNet运行必要的组件
- 检查混淆配置
若项目开启了ProGuard/R8混淆,需要添加以下混淆规则避免相关类被误裁剪:-keep class com.google.android.gms.common.internal.safeparcel.SafeParcelable { public static final *** NULL; } -keepnames @com.google.android.gms.common.annotation.KeepName class * -keepclassmembernames class * { @com.google.android.gms.common.annotation.KeepName *; } -keepnames class * implements android.os.Parcelable { public static final ** CREATOR; } -keep class com.google.firebase.auth.** { *; }
完成以上排查步骤后,清理项目缓存重新打包,即可解决SafetyNet渠道的校验异常问题。
内容的提问来源于stack exchange,提问作者XtremePlayer
相关产品推荐
相关产品推荐

