Firebase Phone OTP在Android即时应用中因Android Keystore崩溃
问题背景
当前Firebase Phone OTP在发送手机验证码前,会通过Play Integrity API验证应用:
- 模拟器运行时,会在浏览器启动Recaptcha流程
- 物理设备上以普通应用运行时,可通过Play Integrity API自动验证
- 但以Android即时应用运行时会崩溃
崩溃堆栈跟踪
java.lang.RuntimeException: Unable to resume activity {com.example.myapp/com.google.firebase.auth.internal.RecaptchaActivity}: java.lang.NullPointerException: Attempt to invoke interface method 'int android.security.keystore.IKeystoreService.exist(java.lang.String, int)' on a null object reference at android.app.ActivityThread.performResumeActivity(ActivityThread.java:4657) at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:4690) at android.app.servertransaction.ResumeActivityItem.execute(ResumeActivityItem.java:52) at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:176) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2267) at android.os.Handler.dispatchMessage(Handler.java:107) at android.os.Looper.loop(Looper.java:237) at android.app.ActivityThread.main(ActivityThread.java:8167) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:496) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1100) Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'int android.security.keystore.IKeystoreService.exist(java.lang.String, int)' on a null object reference at android.security.KeyStore.contains(KeyStore.java:426) at android.security.keystore.AndroidKeyStoreSpi.engineContainsAlias(AndroidKeyStoreSpi.java:1038) at java.security.KeyStore.containsAlias(KeyStore.java:1293) at com.google.android.gms.internal.firebase-auth-api.zzjt.zzd(com.google.firebase:firebase-auth@@22.0.0:9) at com.google.android.gms.internal.firebase-auth-api.zzjt.zzc(com.google.firebase:firebase-auth@@22.0.0:2) at com.google.android.gms.internal.firebase-auth-api.zzjp.zzj(com.google.firebase:firebase-auth@@22.0.0:4) at com.google.android.gms.internal.firebase-auth-api.zzjp.zzg(com.google.firebase:firebase-auth@@22.0.0:16) at com.google.firebase.auth.internal.zzk.<init>(com.google.firebase:firebase-auth@@22.0.0:6) at com.google.firebase.auth.internal.zzk.zza(com.google.firebase:firebase-auth@@22.0.0:2) at com.google.firebase.auth.internal.RecaptchaActivity.zzb(com.google.firebase:firebase-auth@@22.0.0:9) at com.google.android.gms.internal.firebase-auth-api.zzaai.<init>(com.google.firebase:firebase-auth@@22.0.0:14) at com.google.firebase.auth.internal.RecaptchaActivity.onResume(com.google.firebase:firebase-auth@@22.0.0:47) at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1454) at android.app.Activity.performResume(Activity.java:8111) at android.app.ActivityThread.performResumeActivity(ActivityThread.java:4647) at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:4690) at android.app.servertransaction.ResumeActivityItem.execute(ResumeActivityItem.java:52) at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:176) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2267) at android.os.Handler.dispatchMessage(Handler.java:107) at android.os.Looper.loop(Looper.java:237) at android.app.ActivityThread.main(ActivityThread.java:8167) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:496) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1100)
已知同类问题在Stack Overflow存在,目前Google暂未修复Android即时应用中Android Keystore的相关兼容问题,现寻求以下方向的解决方案:
- 能否绕过Firebase Phone OTP对Android Keystore的依赖?
- 有无开发者已成功在Android即时应用中正常使用Android Keystore?
- 欢迎提供未被广泛尝试的新思路。
内容的提问来源于stack exchange,提问作者sean
相关产品推荐
相关产品推荐

