Как получить токен доступа из 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 или передачи областей в конструктор.

Другие вопросы по тегам