Как я могу получить другой IDToken от Google Api Client, когда мой IDToken истек? - PullRequest
0 голосов
/ 01 июля 2019

В моем приложении для 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());
                            }
                        }
                    });

Спасибо.

...