2016-08-14 79 views
1

我試圖通過谷歌的火力點使用身份驗證,但面臨的一個問題火力地堡GoogleSignInResult始終返回false

在下面的「GoogleSignInResult結果」的值的代碼始終是假的,我應該怎麼辦?

我在火力控制檯正確配置的項目,加入app目錄JSON文件

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

    // Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...); 
    if (requestCode == RC_SIGN_IN) { 
     GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data); 
     Log.d("FALSE", String.valueOf(result.isSuccess())); 
     if (result.isSuccess()) { 
      // Google Sign In was successful, authenticate with Firebase 
      GoogleSignInAccount account = result.getSignInAccount(); 
      firebaseAuthWithGoogle(account); 
     } else { 
      // Google Sign In failed, update UI appropriately 
      // [START_EXCLUDE] 
      updateUI(null); 
      // [END_EXCLUDE] 
     } 
    } 
} 
+0

您是否已在Firebase控制檯上啓用Google提供商? – MorZa

+0

是的,我也是這樣做的,即使我生成了apk,並試圖這樣做 – Mufad

回答

0

這是一個工作代碼,您可以試試這個:

 GoogleApiClient mGoogleApiClient; 
     private static final int RC_SIGN_IN = 9001;  

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

    GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) 
        .requestIdToken(getString(R.string.default_web_client_id)) 
        .requestEmail() 
        .build(); 

      mGoogleApiClient = new GoogleApiClient.Builder(this) 
        .enableAutoManage(this /* FragmentActivity */, new GoogleApiClient.OnConnectionFailedListener() { 
         @Override 
         public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { 
          Log.d(TAG, "onConnectionFailed:" + connectionResult); 
         } 
        } /* OnConnectionFailedListener */) 
        .addApi(Auth.GOOGLE_SIGN_IN_API, gso) 
        .build(); 

      SignInButton signInButton = (SignInButton) findViewById(R.id.sign_in_button); 


      assert signInButton != null; 
      signInButton.setSize(SignInButton.SIZE_STANDARD); 

      signInButton.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        switch (v.getId()) { 
         case R.id.sign_in_button: 
          signIn(); 
          break; 
        } 
       } 
      }); 

    } 


     private void handleSignInResult(GoogleSignInResult result) { 
      Log.d("Login Google", "handleSignInResult:" + result.isSuccess()); 
      if (result.isSuccess()) { 
       // Signed in successfully, show authenticated UI. 
       GoogleSignInAccount acct = result.getSignInAccount(); 
       firebaseAuthWithGoogle(acct); 

       Toast.makeText(this, "User name: " + acct.getDisplayName(), Toast.LENGTH_SHORT).show(); 

      } else { 
       // Signed out, show unauthenticated UI. 

      } 
     } 


     // Firebase with Google 
     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 (!task.isSuccessful()) { 
           Log.w(TAG, "signInWithCredential", task.getException()); 
           Toast.makeText(LoginActivity.this, "Authentication failed.", 
             Toast.LENGTH_SHORT).show(); 
          } 
         } 
        }); 
     } 


     private void signIn() { 
      Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient); 
      startActivityForResult(signInIntent, RC_SIGN_IN); 
     } 


     @Override 
     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 == RC_SIGN_IN) { 
       GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data); 
       handleSignInResult(result); 
      } 
     } 
+0

Log.d(「Login Google」,「handleSignInResult:」+ result.isSuccess()); 這仍然是錯誤的,你能告訴我還有什麼可能是錯的? – Mufad

+0

當我更改計算機並且SHA1密鑰已更改時,我得到了錯誤結果...嘗試轉到Firebase控制檯上的項目設置,並確保您的SHA1密鑰正確。 – MorZa

+0

我檢查了一下,告訴我一件事,我是否必須爲不同的密鑰庫生成SHA1密鑰,或者默認的密鑰庫會爲所有人生效? – Mufad

0

第1步: 在Firebase項目中,您可以添加SHA1 debug.keystore 或者如果它用於製作,請添加SHA1密鑰存儲區版本

第2步: 在控制檯谷歌開發者添加«ID用戶的OAuth»調試或釋放這取決於第1步

我希望它幫你

0

你必須檢查你的生成SHA1密鑰是相同的OAuth 2.0客戶端ID的簽名證書指紋。兩個密鑰必須相同