React Native Android:Gmail及Firebase手机OTP登录发布版无法运行
Android发布版Gmail/Firebase OTP登录失效排查方案(调试版正常)
核心排查方向及解决方案
1. 确认发布版签名指纹完全正确添加到Firebase
调试版和发布版用的是不同的签名密钥,很多人会误把调试版的SHA-1/256当成发布版的添加:
- 生成发布版指纹命令:
keytool -list -v -keystore 你的发布签名文件路径(如release.jks) -alias 签名别名 - Firebase控制台需同时添加SHA-1和SHA-256(Google登录现在依赖SHA-256验证)
- 添加后重新下载
google-services.json,替换项目中app模块下的同名文件,确保发布版构建时加载最新配置
2. 修复ProGuard/R8混淆导致的代码丢失
发布版默认开启混淆,会破坏Google登录、Firebase Auth的核心类,需在proguard-rules.pro中添加以下规则:
# Google SignIn 保护规则 -keep class com.google.android.gms.auth.api.signin.** { *; } -keep class com.google.android.gms.common.api.** { *; } -keep class com.google.android.gms.tasks.** { *; } # Firebase Auth 保护规则 -keep class com.google.firebase.auth.** { *; } -keep class com.google.firebase.components.** { *; } -keep class com.google.firebase.iid.** { *; }
同时确认build.gradle中minifyEnabled true时,混淆规则已正确应用。
3. 验证发布版配置文件及插件引用
- 检查app模块下的
google-services.json是否为Firebase控制台最新下载的版本,避免旧文件残留 - 确认app模块的build.gradle底部已添加Google服务插件:
apply plugin: 'com.google.gms.google-services'
4. 核对Firebase控制台应用配置
- 确保控制台中Android应用的包名与发布版包名完全一致(大小写敏感)
- 检查Phone Authentication是否已启用,且发布版的SHA-1已添加(OTP验证依赖SHA-1完成设备校验)
5. 捕获发布版具体错误日志
现有代码未打印未知错误信息,建议修改代码捕获详细错误,方便定位:
try { await GoogleSignin.hasPlayServices(); const {accessToken, idToken} = await GoogleSignin.signIn(); setloggedIn(true); } catch (error) { if (error.code === statusCodes.SIGN_IN_CANCELLED) { alert('Cancel'); } else if (error.code === statusCodes.IN_PROGRESS) { alert('Signin in progress'); } else if (error.code === statusCodes.PLAY_SERVICES_NOT_AVAILABLE) { alert('PLAY_SERVICES_NOT_AVAILABLE'); } else { // 新增:打印具体错误信息 alert(`登录出错:${error.message}`); console.error('Google登录错误详情:', error); } }
也可通过adb logcat *:E过滤发布版错误日志,或集成Firebase Crashlytics捕获崩溃信息。
内容的提问来源于stack exchange,提问作者Sarita Kumari
相关产品推荐
相关产品推荐

