如何从GoogleCredential获取访问令牌?

Kal*_*ina 18 authorization credentials google-api access-token oauth-2.0

我正在尝试获取访问令牌以使用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();
Run Code Online (Sandbox Code Playgroud)

但是如何从此凭据获取访问令牌?credential.getAccessToken()回报null.我做错了什么,或者错过了一些步骤?

Kal*_*ina 50

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

credential.refreshToken();
accessToken = credential.getAccessToken();
Run Code Online (Sandbox Code Playgroud)

  • 非常感谢@TheBeatlemaniac你真的想知道为什么这不是在文档中写的 (3认同)

lor*_*max 5

如果ServiceAccountCredentials.fromStream()用于创建凭证对象,则可能也必须调用该createScoped()方法。

    FileInputStream fileInputStream = new FileInputStream(KEY_FILE_PATH);
    GoogleCredentials credentials = ServiceAccountCredentials.fromStream(fileInputStream);
    credentials = credentials.createScoped(SCOPES);
    AccessToken accessToken = credentials.refreshAccessToken();
Run Code Online (Sandbox Code Playgroud)

否则你会得到错误

java.io.IOException:未为服务帐户配置范围。应通过调用 createScoped 或将作用域传递给构造函数来指定作用域。