2016-08-29 6 views
1

In meiner Anwendung habe ich die GoogleSignInApi umgesetzt, mit diesem Code:Android | SignIn Google Api manchmal nicht funktioniert

in onCreate:

 GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) 
       .requestIdToken(getString(R.string.server_client_id)) 
       .requestEmail() 
       .build(); 
     mGoogleApiClient = new GoogleApiClient.Builder(this) 
       .enableAutoManage(this /* FragmentActivity */, null /* OnConnectionFailedListener */) 
       .addApi(Auth.GOOGLE_SIGN_IN_API, gso) 
       .build(); 

in einer AsyncTask

 if (mGoogleApiClient != null) 
      mGoogleApiClient.connect(); 
     if (mGoogleApiClient != null) { 
      ConnectionResult result = mGoogleApiClient.blockingConnect(); 
      if(result.isSuccess()){ 
       GoogleSignInResult googleSignInResult = Auth.GoogleSignInApi.silentSignIn(mGoogleApiClient).await(); 
       GoogleSignInAccount account = googleSignInResult.getSignInAccount(); 
       authToken = account.getIdToken(); 
      }else { 
       return null; 
      } 
     }else{ 
      return null; 
     } 

Die App Absturz bei "Versuch, virtuelle Methode aufzurufen" java.lang.String com.google.android.gms.auth.api.signin.GoogleSignInAccount.getIdToken() 'für eine Nullobjekt-Referenz "(Konto ist null!)
Jetzt I bin ad ded if (account! = null) {Fehler erhalten}, aber warum könnte account null sein, wenn "result.isSuccess()"?

Antwort

4

result ist nur die Variable, die das Ergebnis enthält, das mit der API verbindet. Dies beinhaltet noch keine Authentifizierung. Nur wenn Sie verbunden sind, können Sie sich anmelden. Die Anmeldeinformationen können jedoch falsch sein, sodass Sie ein null Ergebnis erhalten.

+0

Okay, danke ... Aber der Benutzer sagt mir, dass er authentifiziert ist und die App abstürzt 'bei account.getIdToken()'. Mit meinem Gerät oder Emulator habe ich dieses Problem nicht. Ich habe keine Ahnung, was ich tun soll. –

3
You can use the following code for Google login: 

    protected void onActivityResult(int requestCode, int responseCode, Intent intent) { 
      if (requestCode == RC_SIGN_IN) { 
        GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(intent); 
        if (result.isSuccess()) { 
        GoogleSignInAccount acct = result.getSignInAccount(); 
        } 
      } 
     } 

GoogleSignInAccount gibt Ihnen alle Kontodetails.

+0

Ich mache das erste Mal, um Zugriff auf Benutzer anzufordern. Dann benutze ich 'Auth.GoogleSignInApi.silentSignIn (mGoogleApiClient) .await()', um den IdToken zu erhalten und funktioniert manchmal nicht. –

+2

So zum ersten Mal find IdToken Formular googleSignInAccount .getIdToken(); und speichern Sie es irgendwo. –

+0

Mh ... Und das Token ist immer gültig? –

Verwandte Themen