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, с которого я обращаюсь к токену доступа, не имеет функции для обновления токена. Итак, как получить доступ к токена обновления? Спасибо заранее!
Ответы
Ответ 1
Вы должны использовать серверный поток аутентификации сервера через Auth.GOOGLE_SIGN_IN_API: получить код авторизации сервера на клиенте Android, отправить на сервер, сервер обменяет код для токена обновления и доступа (с тайной). В этом сообщении также есть более подробная информация.
Кроме того, если вы используете GoogleAuthUtil.getToken для доступа к токену сейчас, вы хотите проверить это Сообщение в блоге Google по лучшей практике Google, чтобы узнать, как перейти к рекомендуемому потоку, чтобы обеспечить безопасность и лучший UX.
Ответ 2
Я думаю, вам нужно попробовать этот код в 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
, как показано ниже, чтобы получить токен доступа:
...
new RetrieveTokenTask().execute(mAccountName);
Отметьте здесь.
Надеюсь, это поможет вам.