2017-08-16 238 views
0

我試圖做一個身份驗證與facebook上的firebase。我已經設置了Facebook SDK,我可以完美地登錄Facebook。失敗firebase身份驗證facebook

但我無法獲取Firebase身份驗證工作。該應用程序在方法onComplete(Task <AuthResult> task)上有TOAST,如果在該過程中出現問題,它將顯示出來。我收到了這個TOAST錯誤,但找不到問題出在哪裏。我已經在Firebase文檔中設置了所有內容。

public class LoginActivity extends AppCompatActivity { 
    private LoginButton loginButton; 
    private CallbackManager callbackManager; 

    private FirebaseAuth firebaseAuth; 
    private FirebaseAuth.AuthStateListener firebaseAuthListener; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_login); 

     firebaseAuth = FirebaseAuth.getInstance(); 

     callbackManager = CallbackManager.Factory.create(); 
     loginButton = (LoginButton) findViewById(R.id.loginButton); 
     loginButton.setReadPermissions("email","public_profile"); 
     loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() { 
      @Override 
      public void onSuccess(LoginResult loginResult) { 
       handleFacebookAccessToken(loginResult.getAccessToken()); 
      } 

      @Override 
      public void onCancel() { 
       Toast.makeText(getApplicationContext(),"Error al iniciar sesión",Toast.LENGTH_LONG).show(); 

      } 

      @Override 
      public void onError(FacebookException error) { 
       Toast.makeText(getApplicationContext(),"Error al iniciar sesión",Toast.LENGTH_LONG).show(); 
      } 
     }); 

     firebaseAuthListener = new FirebaseAuth.AuthStateListener(){ 

      @Override 
      public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { 
       FirebaseUser user = firebaseAuth.getCurrentUser(); 
       if (user != null) { 
        goMainScreen(); 
       } 
      } 
     }; 
    } 

    private void handleFacebookAccessToken(AccessToken accessToken) { 
     Log.d("","handle"+accessToken.getCurrentAccessToken().getToken()); 
     AuthCredential credential = FacebookAuthProvider.getCredential(accessToken.getCurrentAccessToken().getToken()); 
     firebaseAuth.signInWithCredential(credential).addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { 
      @Override 
      public void onComplete(@NonNull Task<AuthResult> task) { 
       FirebaseUser user = firebaseAuth.getCurrentUser(); 
       if (user != null) { 
        Toast.makeText(getApplicationContext(), "hi", Toast.LENGTH_LONG).show(); 
       }else { 
        Toast.makeText(getApplicationContext(), "error", Toast.LENGTH_LONG).show(); // here is the ERROR. 

       } 
      } 
     }); 

    } 


    private void goMainScreen() { 
     Intent intent = new Intent(this, MainActivity.class); 
     intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK); 
     startActivity(intent); 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     callbackManager.onActivityResult(requestCode, resultCode, data); 
    } 

    @Override 
    protected void onStart() { 
     super.onStart(); 
     firebaseAuth.addAuthStateListener(firebaseAuthListener); 
    } 

    @Override 
    protected void onStop() { 
     super.onStop(); 
     firebaseAuth.removeAuthStateListener(firebaseAuthListener); 
    } 

} 

我已經在firebase上啓用了Facebook身份驗證,並且已經複製了ID和密碼。此外,我已經在Facebook開發者中複製了Firebase網址。

+0

該任務包含可幫助您排除故障的錯誤信息。不要在烤麪包中顯示「錯誤」,而要顯示「任務」。 getException()。toString()'或更好:用'throw task.getException()'拋出異常。 –

+0

@FrankvanPuffelen謝謝!!!這工作!錯誤esa,我有另一個現有的帳戶與Facebook相同的電子郵件...非常感謝坦率 –

回答

0

該任務包含可幫助您排除故障的錯誤信息。而不是在烤麪包片中顯示"error",顯示task.getException().toString()或更好:與throw task.getException()拋出異常。