Я работаю над приложением 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:
- Я добавил код, относящийся только к части FB; я пропустил общие c Android вещи.
- Пожалуйста, не обращайте внимания на отступы, это мой первый вопрос по StackOverflow и я не хотел брать тайм-аут на разметку: P