2016-03-25 8 views
3

Ich habe eine App mit 3 Aktivitäten: eine Login-Aktivität, eine Hauptaktivität und eine Detailaktivität.Google Anmelden Flow mit mehreren Aktivitäten

Die Login-Aktivität verwendet Google Login, um das Konto des Benutzers (die Token-ID und die E-Mail) abzurufen. Sowohl Hauptaktivität als auch Detailaktivität benötigen GoogleSignInAccount.

Ich möchte die App nicht immer mit Login-Aktivität starten und transparent neu anmelden, wenn der Benutzer die App starten.

Ich möchte nicht die Token-ID und die Benutzer-E-Mail auf gemeinsame Einstellungen speichern, würde ich lieber direkt eine GoogleSignInAccount überall in meiner App manipulieren.

Was ist der richtige Ablauf, um dieses Szenario zu verarbeiten? Sollte ich versuchen, eine silentSignIn in jedem Bildschirm zu tun oder gibt es eine bessere Möglichkeit zum Speichern und Abrufen der GoogleSignInAccount?

Antwort

2

Ja, Sie können silentSignIn für diesen Zweck verwenden.

Wenn Sie die GoogleSignInAccount auf UI-Thread suchen, unten ist die asynchrone Version:

Auth.GoogleSignInApi.silentSignIn(mGoogleApiClient).setResultCallback(
     new ResultCallback<GoogleSignInResult>() { 
      @Override 
      public void onResult(@NonNull GoogleSignInResult result) { 
       if (googleSignInResult.isSuccess() { 
        GoogleSignInAccount gsa = googleSignInResult.getSignInAccount();  
       } 

      } 
     }); 

Hinweis: Wenn Ihr mGoogleApiClient nicht mit enableAutoManage gebaut ist, können Sie manuell mGoogleApiClient.connect aufrufen müssen() und mGoogleApiClient .disconnect(), damit das obige Codebeispiel funktioniert. Weitere Details finden Sie unter managing the GoogleApiClient connection lifecycle.

oder auf einem nicht-UI-Thread, können Sie folgenden Beispielcode verwenden:

try { 
    ConnectionResult result = mGoogleApiClient.blockingConnect(); 
    if (result.isSuccess()) { 
     GoogleSignInResult googleSignInResult =  
       Auth.GoogleSignInApi.silentSignIn(googleApiClient).await(); 
     if (googleSignInResult.isSuccess() { 
      GoogleSignInAccount gsa = googleSignInResult.getSignInAccount(); 
     } 
    } 
} finally { 
    mGoogleApiClient.disconnect(); 
} 

Schauen Sie sich die documentation, um weitere Informationen, die Google-Konto-ID-Token für Back-End-Auth oder API-Aufrufe, einschließlich der Verwendung.

1

Sie können GoogleSignInAccount als zusätzliche Eingabe passieren auch Intent:

GoogleSignInAccount acct = result.getSignInAccount(); 
Intent intent = new Intent(this, AnotherActivity.class); 
intent.putExtra("singedInAccount", acct); 
startActivity(intent); 

und es in onCreate receive() Aktivität Methode ist eine andere als solche:

getIntent().getParcelableExtra("singedInAccount"); 

Beachten Sie, dass Sie zu haben Verwenden Sie getParcelableExtra() anstelle von getSerializableExtra() bis GoogleSignInAccount implementiert Parcelable und nicht serialisierbare Schnittstelle.

Verwandte Themen