如何从Google凭据中获取访问令牌?

29

我正在尝试获得访问令牌以使用Google Play Android开发者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。 我做错了什么,或者漏掉了一些步骤吗?


还需要检查一下https://dev59.com/P2gu5IYBdhLWcg3wv5Ya#24264696,可能需要采取更多的步骤才能让一切正常运行。 - Miha Hribar
2个回答

64

明白了。在调用credential.getAccessToken()之前,必须先调用credential.refreshToken()。文档中没有说明这一点,但这就是关键。

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

我在谷歌文档中也没有找到相关内容。感谢您的帮助,Kalina。 - Deepak Bandela

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接