Android Firebase 数据库身份验证会在一段时间后失败.如何默默地重新登录



我已经开始集成Firebase数据库,以便将SQLite数据同步到云。

登录使用Google识别,在最近登录后获得数据库连接,并且重新启动应用程序时有一半时间,一切都很好。然而,另一半时间,在打电话时,

mAuth.signInWithCredential(credential)

登录失败,错误中的堆栈跟踪提供以下异常跟踪:

com.google.firebase.FirebaseException:发生了内部错误。[ IdP 响应中的id_token无效:...,错误:Id_token验证失败。

如果我注销并重新登录,那么一切将再次正常工作。但是,我想避免强制用户注销并重新登录。看来应该能够得到一个焕然一新的id_token。

正确的方法是什么?

我不使用谷歌登录,我用Facebook代替。对于Facebook,当应用程序重新启动时,它会自动注销,但FirebaseAuth仍处于登录状态。因此,我认为您无需再次致电mAuth.signInWithCredential(credential)mAuth.getCurrentUser()将为您提供登录用户。您收到该错误的原因可能是因为除非您再次完成谷歌登录过程,否则谷歌凭据可能为空。

我发现了如何正确做到这一点。有一个谷歌静默登录。我的代码现在如下所示:

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(getString(R.string.default_web_client_id))
.requestEmail()
.build();
GoogleSignInClient googleSignInClient = GoogleSignIn.getClient(this, gso);
Task<GoogleSignInAccount> pendingResult =
    googleSignInClient.silentSignIn();
pendingResult.addOnCompleteListener((Activity)this,(OnCompleteListener<GoogleSignInAccount>)new GoogleSignInResultCallback());

GoogleSignInResultCallBack 处理在检测到故障时为用户提供登录服务。使用此代码,我还没有遇到再次登录的需要。

最新更新