【发布时间】:2019-08-09 06:35:31
【问题描述】:
我正在尝试使用 Google 实施 Firebase 身份验证。在登录按钮上单击我在调用onActivityResult() 时得到AuthCredential 详细信息:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == RC_SIGN_IN) {
Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
try {
GoogleSignInAccount account = task.getResult(ApiException.class);
if (account != null) {
String tokenId = account.getIdToken();
AuthCredential credential = GoogleAuthProvider.getCredential(tokenId, null);
initViewModel(credential);
}
} catch (ApiException e) {}
}
}
这就是我初始化ViewModel的方式:
private void initViewModel(AuthCredential credential) {
viewModel = ViewModelProviders.of(this, factory).get(SignInViewModel.class);
viewModel.signInWithGoogle(credential).observe(this, task -> {
if (task.isSuccessful()) {
FirebaseUser user = auth.getCurrentUser();
if (user != null) {
createUser(user);
} else {
Log.d(TAG, "user = null");
}
}
});
}
创建用户后,我将被重定向到第二个活动。到目前为止,一切正常。在第二个活动中退出时出现问题,我被重定向到SignInActivity,其中由于某种原因initSignInViewModel 被调用两次,一次是在打印出user = null 时无缘无故,第二次是当我按下登录时按钮。
如何阻止这种情况发生?我只想在按下按钮时触发。谢谢。
编辑:
在我退出的活动中,我使用以下代码。首先我实现FirebaseAuth.AuthStateListener 接口并覆盖这个方法:
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
FirebaseUser firebaseUser = firebaseAuth.getCurrentUser();
if (firebaseUser == null) {
Intent intent = new Intent(MainActivity.this, SignInActivity.class);
startActivity(intent);
}
}
这是我按下按钮时调用的退出代码:
FirebaseAuth.getInstance().signOut();
if (googleApiClient.isConnected()) {
Auth.GoogleSignInApi.signOut(googleApiClient);
}
【问题讨论】:
-
分享整个活动java代码
-
退出后重定向到
SignInActivity的代码在哪里? -
@ZohaibAmir 请查看我编辑的问题。
-
@Omi 请查看我编辑的问题。
-
另外,注销后,您是如何离开的?确保在 authState 侦听器中导航。如果用户为空,则不需要 auth.signOut()
标签: android firebase firebase-authentication android-livedata