10

Derzeit arbeite ich an der Anwendung, wo Benutzer mit Google anmelden können. Als Teil des Anmeldevorgangs müssen wir Google ACCESS TOKEN und REFRESH TOKEN an den Server senden.Android: Wie erhalte ich Token für die Google Sign-In-API?

I Zugriffstoken, durch das folgende Verfahren am Abrufen

 mAccountName = googleSignInAccount.getEmail(); 
     String scopes = "oauth2:profile email"; 
     String token = null; 
     try { 
      token = GoogleAuthUtil.getToken(activity.getApplicationContext(), mAccountName, scopes); 
     } catch (IOException e) { 
      Logger.eLog(TAG, e.getMessage()); 
     } 

GoogleAuthUtil Klasse, von der ich Zugriffstoken am Zugriff haben keine Funktion für Aktualisierungs-Token. Wie kann ich auf das Token aktualisieren zugreifen? Danke im Voraus!

Antwort

2

Ich denke, Sie müssen diesen Code in AsyncTask wie unten versuchen.

private class RetrieveTokenTask extends AsyncTask<String, Void, String> { 

    @Override 
    protected String doInBackground(String... params) { 
     String accountName = params[0]; 
     String scopes = "oauth2:profile email"; 
     String token = null; 
     try { 
      token = GoogleAuthUtil.getToken(getApplicationContext(), accountName, scopes); 
     } catch (IOException e) { 
      Log.e(TAG, e.getMessage()); 
     } catch (UserRecoverableAuthException e) { 
      startActivityForResult(e.getIntent(), REQ_SIGN_IN_REQUIRED); 
    //REQ_SIGN_IN_REQUIRED = 55664; 
     } catch (GoogleAuthException e) { 
      Log.e(TAG, e.getMessage()); 
     } 
     return token; 
    } 

    @Override 
    protected void onPostExecute(String s) { 
     super.onPostExecute(s); 
     Log.i("AccessToken",s); 
    } 
} 

rufen Dann AsyncTask wie unter Zugriffstoken zu erhalten:

...  
new RetrieveTokenTask().execute(mAccountName); 

prüfen here. Ich hoffe es hilft dir.

+0

Danke Pranay! Ich suche nach einem Refresh-Token. Ich habe Zugangstoken bereits mit ähnlicher Art der Implementierung bekommen. –

+4

können Sie [diese Ausgabe] (http://stackoverflow.com/questions/26969622/how-to-get-refreshtoken-when-using-googleauthutil) betrachten. Es zeigt an, dass Sie mit 'GoogleAuthUtil.getToken()' kein Refresh-Token bekommen können, aber sobald das Token selbst invalidiert ist, wird es ein neues (das Refresh-Token) zurückgeben. – adjuremods

8

Sie sollten die server auth code flow via Auth.GOOGLE_SIGN_IN_API verwenden: Holen Sie einen Serverauthentifizierungscode auf Android-Client, senden Sie an Ihren Server, tauscht Server den Code für Aktualisieren und Zugriffstoken (mit einem Geheimnis). Es gibt weitere Details in diesem blog post.

Wenn Sie jetzt GoogleAuthUtil.getToken für Zugriffstoken verwenden, sollten Sie dieses Google Sign-In best practice blog post ausprobieren, um zu sehen, wie Sie auf den empfohlenen Datenfluss migrieren können, um Sicherheit und bestes UX zu gewährleisten.

+0

Könnten Sie mich halfen, wenn ich diese Methode verwende? Ich kann dem Benutzer Pop-up nicht zur Verfügung stellen, um acayunt ... zu wählen, wenn Benutzer klickt, um sich anzumelden, LOGIN mit dem gegenwärtigen Gerät accautn auftreten ... Benutzer kann nicht jeden möglichen Gedanken ändern ... Wie kann ich dem Benutzer Pop-up zur Verfügung stellen mit Konten? –

+0

@AlekseyTimoshchenko Wenn Sie: a) einmal ein Konto auf diesem Gerät signiert haben, wird sich die Anmeldesammlung an das Konto für Sie erinnern und dieses Konto bei zukünftigen Anmeldungen automatisch verwenden. B) mehrere Konten auf dem Gerät und nur eines davon haben Sie sind für alle Bereiche autorisiert. Geräteübergreifende Einzelanmeldung wird wirksam und Sie signieren automatisch dieses Konto. Wenn Sie sich gerade in diesem Status befinden, können Sie unter Einstellungen-> Verbundene Apps den Zugriff widerrufen und dann können Sie die Kontoauswahl erneut sehen. –

+0

Hi @IsabellaChen, denken Sie, dass 'GoogleAuthUtil.getToken' für [diese Frage] verwendet werden kann (http://stackoverflow.com/questions/40838154/retrieve-google-access-token-ach-authenticated-using-firebase) -Authentifizierung)? – BNK