2016-06-15 68 views
0

对不起,我的英语不好。FireBase Auth结合多个认证系统

我想这2种方法

private void firebaseAuthWithGoogle(GoogleSignInAccount acct) { 
    Log.d(TAG, "firebaseAuthWithGoogle:" + acct.getId()); 
    AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null); 
    mAuth.signInWithCredential(credential) 
      .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { 
       @Override 
       public void onComplete(@NonNull Task<AuthResult> task) { 
        Log.d(TAG, "signInWithCredential:onComplete:" + task.isSuccessful()); 

        // If sign in fails, display a message to the user. If sign in succeeds 
        // the auth state listener will be notified and logic to handle the 
        // signed in user can be handled in the listener. 
        if (!task.isSuccessful()) { 
         Log.w(TAG, "signInWithCredential", task.getException()); 
         Toast.makeText(MainActivity.this, "Authentication failed.", Toast.LENGTH_SHORT).show(); 
        } 
       } 
      }); 
} 

private void firebaseAuthWithFacebook(AccessToken token) { 
    Log.d(TAG, "handleFacebookAccessToken:" + token); 
    AuthCredential credential = FacebookAuthProvider.getCredential(token.getToken()); 
    mAuth.signInWithCredential(credential) 
      .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { 
       @Override 
       public void onComplete(@NonNull Task<AuthResult> task) { 
        Log.d(TAG, "signInWithCredential:onComplete:" + task.isSuccessful()); 
        // If sign in fails, display a message to the user. If sign in succeeds 
        // the auth state listener will be notified and logic to handle the 
        // signed in user can be handled in the listener. 
        if (!task.isSuccessful()) { 
         Log.w(TAG, "signInWithCredential", task.getException()); 
         Toast.makeText(MainActivity.this, "Authentication failed.", 
           Toast.LENGTH_SHORT).show(); 
        } 

        // ... 
       } 
      }); 
} 

只有这条线的变化 AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null); FacebookAuthProvider.getCredential(token.getToken());

我借此从火力地堡文档结合起来。

我是新的Android的Programmation(我是小C#游戏开发),所以不要责怪我。

而且我不enderstind这个:https://firebase.google.com/docs/auth/android/account-linking#link-auth-provider-credentials-to-a-user-account

请我能有帮助?

提前致谢。

回答

0

您可以在一个方法中添加参数acct和令牌,并检查它们是否为null这样的private void firebaseAuth(GoogleSignInAccount acct,AccessToken token)。如果acct为null,那么用户应该使用Facebook登录鉴于您检查到请求代码是一个你当你签署提供在OnActivityResult(int requestCode, int resultCode, Intent data)使用谷歌和你Auth.GoogleSignInApi.getSignInResultFromIntent(data)得到的结果是result.isSuccess() .Same对于Facebook,你从FacebookCallback<LoginResult>()onSuccess()方法传递的accessToken,所以你可能会做一些这样的事:

CallbackManager mCallbackManager = CallbackManager.Factory.create(); 
     LoginManager.getInstance().registerCallback(mCallbackManager, 
       new FacebookCallback<LoginResult>() { 
      @Override 
      public void onSuccess(LoginResult loginResult) { 
       Log.d(TAG, "facebook:onSuccess:" + loginResult); 

       firebaseAuth(null,loginResult.getAccessToken); 
       //null here is the google account as you sign in using facebook    
      } 

      @Override 
      public void onCancel() { 
       //Something to do with user cancel login 
      } 

      @Override 
      public void onError(FacebookException error) { 
       //Something to do with FacebookException 
      } 
     }); 

以及Google登录:

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     // Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...); 
     if (requestCode == GOOGLE_SIGN_IN) { 

     /* request code you pass to 
     * startActivityForResult(intent, GOOGLE_SIGN_IN) 
     * where intent is what you get from intent = 
     * Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient) 
     */ 

     GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);  

      if (result.isSuccess()) { 
       // Google Sign In was successful, authenticate with Firebase 
       GoogleSignInAccount account = result.getSignInAccount(); 
       firebaseAuth(account,null); 
       /* null here is the facebook token 
       * as you sign in using Google 
       */ 

      } else if(result.getStatus().isInterrupted()){ 
       // Google Sign In failed, update UI appropriately 
      } 

     } 
}