Ответ 1
Получил это. Вы должны вызвать credential.refreshToken() перед credential.getAccessToken(). Он не говорит об этом нигде в документации, но что это делает.
credential.refreshToken();
accessToken = credential.getAccessToken();
Я пытаюсь получить токен доступа для использования 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
. Я что-то делаю неправильно или пропустил несколько шагов?
Получил это. Вы должны вызвать 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: Области не настроены для учетной записи службы. Scoped следует указывать, вызывая createScoped или передавая области конструктор.