Android Java使用Firebase Auth UI跨设备同账号登录报凭证保存错误
异常触发原因
该异常由Firebase UI Auth集成的Google Smart Lock密码保存服务校验失败触发,错误码16对应「无符合要求的可用账号」,常见触发场景如下:
- 当前设备未登录正常可用的Google账号,或登录的Google账号处于未验证、风控受限等异常状态,Smart Lock无法获取合法的账号载体存储凭证
- 近期升级了
firebase-ui-auth或play-services-auth依赖版本,新版Smart Lock的凭证存储校验逻辑更严格,旧版本的宽松校验规则被废弃 - 目标登录账号已在Smart Lock中存储了多份存在冲突的凭证,触发去重校验失败
- 测试/用户设备为国产ROM,Google Play服务的「读取账号信息」「后台同步」等必要权限被系统限制,Smart Lock无法正常调用系统能力
排查修复方案
紧急线上修复(优先恢复登录功能)
直接在Firebase Auth UI初始化时禁用Smart Lock功能,即可完全避免该异常抛出:
// 登录意图构建时新增禁用Smart Lock配置 startActivityForResult( AuthUI.getInstance() .createSignInIntentBuilder() .setAvailableProviders(yourProviderList) // 新增此行关闭Smart Lock .setIsSmartLockEnabled(false) .build(), RC_SIGN_IN );
兼容保留Smart Lock的优化方案
如果需要保留Smart Lock自动填充密码的能力,可做动态兼容处理:
- 先判断当前设备环境是否支持Smart Lock,仅符合条件时开启功能:
boolean enableSmartLock = GoogleApiAvailability.getInstance() .isGooglePlayServicesAvailable(context) == ConnectionResult.SUCCESS && GoogleSignIn.getLastSignedInAccount(context) != null; AuthUI.getInstance() .createSignInIntentBuilder() .setAvailableProviders(yourProviderList) .setIsSmartLockEnabled(enableSmartLock) .build();
- 升级
firebase-ui-auth到7.2.0及以上稳定版,官方已在该版本后新增了该异常的自动捕获降级逻辑,错误发生时会直接跳过凭证存储步骤,不会阻断用户正常登录。
根因排查步骤
- 对比最近上线的版本依赖变更,确认是否升级过
com.firebaseui:firebase-ui-auth、com.google.android.gms:play-services-auth相关组件,回滚到之前稳定运行的版本可快速验证是否为依赖变更导致 - 测试复现时检查设备Google账号状态:确认是否登录了正常可用的Google账号,Google Play服务是否为最新版本,相关权限是否被禁用
内容的提问来源于stack exchange,提问作者Preeti
相关产品推荐
相关产品推荐

