Android: Как получить токен обновления с помощью API входа в систему Google?

В настоящее время я работаю над приложением, в котором пользователь может войти в систему с помощью Google. В рамках процесса входа в систему нам необходимо отправить Google ACCESS TOKEN и REFRESH TOKEN на сервер.

Я получаю токен доступа следующим способом,

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

Класс GoogleAuthUtil, с которого я обращаюсь к токену доступа, не имеет функции для токена обновления. Итак, как получить доступ к токена обновления? Заранее спасибо!

Solutions Collecting From Web of "Android: Как получить токен обновления с помощью API входа в систему Google?"

Вы должны использовать поток кода авторизации сервера через Auth.GOOGLE_SIGN_IN_API : получить код авторизации сервера на клиенте Android, отправить на сервер, сервер обменивает код для обновления и доступа к токену (с тайной). В этом блоге также есть более подробная информация.

Кроме того, если вы используете GoogleAuthUtil.getToken для доступа к токену сейчас, вы хотите проверить это сообщение в блоге с лучшей практикой в ​​Google, чтобы посмотреть, как перейти на рекомендуемый поток, чтобы обеспечить безопасность и лучший UX.

Я думаю, вам нужно попробовать этот код в AsyncTask как AsyncTask ниже.

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

Затем вызовите AsyncTask как AsyncTask ниже, чтобы получить AsyncTask доступа:

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

Проверьте здесь . Надеюсь, это поможет вам.