Вход в Facebook с помощью Firebase для Android не отображает всплывающее окно с параметрами для входа с другой учетной записью - PullRequest
1 голос
/ 09 мая 2020

Я работаю над приложением Android, которое требует входа в систему через Google или Facebook через Firebase. Я понял, что опция выбора учетной записи работает в первый раз после установки, то есть диалоговое окно с запросом выбора учетной записи не появляется после первого входа в систему. В следующий раз, когда вы нажмете кнопку входа в систему, он войдет в систему с вашими предыдущими учетными данными FB / Google. Это GoogleSignInClient.

Это менеджер входа в Facebook (не уверен, что это действительно так, но да, вы поняли).

Эти диалоги windows для входа в систему с использованием соответствующих доменов появляются только в первый раз после установки приложения. Я нашел решение для клиента входа в систему Google (выход из клиента каждый раз, когда приложение открывается с использованием googleSignInClient.signOut () , но я до сих пор не нашел аналогичного решения для диспетчера входа в Facebook.

Вот мой код: LoginActivity.class

    @Override
    protected void onStart(){
        super.onStart();
        firebaseAuth.addAuthStateListener(authStateListener);
        // FirebaseUser currentUser = firebaseAuth.getCurrentUser();
    }

    @Override
    protected void onStop(){
        super.onStop();
        if (authStateListener != null){
            firebaseAuth.removeAuthStateListener(authStateListener);
        }
    }

signInFBBtn.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
            @Override
            public void onSuccess(LoginResult loginResult) {
                handleFacebookToken(loginResult.getAccessToken());
            }

            @Override
            public void onCancel() {
                Toast.makeText(LoginActivity.this, "Cancelled login. (Facebook)", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onError(FacebookException error) {
                Toast.makeText(LoginActivity.this, "Failed to connect to Facebook. Try again.", Toast.LENGTH_SHORT).show();
            }
        });


        authStateListener = new FirebaseAuth.AuthStateListener() {
            @Override
            public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
                FirebaseUser user = firebaseAuth.getCurrentUser();
                if (user != null){
                    updateUI(user);
                }
                else{
                    updateUI(null);
                }
            }
        };

        accessTokenTracker = new AccessTokenTracker() {
            @Override
            protected void onCurrentAccessTokenChanged(AccessToken oldAccessToken, AccessToken currentAccessToken) {
                if(currentAccessToken == null){
                    firebaseAuth.signOut();
                }
            }
        };
    }
@Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        callbackManager.onActivityResult(requestCode, resultCode, data);
        super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == RC_SIGN_IN){
        Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
        if (task.isSuccessful()){
            handleSignInResult(task);
        }
        else{
            Toast.makeText(LoginActivity.this, "Cancelled Google Login.", Toast.LENGTH_SHORT).show();
            return;
        }
        // Toast.makeText(LoginActivity.this, "Entered onActivityResult's if block.", Toast.LENGTH_SHORT).show();
    }
    }

private void handleFacebookToken(AccessToken token){
        AuthCredential credential = FacebookAuthProvider.getCredential(token.getToken());
        firebaseAuth.signInWithCredential(credential).addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
            @Override
            public void onComplete(@NonNull Task<AuthResult> task) {
                if (task.isSuccessful()){
                    FirebaseUser user = firebaseAuth.getCurrentUser();
                    Toast.makeText(LoginActivity.this, "Signed In. (Facebook)", Toast.LENGTH_SHORT).show();
                    updateUI(user);
                }
                else{
                    Toast.makeText(LoginActivity.this, "Couldn't connect to Facebook. Try Again.", Toast.LENGTH_SHORT).show();
                    return;
                }
            }
        });
    }

Я буду признателен за помощь на фронте Facebook.

PS:

  1. Я добавил код, относящийся только к части FB; я пропустил общие c Android вещи.
  2. Пожалуйста, не обращайте внимания на отступы, это мой первый вопрос по StackOverflow и я не хотел брать тайм-аут на разметку: P
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...