mFirebaseAuth.signOut()
またはmFirebaseUser.delete()
を呼び出すと、私のFirebaseAuth.AuthStateListener()
は正しく動作し、null
のFirebaseUser
インスタンスとしてonAuthStateChanged
を返します。 UIを更新し、「Googleでサインイン」ボタンを表示します。
しかし、再度ログインする場合、ユーザーとのダイアログは表示されません(デバイスに2人のユーザーがいて、画像が添付されています)。アプリはこのダイアログを最初のサインインでのみ表示し、その後は同じユーザーを使用します。設定画面でアプリのデータを消去すると、このダイアログが再び表示されます。
私の質問は、サインアウトするたびにこのダイアログを表示する方法です。
サインインボタンを押したときにこのコードを実行します。
// in onCreate()
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(getString(R.string.default_web_client_id))
.requestEmail()
.build();
mGoogleApiClient = new GoogleApiClient.Builder(this)
.enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */)
.addApi(Auth.GOOGLE_SIGN_IN_API, gso)
.build();
// in OnClickListener
Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
startActivityForResult(signInIntent, FirebaseActivity.REQUEST_SIGN_IN);
onActivityResult()
でGoogleSignInResult
のインスタンスを取得するため、startActivityForResult()
を呼び出した後に必要なすべてが発生します。
Firebase Auth Quickstartサンプルコード では、Googleプロバイダーのサインアウトにこれらの手順が含まれています。サインアウトするときにGoogleSignInClient.signOut()
を呼び出していますか?
private void signOut() {
// Firebase sign out
mAuth.signOut();
// Google sign out
mGoogleSignInClient.signOut().addOnCompleteListener(this,
new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
updateUI(null);
}
});
}
別のオプションは、 FirebaseUI ライブラリを使用することです。それは、サインインおよびサインアウト操作を簡素化するという意味ですあなたのためにすべての重い持ち上げを行います。
Kotlin
AuthUI.getInstance().signOut(this).addOnCompleteListener {
// do something here
}
Java
AuthUI.getInstance()
.signOut(ActivityMainOld.this)
.addOnCompleteListener(new OnCompleteListener<Void>(){
@Override
public void onComplete(@NonNull Task<Void> task) {
// do something here
}
});
お役に立てれば
別のアクティビティでこの結果が必要な場合(Googleアカウントのオプションを取り戻す場合など)。
_public static void signOut() {
// Firebase sign out
mAuth.signOut();
// Google sign out
Auth.GoogleSignInApi.signOut(mGoogleApiClient);
}
_
これをサインインページに追加し、次のアクティビティに進む前に、SignOut()
を呼び出します。
_// everything ok...
signOut();
startActivity(new Intent(SignIn.this,NextOne.class));
_
そして、あなたの他のクラスで呼び出すことができます
_FirebaseAuth.getInstance().signOut();
startActivity(new Intent(NextClass.this, SignIn.class));
_
簡単で、うまくいきます。乾杯!
次のようなものも定義できます。
private void signOut() {
mAuth.signOut();
mGoogleSignInClient.signOut().addOnCompleteListener(this,
new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
Intent intent = new Intent(YourActivity.this, NextActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
}
});
}
すべてのソリューションにはGoogleSignInClient
への参照が必要なので混乱しましたが、実際に参照を保持する必要はありません。新しいインスタンスを作成してsignOut()
。
GoogleSignIn.getClient(
getContext(),
new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN).build()
).signOut();
private void sendToLogin() { //funtion
GoogleSignInClient mGoogleSignInClient ;
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(getString(R.string.default_web_client_id))
.requestEmail()
.build();
mGoogleSignInClient = GoogleSignIn.getClient(getBaseContext(), gso);
mGoogleSignInClient.signOut().addOnCompleteListener(/*CURRENT CLASS */.this,
new OnCompleteListener<Void>() { //signout Google
@Override
public void onComplete(@NonNull Task<Void> task) {
FirebaseAuth.getInstance().signOut(); //signout firebase
Intent setupIntent = new Intent(getBaseContext(), /*To ur activity calss*/);
Toast.makeText(getBaseContext(), "Logged Out", Toast.LENGTH_LONG).show(); //if u want to show some text
setupIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(setupIntent);
finish();
}
});
}
このコードは、過去のコピーとして機能するように書かれています[〜#〜] comments [〜#〜]コードでそれをカスタマイズしてurのニーズに合わせます。
私はmGoogleSignInClient.signOut()
をしました。これは期待通りに機能しています。
googleAuthProviderのカスタムパラメータを設定して、ユーザーにGoogle経由での再認証を強制することができます。
var provider = new Firebase.auth.GoogleAuthProvider();
provider.setCustomParameters({
Prompt: 'select_account'
});