使用 Firebase 身份验证退出 Google 个帐户
Sign out from Google Account using Firebase Authentication
我有一个应用程序,我在其中使用 Google 帐户使用 Firebase 身份验证登录。
这是登录代码。
List<AuthUI.IdpConfig> providers;
providers= Arrays.asList(
new AuthUI.IdpConfig.EmailBuilder().build(),
new AuthUI.IdpConfig.GoogleBuilder().build()
);
private void showSignInOptions() {
startActivityForResult(
AuthUI.getInstance()
.createSignInIntentBuilder()
.setAvailableProviders(providers)
.build(),MY_REQUEST_CODE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==MY_REQUEST_CODE)
{
IdpResponse response=IdpResponse.fromResultIntent(data);
if(resultCode==RESULT_OK)
{
final FirebaseUser firebaseUser= FirebaseAuth.getInstance().getCurrentUser();
assert firebaseUser != null;
user_information.orderByKey()
.equalTo(firebaseUser.getUid())
.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if(dataSnapshot.getValue()==null)
{
if(!dataSnapshot.child(firebaseUser.getUid()).exists()){
Common.loggedUser=new User(firebaseUser.getUid(),firebaseUser.getEmail());
user_information.child(Common.loggedUser.getUid())
.setValue(Common.loggedUser);
}
}
else {
Common.loggedUser=dataSnapshot.child(firebaseUser.getUid()).getValue(User.class);
}
Paper.book().write(Common.USER_UID_SAVE_KEY,Common.loggedUser.getUid());
updateToken(firebaseUser);
setUpUI();
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}
}
}
代码运行良好,登录后将我发送到 NavigationDrawerActivity。
在导航中,我有一个选项退出。
现在我想做的是,当我点击注销时,它应该让我退出我的 Google 帐户,下次当我登录 activity 时,它应该再次向我显示选项标志在 google 中,当我点击时,它应该询问 select Google 帐户,就像第一次安装应用程序时那样。
我尝试了从 Whosebug 的答案中获得的以下代码,但它不起作用。
它重定向我登录 activity 但没有显示任何选项,我直接登录了。
这是代码,我试过了。
GoogleSignInClient googleSignInClient;
GoogleSignInOptions gso=new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(getString(R.string.default_web_client_id))
.requestEmail()
.build();
googleSignInClient=GoogleSignIn.getClient(getBaseContext(),gso);
googleSignInClient.signOut().addOnCompleteListener(NavigateActivity.this,
new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
FirebaseAuth.getInstance().signOut();
Intent setupintent=new Intent(getBaseContext(),login.class);
setupintent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(setupintent);
finish();
}
});
请指导我如何在退出 google 帐户时再次显示 google 生成器。
当您使用 AuthUI 时,您不需要使用 GoogleSignInClient 退出。您可以直接从 AuthUI 执行此操作,例如:
AuthUI.getInstance()
.signOut(context)
.addOnSuccessListener { // start login activity }
我有一个应用程序,我在其中使用 Google 帐户使用 Firebase 身份验证登录。 这是登录代码。
List<AuthUI.IdpConfig> providers;
providers= Arrays.asList(
new AuthUI.IdpConfig.EmailBuilder().build(),
new AuthUI.IdpConfig.GoogleBuilder().build()
);
private void showSignInOptions() {
startActivityForResult(
AuthUI.getInstance()
.createSignInIntentBuilder()
.setAvailableProviders(providers)
.build(),MY_REQUEST_CODE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==MY_REQUEST_CODE)
{
IdpResponse response=IdpResponse.fromResultIntent(data);
if(resultCode==RESULT_OK)
{
final FirebaseUser firebaseUser= FirebaseAuth.getInstance().getCurrentUser();
assert firebaseUser != null;
user_information.orderByKey()
.equalTo(firebaseUser.getUid())
.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if(dataSnapshot.getValue()==null)
{
if(!dataSnapshot.child(firebaseUser.getUid()).exists()){
Common.loggedUser=new User(firebaseUser.getUid(),firebaseUser.getEmail());
user_information.child(Common.loggedUser.getUid())
.setValue(Common.loggedUser);
}
}
else {
Common.loggedUser=dataSnapshot.child(firebaseUser.getUid()).getValue(User.class);
}
Paper.book().write(Common.USER_UID_SAVE_KEY,Common.loggedUser.getUid());
updateToken(firebaseUser);
setUpUI();
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}
}
}
代码运行良好,登录后将我发送到 NavigationDrawerActivity。 在导航中,我有一个选项退出。 现在我想做的是,当我点击注销时,它应该让我退出我的 Google 帐户,下次当我登录 activity 时,它应该再次向我显示选项标志在 google 中,当我点击时,它应该询问 select Google 帐户,就像第一次安装应用程序时那样。
我尝试了从 Whosebug 的答案中获得的以下代码,但它不起作用。 它重定向我登录 activity 但没有显示任何选项,我直接登录了。
这是代码,我试过了。
GoogleSignInClient googleSignInClient;
GoogleSignInOptions gso=new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(getString(R.string.default_web_client_id))
.requestEmail()
.build();
googleSignInClient=GoogleSignIn.getClient(getBaseContext(),gso);
googleSignInClient.signOut().addOnCompleteListener(NavigateActivity.this,
new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
FirebaseAuth.getInstance().signOut();
Intent setupintent=new Intent(getBaseContext(),login.class);
setupintent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(setupintent);
finish();
}
});
请指导我如何在退出 google 帐户时再次显示 google 生成器。
当您使用 AuthUI 时,您不需要使用 GoogleSignInClient 退出。您可以直接从 AuthUI 执行此操作,例如:
AuthUI.getInstance()
.signOut(context)
.addOnSuccessListener { // start login activity }