10

Attualmente sto lavorando all'applicazione in cui l'utente è in grado di accedere con Google. Come parte della procedura di accesso, dobbiamo inviare TOKEN di ACCESSO di Google e TOKEN REFRESH al server.Android: come ottenere il token di aggiornamento dall'API di accesso di Google?

sto Recupero token di accesso con il seguente metodo,

 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()); 
     } 

classe GoogleAuthUtil dal quale io sono l'accesso token di accesso non hanno una funzione per token di aggiornamento. Quindi, come accedere a Token di aggiornamento? Grazie in anticipo!

risposta

2

Penso che sia necessario provare questo codice in AsyncTask come di seguito.

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); 
    } 
} 

Quindi chiamare AsyncTask come qui sotto per ottenere token di accesso:

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

Controllare here. Spero sia di aiuto.

+0

Grazie Pranay! Sto cercando un token di aggiornamento. Ho già ricevuto token di accesso con un tipo simile di implementazione. –

+4

puoi guardare [questo problema] (http://stackoverflow.com/questions/26969622/how-to-get-refreshtoken-when-using-googleauthutil). Indica che non è possibile ottenere un token di aggiornamento utilizzando 'GoogleAuthUtil.getToken()', ma una volta che il token stesso è stato invalidato, ne verrà restituito uno nuovo (il token di aggiornamento) – adjuremods

8

È necessario utilizzare server auth code flow via Auth.GOOGLE_SIGN_IN_API: ottenere un codice di autenticazione del server sul client Android, inviare al server, il server scambia il codice per il token di aggiornamento e accesso (con un segreto). Ci sono più dettagli in questo blog post pure.

Inoltre, se si sta utilizzando GoogleAuthUtil.getToken per accedere al token ora, si desidera controllare questo Google Sign-In best practice blog post per vedere come migrare al flusso consigliato per garantire la sicurezza e la migliore UX.

+0

Potrebbe fermarmi, quando utilizzo questo metodo Non posso fornire al pop-up dell'utente di scegliere Accaunt ... Quando l'utente fa clic su Accedi, si verifica logIn con l'accuter corrente del dispositivo ... L'utente non può cambiare alcun pensiero ... Come posso fornire all'utente pop-up con gli account? –

+0

@AlekseyTimoshchenko Se: a) una volta firmato un account su questo dispositivo, la libreria di accesso ricorderà l'account e utilizzerà automaticamente tale account negli accessi futuri b) avrà più account sul dispositivo e solo uno di li ha autorizzato a tutti gli ambiti, il cross-device-single-sign-on avrà effetto e firmerà automaticamente quell'account in .. Se ti trovi in ​​questo momento, puoi andare su Impostazioni-> App connesse per revocare l'accesso e quindi puoi nuovamente visualizzare il selettore di account. –

+0

Ciao @ IsabellaChen, pensi che 'GoogleAuthUtil.getToken' può essere usato per [questa domanda] (http://stackoverflow.com/questions/40838154/retrieve-google-access-token-after-authenticated-using-firebase -autenticazione)? – BNK