2016-08-14 282 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的签名证书指纹。两个密钥必须相同