【问题标题】:How to get access token from GoogleCredential?如何从 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。我做错了什么,还是遗漏了一些步骤?

【问题讨论】:

标签: authorization google-api oauth-2.0 credentials access-token


【解决方案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 或将范围传递给 构造函数。

【讨论】:

    猜你喜欢
    • 2020-12-07
    • 2019-05-20
    • 2015-05-16
    • 1970-01-01
    • 2013-03-30
    • 2021-11-10
    • 2023-03-07
    • 2012-04-09
    • 1970-01-01
    相关资源
    最近更新 更多