如何从 GoogleCredential 获取访问令牌?
Posted
技术标签:
【中文标题】如何从 GoogleCredential 获取访问令牌?【英文标题】:How to get access token from GoogleCredential? 【发布时间】:2012-09-16 10:05:46 【问题描述】:我正在尝试获取访问令牌以使用 Google Play android 开发者 API,而我使用 the Google API Java Client documentation example 做到了这一点:
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
。我做错了什么,还是遗漏了一些步骤?
【问题讨论】:
还要检查***.com/a/24264696/165708,您可能需要采取更多步骤才能使一切正常。 【参考方案1】:知道了。您必须在 credential.getAccessToken() 之前调用 credential.refreshToken()。它在文档中的任何地方都没有这样说,但就是这样。
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:未为服务帐户配置范围。范围 应通过调用 createScoped 或将范围传递给 构造函数。
【讨论】:
以上是关于如何从 GoogleCredential 获取访问令牌?的主要内容,如果未能解决你的问题,请参考以下文章
(JAVA) Google API 分析 - 无法使用“刷新令牌”获取新的“访问令牌”
类 Google.Apis.Auth.OAuth2.GoogleCredential.UnderlyingCredential.GetAccessTokenForRequestAsync() 在 Ja