我正在尝试获取访问令牌以使用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
.我是否做错了什么,或者错过了一些步骤?
知道了。您必须在 credential.getAccessToken() 之前调用 credential.refreshToken()。它没有在文档中的任何地方说明这一点,但这就是它的作用。
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 或将范围传递给 构造 函数。