7

我正在開發應用程序,嘗試使用Google登錄。但getExtrasdata總是返回null。Android Google Auth登錄handleSignInResult:false

下面是我從日誌中有:

getSignInIntent = { act=com.google.android.gms.auth.GOOGLE_SIGN_IN cmp=com.rbsoftware.pfm.personalfinancemanager/com.google.android.gms.auth.api.signin.internal.SignInHubActivity (has extras) } 

[email protected] 

handleSignInResult:false 

r[email protected]7d8c188 

data=Intent { (has extras) } 

getExtrasdata=Bundle[{googleSignInStatus=Status{statusCode=INTERNAL_ERROR, resolution=null}}] 

一切都應該是開發者控制檯中確定。

你能幫我解決這個問題嗎?

package com.rbsoftware.pfm.personalfinancemanager; 


import android.app.ProgressDialog; 
import android.content.Intent; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.util.Log; 
import android.view.View; 
import android.widget.TextView; 

import com.google.android.gms.auth.api.Auth; 
import com.google.android.gms.auth.api.signin.GoogleSignInAccount; 
import com.google.android.gms.auth.api.signin.GoogleSignInOptions; 
import com.google.android.gms.auth.api.signin.GoogleSignInResult; 
import com.google.android.gms.common.ConnectionResult; 
import com.google.android.gms.common.SignInButton; 
import com.google.android.gms.common.api.GoogleApiClient; 
import com.google.android.gms.common.api.OptionalPendingResult; 
import com.google.android.gms.common.api.ResultCallback; 


public class LoginActivity extends AppCompatActivity implements 
     GoogleApiClient.OnConnectionFailedListener, 
     View.OnClickListener { 
    private static final String TAG = "SignInActivity"; 
    private static final int RC_SIGN_IN = 9001; 

    public GoogleApiClient mGoogleApiClient; 

    private ProgressDialog mProgressDialog; 

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

     // Button listeners 
     findViewById(R.id.sign_in_button).setOnClickListener(this); 


     // [START configure_signin] 
     GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) 
       .requestEmail() 
       .build(); 
     // [END configure_signin] 

     // [START build_client] 
     mGoogleApiClient = new GoogleApiClient.Builder(this) 
       .enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */) 
       .addApi(Auth.GOOGLE_SIGN_IN_API, gso) 
       .build(); 
     // [END build_client] 

     // [Button] 
     SignInButton signInButton = (SignInButton) findViewById(R.id.sign_in_button); 
     signInButton.setSize(SignInButton.SIZE_WIDE); 
     signInButton.setScopes(gso.getScopeArray()); 
    } 

    @Override 
    public void onStart() { 
     super.onStart(); 

     OptionalPendingResult<GoogleSignInResult> opr = Auth.GoogleSignInApi.silentSignIn(mGoogleApiClient); 
     if (opr.isDone()) { 
      Log.d(TAG, "Got cached sign-in"); 
      GoogleSignInResult result = opr.get(); 
      handleSignInResult(result); 
     } else { 

      opr.setResultCallback(new ResultCallback<GoogleSignInResult>() { 
       @Override 
       public void onResult(GoogleSignInResult googleSignInResult) { 

        handleSignInResult(googleSignInResult); 
       } 
      }); 
     } 
    } 

    // [START onActivityResult] 
    @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); 
      handleSignInResult(result); 
     } 
    } 
    // [END onActivityResult] 

    // [START handleSignInResult] 
    private void handleSignInResult(GoogleSignInResult result) { 
     Log.d(TAG, "handleSignInResult:" + result.isSuccess()); 
     if (result.isSuccess()) { 
      // Signed in successfully, show authenticated UI. 
      GoogleSignInAccount acct = result.getSignInAccount(); 
      Intent intent = new Intent(this, MainActivity.class); 
      intent.putExtra("name", acct.getDisplayName()); 
      intent.putExtra("id", acct.getId()); 
      intent.putExtra("email", acct.getEmail()); 
      intent.putExtra("photoURL", acct.getPhotoUrl()); 
      Log.d("USER Pic", acct.getPhotoUrl()+""); 
      startActivity(intent); 
      finish(); 
        } else { 
     } 
    } 
    // [END handleSignInResult] 

    // [START signIn] 
    private void signIn() { 
     Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient); 
     startActivityForResult(signInIntent, RC_SIGN_IN); 
    } 
    // [END signIn] 



    @Override 
    public void onConnectionFailed(ConnectionResult connectionResult) { 

     Log.d(TAG, "onConnectionFailed:" + connectionResult); 
    } 
    @Override 
    public void onClick(View v) { 
     switch (v.getId()) { 
      case R.id.sign_in_button: 
       signIn(); 
       break; 

     } 
    } 

} 
+0

您使用哪個PlayServices版本?我們使用8.3並且有同樣的問題。 –

+2

與8.4相同的問題...您是否找到解決方案? – Jokus

+0

檢查項目的OAuth客戶端ID配置? http://android-developers.blogspot.com/2016/03/registering-oauth-clients-for-google.html –

回答

2

keystore的SHA1指紋已損壞。你已經改變了〜/ .android/?,已經重新安裝了android studio ?,你需要重新生成SHA1密鑰。從https://console.developers.google.com/apis/credentials中刪除當前密鑰api,並在〜/ .android/debug.keystore(默認密碼爲空)中新建一個帶有新調試密鑰存儲區SHA1的密鑰。

看看這個:https://www.numetriclabz.com/android-google-integration-and-login-tutorial/

keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore -list -v 

粘貼到SHA1用於調試的情況下,新的關鍵的API。

請記住:您需要生產密鑰庫的其他指紋。

2

問題可能是因爲您沒有運行應用程序的簽名版本。
由於Sudhanshu Gaur在this post中指出,請嘗試先使用您用於create your json configuration file的相同密鑰生成已簽名的apk。然後將其安裝在您的設備上,看看它是否有效。原因是當您點擊「運行」時,Android Studio不會簽署您的apk。
我被困在完全相同的問題,這種修復對我來說工作得很好。