Firebase 身份验证失败并出现 FirebaseException:JsonResponse 实例化失败

Jul*_*ian 6 android xamarin.forms firebase-authentication google-signin

问题

我刚刚为我的一个应用程序创建了更新Xamarin.Forms,现在我遇到了一个问题:将新的.aab上传到 Google Play后,Firebase登录工作流程突然中断。到目前为止一直运行良好。

当我尝试登录时,选择 Google 用户帐户后,设备日志中会显示以下错误消息:

Time    Device Name Type    PID Tag Message
11-18 16:49:57.295  Samsung SM-S901B    Verbose 5646    mono-stdout 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)
Run Code Online (Sandbox Code Playgroud)

这仅影响由 Google Play 签名的发布版本,因此,我无法在调试器中复制它。运行调试版本时,一切都按预期工作。

附加信息

Android 版本:13.0 Android 目标 API:33

NuGet 包(仅显示看似相关的包):

  • Xamarin.Forms 5.0.0.2515
  • 谷歌.API 1.57.0
  • 谷歌.Apis.Auth 1.57.0
  • Xamarin.Firebase.Auth 121.0.8
  • Xamarin.Firebase.Common 120.1.2
  • Xamarin.GooglePlayServices.Auth 120.3.0

我在 Android 活动中使用 Google 登录按钮,但尚未使用 Web 身份验证器。

我使用 Android App Bundles (.aab) 进行发布,而不是上传 .apk 文件。

到目前为止我尝试过的

我已对照 Firebase 控制台、google-services.json、Google Cloud 中的指纹检查了所有 SHA 证书指纹(针对调试和发布版本以及我的密钥库中的签名证书和 Google Play 用于签署发布的证书)控制台以及我的 Android API 密钥的应用程序限制。

调试不会产生相同的结果,因此我只能设法使用设备日志来获取上面显示的异常。

除此之外,我还为 Xamarin.Forms 升级到了最新版本的 Google 和 Firebase Auth 库。

我现在有点不知所措。有没有人对如何进一步缩小范围有任何建议,或者以前有人遇到过这个问题吗?

小智 12

在 proguard-rules.pro 文件中添加以下几行应该可以解决此问题,

-keep class com.google.firebase.** { *; }
-keep class com.google.android.gms.** { *; }
-dontwarn com.google.firebase.**
-dontwarn com.google.android.gms.**
Run Code Online (Sandbox Code Playgroud)

  • 是的,实际使用 ProGuard 时这是必需的。使用 ProGuard 时,需要排除的不仅仅是 Firebase 和 Google 身份验证库。我最终为我的应用程序完全禁用了它。 (2认同)

Jul*_*ian 8

它又起作用了。

该问题与签名证书(这通常是此类问题的第一个解决方案)和正在使用的库无关。

这个问题实际上是由一个小优化引起的,该优化导致代码收缩器删除了一些 Firebase 相关代码。(暂时)禁用代码收缩器解决了该问题。


小智 5

更新 Firebase BOM,此问题现已在 Android BoM(物料清单)版本 32.2.0 中修复