2016-06-15 5 views
0

私の悪い英語を申し訳ありません。FireBase Auth複数の認証システムを組み合わせる

私はFireBaseドキュメントからこれを取るこれらの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

あなたはこのprivate void firebaseAuth(GoogleSignInAccount acct,AccessToken token) .IFのACCTがnullであるように、ユーザーはあなたがリクエストコードであることを確認していることを考えるとFacebookのを使用してサインインする必要があり、両方のパラメータACCTを追加し、1つの方法でトークンとそれらのそれぞれがnullであるかどうかを確認することができます

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 
      } 
     }); 
:あなたは OnActivityResult(int requestCode, int resultCode, Intent data)は、Googleを使用してサインインしたときに提供し、あなたが Auth.GoogleSignInApi.getSignInResultFromIntent(data)から得た結果は、あなたが FacebookCallback<LoginResult>()onSuccess()方法からAccessTokenを渡すようにあなたは、このようないくつかのことを行うことがFacebookのための result.isSuccess() .Sameである1

、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 
      } 

     } 
} 
関連する問題