启用Firebase SmartLock保存凭据出错,咨询项目指纹配置位置
我开发的Android应用使用Firebase认证,核心代码如下:
Intent signInIntent = AuthUI.getInstance() .createSignInIntentBuilder() .setAvailableProviders(providers) //.setIsSmartLockEnabled(false) .build(); signInLauncher.launch(signInIntent);
禁用SmartLock时功能正常,但启用后抛出「Error when saving credential」错误,报错堆栈如下:
com.firebase.ui.auth.FirebaseUiException: Error when saving credential.
at com.firebase.ui.auth.viewmodel.smartlock.SmartLockHandler.lambda$saveCredentials$0$com-firebase-ui-auth-viewmodel-smartlock-SmartLockHandler(SmartLockHandler.java:97)
at com.firebase.ui.auth.viewmodel.smartlock.SmartLockHandler$$ExternalSyntheticLambda0.onComplete(Unknown Source:2)
at com.google.android.gms.tasks.zzi.run(com.google.android.gms:play-services-tasks@@18.0.2:1)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7656)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
Caused by: com.google.android.gms.common.api.ApiException: 16: Cannot find an eligible account.
at com.google.android.gms.common.internal.ApiExceptionUtil.fromStatus(com.google.android.gms:play-services-base@@18.0.1:3)
at com.google.android.gms.common.internal.zap.onComplete(com.google.android.gms:play-services-base@@18.0.1:4)
at com.google.android.gms.common.api.internal.BasePendingResult.zab(com.google.android.gms:play-services-base@@18.0.1:7)
at com.google.android.gms.common.api.internal.BasePendingResult.setResult(com.google.android.gms:play-services-base@@18.0.1:6)
at com.google.android.gms.internal.auth-api.zbm.setResult(com.google.android.gms:play-services-auth@@20.3.0:1)
at com.google.android.gms.internal.auth-api.zbk.zbc(com.google.android.gms:play-services-auth@@20.3.0:1)
at com.google.android.gms.internal.auth-api.zbr.zba(com.google.android.gms:play-services-auth@@20.3.0:7)
at com.google.android.gms.internal.auth-api.zbb.onTransact(com.google.android.gms:play-services-auth@@20.3.0:3)
at android.os.Binder.execTransactInternal(Binder.java:1154)
at android.os.Binder.execTransact(Binder.java:1123)
推测问题与应用签名指纹有关,已在Firebase项目控制台生成指纹,但不清楚项目中何处配置。
解决步骤
- 确认指纹类型:确保你在Firebase控制台添加的是应用签名证书的SHA-1指纹,调试版和发布版指纹都需要分别添加(如果用调试包测试,必须添加调试指纹)。
- 更新项目配置文件:
在Firebase控制台添加完指纹后,重新下载项目对应的google-services.json文件,替换Android项目根目录下的同名文件即可。Firebase会自动把指纹信息写入这个配置文件。 - 验证签名配置:
如果你手动管理签名,需确保app/build.gradle中的签名配置与Firebase控制台添加的指纹一致:signingConfigs { release { storeFile file("your-keystore-path.jks") storePassword "your-store-password" keyAlias "your-key-alias" keyPassword "your-key-password" } debug { storeFile file(System.getProperty("user.home") + "/.android/debug.keystore") storePassword "android" keyAlias "androiddebugkey" keyPassword "android" } } buildTypes { release { signingConfig signingConfigs.release } debug { signingConfig signingConfigs.debug } } - 检查依赖版本:确保Firebase Auth和FirebaseUI Auth的依赖版本匹配,避免版本冲突:
implementation 'com.google.firebase:firebase-auth:22.0.0' implementation 'com.firebaseui:firebase-ui-auth:8.0.2' - 清理重建项目:执行
./gradlew clean build命令,或在Android Studio中点击Build -> Clean Project,再Rebuild Project,确保配置生效。
内容的提问来源于stack exchange,提问作者vico

