Как получить токен доступа из GoogleCredential?
Я пытаюсь получить токен доступа для использования Google Play Android Developer API, и я получил это далеко на примере документации по клиентскому интерфейсу Google API Java:
HttpTransport HTTP_TRANSPORT = new NetHttpTransport();
JsonFactory JSON_FACTORY = new JacksonFactory();
GoogleCredential credential = new GoogleCredential.Builder()
.setTransport(HTTP_TRANSPORT)
.setJsonFactory(JSON_FACTORY)
.setServiceAccountId("...gserviceaccount.com")
.setServiceAccountScopes("https://www.googleapis.com/auth/androidpublisher")
.setServiceAccountPrivateKeyFromP12File(keyFile)
.build();
Но как мне получить токен доступа из этих учетных данных? credential.getAccessToken()
возвращается null
, Я делаю что-то не так или пропускаю некоторые шаги?
1 ответ
Понял. Вы должны вызвать credential.refreshToken() перед credential.getAccessToken(). Это не говорит об этом нигде в документации, но вот что это делает.
credential.refreshToken();
accessToken = credential.getAccessToken();
Если вы используете ServiceAccountCredentials.fromStream()
для создания объекта учетных данных вам, возможно, придется вызвать createScoped()
метод тоже.
FileInputStream fileInputStream = new FileInputStream(KEY_FILE_PATH);
GoogleCredentials credentials = ServiceAccountCredentials.fromStream(fileInputStream);
credentials = credentials.createScoped(SCOPES);
AccessToken accessToken = credentials.refreshAccessToken();
В противном случае вы получите ошибку
java.io.IOException: области не настроены для учетной записи службы. Область действия должна быть указана путем вызова createScoped или передачи областей в конструктор.