facebook sdk로 firebase 인증과 android에서 "user/password"옵션으로 로그인하려고합니다. MainActivity를 시작하기 전에 사용자가 어떤 종류의 인증을 사용했는지 알아야합니다.실행 순서 firebase auth
일 전 코드가 잘 작동하는데 사용되었지만 firebase 프로젝트를 지워야했습니다. 오늘은 firebase/facebook SDK를 구성했으며 작동합니다. 하지만 이제 코드의 실행 순서가 다릅니다 (저는 매우 이상합니다).
전에 onComplete
메서드 (작업이 성공하면 유효성을 검사 할 때)가 먼저 실행 된 다음 onAuthStateChanged
이 실행됩니다. 그러나 먼저 먼저 onAuthStateChanged
메서드가 실행되고 다른 작업이 시작된 다음 작업이 성공하면 유효성이 검사됩니다. 디버그 모드에서 동작을 참조하십시오. 여기
fbLoginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
//Inicio de sesion con facebook exitoso
handleFacebookAccessToken(loginResult.getAccessToken());
}
@Override
public void onCancel() {
//Inicio de sesion con facebook cancelado
Toast.makeText(getApplicationContext(),R.string.cancel_fb_log,Toast.LENGTH_SHORT).show();
}
@Override
public void onError(FacebookException error) {
//Inicio de sesion con facebook erroneo
Toast.makeText(getApplicationContext(),R.string.error_fb_log,Toast.LENGTH_SHORT).show();
}
});
private void handleFacebookAccessToken(AccessToken accessToken) {
relativeLayout.setVisibility(View.GONE);
relativeLayout1.setVisibility(View.VISIBLE);
AuthCredential credential = FacebookAuthProvider.getCredential(accessToken.getToken());
//Iniciar sesión con una credencial
firebaseAuth.signInWithCredential(credential).addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
//metodo que se ejecuta al terminar el proceso
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (!task.isSuccessful()){
//Ocurrio un error al realizar el logueo a firebase con facebook
Utilities.exceptionFirebaseAdministrator(LoginActivity.this, task, LOG_TAG);
LoginManager.getInstance().logOut();
}else{
pref.edit().putBoolean(getString(R.string.pref_logged_with_facebook),true).apply();
pref.edit().putBoolean(getString(R.string.pref_logged_with_firebase),false).apply();
}
relativeLayout.setVisibility(View.VISIBLE);
relativeLayout1.setVisibility(View.GONE);
}
});
}
fireAuthStateListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
FirebaseUser user = firebaseAuth.getCurrentUser();
if(user != null){
//I try use SharedPreference and validate if is facebook login or other
startMainActivity();
}
}
};
@Override
public void onStart() {
super.onStart();
//Cuando la clase empieza a "escuchar"
firebaseAuth.addAuthStateListener(fireAuthStateListener);
}
@Override
public void onStop() {
super.onStop();
//Cuando la clase deja de "escuchar"
firebaseAuth.removeAuthStateListener(fireAuthStateListener);
}
그 다른 형태이며, 덕분에 작동합니다 (어떻게 지금 내가 위쪽 화살표를 클릭하여 피드백을 투표 할 수 있습니다)하지만 실행 시간 순서가 onComplete 이상 나중에 onAuthStateChanged 매우 이상한 것 같습니다. 사용자가 Facebook 또는 이메일/비밀번호 단계를 사용하여 등록하는 경우 onAuthStateChanged 메소드에서 알 수있는 방법이 있습니까? –
예 user.getProviders()를 사용하여 공급자를 확인할 수 있습니다. get (0), 반환 유형이 문자열 인 경우 if (user! = null)에서 사용하십시오. 위의 편집 된 답변을 참조하십시오 –
OK 설탕을 많이 주셔서 감사합니다! –