programing

Android 앱에서 Google Firebase 로그아웃 및 사용자 잊기

testmans 2023. 6. 24. 08:49
반응형

Android 앱에서 Google Firebase 로그아웃 및 사용자 잊기

가 내가전때를 부를 때.mFirebaseAuth.signOut()또는mFirebaseUser.delete()나의FirebaseAuth.AuthStateListener()하고 올르게복귀니합다고하작동바다니복을 반환합니다.null~하듯이FirebaseUseronAuthStateChangedUI를 새로 고치고 "Google로 로그인" 버튼을 표시합니다.

그러나 다시 로그인하고 싶을 때 사용자와의 대화상자가 나타나지 않습니다(장치에 2명의 사용자가 있고 이미지를 첨부합니다).앱은 처음 로그인한 후 동일한 사용자를 사용할 때만 이 대화 상자를 표시합니다.설정 화면에서 앱의 데이터를 지우면 이 대화 상자를 다시 볼 수 있습니다.

제 질문은 로그아웃할 때마다 이 대화 상자를 어떻게 표시할 것인가 하는 것입니다.

enter image description here

로그인 버튼을 누를 때 이 코드를 실행합니다.

// 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()는 의예를들봅니다어▁of▁instance의 예를 봅니다.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);
                }
            });
}

다른 옵션은 Firebase를 사용하는 것입니다.UI 라이브러리.로그인로그아웃 작업을 간소화하여 모든 부담을 덜어줍니다.

코틀린

AuthUI.getInstance().signOut(this).addOnCompleteListener { 
    // do something here 
}

자바

AuthUI.getInstance()
      .signOut(ActivityMainOld.this)
      .addOnCompleteListener(new OnCompleteListener<Void>(){

          @Override
          public void onComplete(@NonNull Task<Void> task) {

              // do something here

          }
      });

이것이 도움이 되길 바랍니다.

모든 솔루션에 대한 참조가 필요했기 때문에 혼란스러웠습니다.GoogleSignInClient그러나 실제로는 참조를 보유할 필요가 없습니다. 새 인스턴스를 만들고 호출할 수 있습니다.signOut()그 위에

GoogleSignIn.getClient(
    getContext(), 
    new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN).build()
).signOut();

(구글 계정 옵션을 다시 받는 것과 같은) 다른 활동에 대한 결과를 원하는 다른 사용자를 위한 것입니다.

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);
                }
            });
}

위의 어떤 것도 저를 위해문제를 해결하지 못했습니다.

  1. 에는 ▁to▁access다▁accepted▁requires에 접속이 필요합니다.mGoogleApiClient로그인 보기에 정의됨(로그인 로그아웃 버튼이 설정 보기에 있음

  2. 로그인 보기(로그인 성공 후 기본 보기로 시작하기 직전)에서 로그아웃할 것을 제안하는 다른 답변이 있었습니다.이것은 다음을 다루고 있었습니다.mGoogleApiClient접근성 문제입니다. 하지만 이 접근 방식의 문제는 사용자가 앱을 열 때마다 로그인 보기가 되고 이상적이지 않은 경우에는 매번 로그인해야 한다는 것입니다.

그래서 제가 하게 된 것은 이것이고 이것은 모든 타사 로그아웃 옵션(Facebook 및 Google의 경우)을 지원하는 일종의 만능 수정입니다.

    logOutButton.setOnSingleClickListener {
            FirebaseAuth.getInstance().currentUser?.getIdToken(false)?.addOnSuccessListener {
                    result ->
                when (result.signInProvider){
                    "facebook.com" -> {
                        LoginManager.getInstance().logOut()
                        signOutFromApp()
                    }
                    "google.com" -> {
                        GoogleSignIn.getClient(
                            this,
                            GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN).build()
                        ).signOut()
                        signOutFromApp()
                    }
                    else -> {
                        signOutFromApp()
                    }
                }
            }
        }

   private fun signOutFromApp() {
        FirebaseAuth.getInstance().signOut()
        LauncherActivity.start(this) //starts login view
        finish() //finish settigs view 
    }
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();
            }
        });
}

이 코드는 복사 과거로 작동하기 위해 작성되었습니다. 코드에서 의견을 읽어서 필요에 맞게 커스터마이즈했습니다. 사용자를 로그인으로 보내는 것을 선호합니다.

했다mGoogleSignInClient.signOut()이것은 예상대로 작동하고 있습니다.

Google Auth Provider에 대한 사용자 지정 매개 변수를 설정하여 사용자가 Google을 통해 재인증하도록 할 수 있습니다.

var provider = new Firebase.auth.GoogleAuthProvider();
      provider.setCustomParameters({
        prompt: 'select_account'
      });

Firebase Auth 및 Google SignIn Client의 동일한 인스턴스를 사용합니다.
예를 들어 LoginActivity에서 mAuth라는 Firebase Auth를 선언하고 인스턴스화한 경우,
그러면 다른 작업에서 새 mAuth를 선언하고 mAuth.login을 호출하려고 하면 제대로 작동하지 않습니다.
Firebase Auth 및 Google SignInClient 변수를 공개 및 정적으로 만들고 다른 작업에서 동일하게 사용합니다.

펄럭이는 용도로,

await GoogleSignIn().signOut();
await _auth.signOut();

언급URL : https://stackoverflow.com/questions/38707133/google-firebase-sign-out-and-forget-user-in-android-app

반응형