27

我正在尝试获取访问令牌以使用 Google Play Android Developer API,而我使用Google API Java Client 文档示例已经做到了这一点:

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。我做错了什么,还是错过了一些步骤?

4

2 回答 2

61

知道了。您必须在 credential.getAccessToken() 之前调用 credential.refreshToken()。它没有在文档中的任何地方说明这一点,但这就是它的作用。

credential.refreshToken();
accessToken = credential.getAccessToken();
于 2012-09-25T14:49:10.907 回答
5

如果您使用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 或将范围传递给构造函数来指定。

于 2019-08-08T00:32:23.967 回答