Xamarin.Forms应用上传AAB至Google Play后Firebase登录失败求助
问题描述
将Xamarin.Forms应用的AAB包上传至Google Play后,Firebase登录流程突然失效(此前运行正常),选择Google账号登录后设备日志抛出以下错误:
com.google.firebase.FirebaseException: An internal error has occurred. [ Instantiation of JsonResponse failed! class com.google.android.gms.internal.firebase-auth-api.zzaac ] at com.google.android.gms.internal.firebase-auth-api.zzwe.zza(com.google.firebase:firebase-auth@@21.0.8:4) at com.google.android.gms.internal.firebase-auth-api.zzxc.zza(com.google.firebase:firebase-auth@@21.0.8:9) at com.google.android.gms.internal.firebase-auth-api.zzxd.zzl(com.google.firebase:firebase-auth@@21.0.8:1) at com.google.android.gms.internal.firebase-auth-api.zzxa.zzh(com.google.firebase:firebase-auth@@21.0.8:25) at com.google.android.gms.internal.firebase-auth-api.zzwc.zzh(com.google.firebase:firebase-auth@@21.0.8:1) at com.google.android.gms.internal.firebase-auth-api.zzua.zza(com.google.firebase:firebase-auth@@21.0.8:2) at com.google.android.gms.internal.firebase-auth-api.zzxl.zzb(com.google.firebase:firebase-auth@@21.0.8:13) at com.google.android.gms.internal.firebase-auth-api.zzxl.zza(com.google.firebase:firebase-auth@@21.0.8:14) at com.google.android.gms.internal.firebase-auth-api.zzwr.zzq(com.google.firebase:firebase-auth@@21.0.8:4) at com.google.android.gms.internal.firebase-auth-api.zzuh.zzA(com.google.firebase:firebase-auth@@21.0.8:4) at com.google.android.gms.internal.firebase-auth-api.zzwd.zzu(com.google.firebase:firebase-auth@@21.0.8:5) at com.google.android.gms.internal.firebase-auth-api.zzvj.zzc(com.google.firebase:firebase-auth@@21.0.8:1) at com.google.android.gms.internal.firebase-auth-api.zzxe.run(com.google.firebase:firebase-auth@@21.0.8:1) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1137) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637) at java.lang.Thread.run(Thread.java:1012)
该问题仅出现在Google Play签名的Release版本中,Debug版本运行正常,无法通过调试复现。
环境信息
- Android版本:13.0
- 目标API:33
- 相关NuGet包:
- Xamarin.Forms 5.0.0.2515
- Google.Apis 1.57.0
- Google.Apis.Auth 1.57.0
- Xamarin.Firebase.Auth 121.0.8
- Xamarin.Firebase.Common 120.1.2
- Xamarin.GooglePlayServices.Auth 120.3.0
- 发布方式:Android App Bundles(.aab),使用Google登录按钮(未用Web Authenticator)
已尝试操作
- 核对Debug、Release版本及Google Play签名证书的SHA指纹,确保与Firebase控制台、google-services.json、Google Cloud控制台及API密钥应用限制一致
- 升级相关Google和Firebase Auth NuGet包至最新版本
解决建议
添加Firebase Auth混淆规则:Release版本的R8/ProGuard混淆可能破坏Firebase内部类,在项目的
ProGuard.cfg文件中添加以下规则:-keep class com.google.android.gms.internal.firebase-auth-api.** { *; } -keep class com.google.firebase.auth.** { *; } -keepnames class com.google.firebase.auth.** { *; } -keepnames class com.google.android.gms.internal.firebase-auth-api.** { *; }确保Xamarin Android项目的Release构建已启用ProGuard并正确引用该配置文件。
重新验证Google Play应用签名密钥的SHA指纹:
- 登录Google Play控制台,进入应用的应用签名页面,复制应用签名密钥证书的SHA-256指纹
- 将该指纹添加到Firebase控制台的项目设置->应用->SHA证书指纹中
- 重新下载更新后的
google-services.json文件,替换到Xamarin Android项目的Resources目录下,确保构建时正确嵌入
检查Google Cloud OAuth客户端ID配置:
在Google Cloud控制台的API和服务->凭据页面,确认存在基于Google Play应用签名密钥SHA生成的Android客户端ID,且该ID已关联到Firebase项目。若不存在,需手动创建对应客户端ID。测试本地签名的Release版本:
使用自己的上传密钥签名生成Release版本的AAB/APK,安装到设备测试。若登录正常,说明问题集中在Google Play签名的配置环节;若仍异常,需排查本地Release构建的依赖打包或混淆问题。强制包含Firebase Auth依赖:
在Xamarin Android项目的build.gradle文件中,确保Firebase Auth相关依赖被强制打包,避免AAB按需特性遗漏必要组件:implementation 'com.google.firebase:firebase-auth:21.0.8' implementation 'com.google.android.gms:play-services-auth:20.4.1'
内容的提问来源于stack exchange,提问作者Julian

