В моем приложении для Android я использую Войти через Google с клиентом Google Api.
Я получаю IDToken и использую его с веб-сервисом моего сервера. Моя проблема в том, что этот IDToken истек, и я не могу получить другой. Когда я делаю новый googleSignInClient.silentSignIn (), IDToken остается тем же.
Как я могу получить новый IDToken?
Я делаю следующие шаги:
1.- В логинеАктивность:
GoogleSignInOptions gso = new
GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(getString(R.string.server_client_id))
.requestEmail()
.build();
googleSignInClient = GoogleSignIn.getClient(this, gso);
googleSignInClient.silentSignIn()
.addOnCompleteListener(this, new
OnCompleteListener<GoogleSignInAccount>() {
@Override
public void onComplete(@NonNull Task<GoogleSignInAccount>
task) {
handleSignInResult(task);
}
});
GoogleSignInAccount alreadyloggedAccount =
GoogleSignIn.getLastSignedInAccount(this);
if (alreadyloggedAccount != null) {
Toast.makeText(this, "Already Logged In",
Toast.LENGTH_SHORT).show();
account = alreadyloggedAccount;
idToken = account.getIdToken();
SharedPreferences prefs =
getSharedPreferences("Preferences",Context.MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
editor.putString("IDToken",idToken);
editor.commit();
onLoggedIn(alreadyloggedAccount);
} else {
Log.d(TAG, "Not logged in");
updateUI(false);
}
2.- Когда я звоню в WebService и у меня истекает IDToken, чтобы получить еще один IDToken, я делаю это:
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(getString(R.string.server_client_id))
.requestEmail()
.build();
GoogleSignInClient googleSignInClient = GoogleSignIn.getClient(PeliculaDetailActivity.this, gso);
googleSignInClient.silentSignIn()
.addOnCompleteListener(PeliculaDetailActivity.this, new OnCompleteListener<GoogleSignInAccount>() {
@Override
public void onComplete(@NonNull Task<GoogleSignInAccount> task) {
try {
GoogleSignInAccount account = task.getResult(ApiException.class);
String idToken2 = account.getIdToken();
if (idtoken.equals(idToken2)){
idtoken=idToken2;
}
//CALL WebService with the new IDToken
} catch (ApiException e) {
Log.w("", "signInResult:failed code=" + e.getStatusCode());
}
}
});
Спасибо.