7

Je développe l'application où j'essaie de me connecter en utilisant Google. Mais getExtrasdata renvoie toujours null.Android Google Auth S'identifier handleSignInResult: false

Voici ce que j'ai du journal:

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

Tout devrait être ok dans Developer Console.

Pourriez-vous m'aider s'il vous plaît à résoudre ce problème?

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

Quelle version de PlayServices utilisez-vous? Nous utilisons 8.3 et avons le même problème. –

+2

même problème avec 8.4 ... avez-vous trouvé une solution? – Jokus

+0

Vérifiez la configuration de l'ID du client OAuth pour votre projet? http://android-developers.blogspot.com/2016/03/registering-oauth-clients-for-google.html –

Répondre

2

L'empreinte SHA1 du magasin de clés est corrompue. Vous avez changé ~/.android /?, Ont réinstallé studio android ?, vous devez régénérer la clé SHA1. Supprimez l'API actuelle de https://console.developers.google.com/apis/credentials et créez une nouvelle clé avec SHA1 du nouveau magasin de clés de débogage dans ~/.android/debug.keystore (le mot de passe par défaut est vide).

Regardez ceci: https://www.numetriclabz.com/android-google-integration-and-login-tutorial/

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

Coller SHA1 dans la nouvelle api clé pour les instances de débogage. Rappelez-vous: vous avez besoin d'autres empreintes digitales du fichier de clés de production.

2

Le problème vient peut-être du fait que vous n'exécutez pas la version signée de votre application.
Comme Sudhanshu Gaur l'a souligné dans this post, essayez d'abord de générer un apk signé en utilisant la même clé que vous avez utilisée pour create your json configuration file. Ensuite, installez-le sur votre appareil et voir si cela fonctionne. La raison en est que Android Studio ne signe pas votre apk lorsque vous cliquez sur "Exécuter".
J'étais coincé sur exactement le même problème et cette solution a bien fonctionné pour moi.