Ja, Google ID-Tokens werden für eine Stunde Gültigkeit ausgestellt und laufen ab, Sie können einfach silentSignIn in Ihrer App verwenden, um eine neue ohne Benutzerinteraktion zu erhalten. Wenn Ihr vorhandenes Token noch nicht abgelaufen ist, erhalten Sie die (zwischengespeicherte) Version zurück (OptionalPendingResult
zurückgegeben hat isDone() == true
); Wenn es bereits abgelaufen ist, erhalten Sie eine aktualisierte (aber es wird ein wenig länger dauern und somit OptionalPendingResult isDone()
wird false
sein).
Hier ist sample code (UI-Thread finden Sie unter etwa einem Arbeitsthread beachten):
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(getString(R.string.server_client_id))
mGoogleApiClient = new GoogleApiClient.Builder(this)
.enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */)
.addApi(Auth.GOOGLE_SIGN_IN_API, gso)
.build();
...
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");
GoogleSignInResult result = opr.get();
handleSignInResult(result); // result.getSignInAccount().getIdToken(), etc.
} 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.
opr.setResultCallback(new ResultCallback<GoogleSignInResult>() {
@Override
public void onResult(GoogleSignInResult googleSignInResult) {
handleSignInResult(googleSignInResult); // result.getSignInAccount().getIdToken(), etc.
}
});
}
Beachten Sie, ob Sie silentSignIn
auf einem UI-Thread oder Worker-Thread aufrufen. Wenn Sie es auf Worker-Thread aufrufen, schauen Sie sich diesen Beitrag mit blockingConnect()
+ await()
an, der den Code sehr vereinfacht: Silent sign in to retrieve token with GoogleApiClient