Подтвердить что ты не робот

Как получить токен доступа от GoogleCredential?

Я пытаюсь получить токен доступа для использования API разработчика Android для Google Play, и я до сих пор использовал пример документации API Java API Google:

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. Я что-то делаю неправильно или пропустил несколько шагов?

4b9b3361

Ответ 1

Получил это. Вы должны вызвать credential.refreshToken() перед credential.getAccessToken(). Он не говорит об этом нигде в документации, но что это делает.

credential.refreshToken();
accessToken = credential.getAccessToken();

Ответ 2

Если вы используете 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: Области не настроены для учетной записи службы. Scoped следует указывать, вызывая createScoped или передавая области конструктор.