La mia app Android utilizza attualmente GoogleAuthUtil per accedere agli utenti e scaricare uno access_token
che viene passato al back-end (frammenti di codice al di sotto dei quali viene visualizzato GoogleApiClient e GoogleAuthUtil per ottenere il token).Accesso Google ottiene token di accesso con nuove GoogleSignInOptions
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(Plus.API)
.addScope(new Scope("profile"))
.build();
...
...
String accessToken = GoogleAuthUtil.getToken(GoogleLoginActivity.this,
Plus.AccountApi.getAccountName(mGoogleApiClient),
"oauth2:profile email");
che ho poi inviato al backend
Ora sto provando a passare al nuovo Google SignIn - https://developers.google.com/identity/sign-in/android/sign-in
e così cambiato la creazione GoogleApiClient come,
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestEmail()
.requestIdToken("<web client id>")
.build();
mGoogleApiClient = new GoogleApiClient.Builder(this)
.enableAutoManage(this, this)
.addApi(Auth.GOOGLE_SIGN_IN_API, gso)
.build();
e quindi per utilizzare il login,
startActivityForResult(Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient), RC_GET_TOKEN);
e sull'uso risultato di attività (simile all'esempio nel link qui sotto),
OptionalPendingResult<GoogleSignInResult> opr = Auth.GoogleSignInApi.silentSignIn(mGoogleApiClient);
if (opr.isDone()) {
// If the user's cached credentials are valid, the OptionalPendingResult will be "done"
// and the GoogleSignInResult will be available instantly.
Log.d(TAG, "Got cached sign-in");
handleSignInResult(opr.get());
} else {
// If the user has not previously signed in on this device or the sign-in has expired,
// this asynchronous branch will attempt to sign in the user silently. Cross-device
// single sign-on will occur in this branch.
showProgress();
opr.setResultCallback(new ResultCallback<GoogleSignInResult>() {
@Override
public void onResult(GoogleSignInResult googleSignInResult) {
hideProgress();
handleSignInResult(googleSignInResult);
}
});
}
ma ora sembra che in handleSingInResult(GoogleSignInResult result)
posso solo ottenere un id token
indietro con result.getSignInAccount().getIdToken();
C'è qualcuno sapere se è possibile ottenere un token di accesso da questo (come in precedenza) e se sì, come? Qualsiasi aiuto apprezzato.
Sto riscontrando lo stesso problema qui, sei riuscito a risolvere questo problema? –
Non proprio. Ho dovuto implementare la gestione dei token ID nel back-end prima che potessi iniziare a usarlo. – Bootstrapper
Ho finito per utilizzare il selettore di account di Android per ottenere il nome dell'account e GoogleAuthUtil.getToken (Context, accoutName, scope) per recuperare il token stesso, ha funzionato come un fascino e molto più semplice della prima approuch. –