如何使用服务帐户 JSON 创建 GoogleCredential

HOWTO create GoogleCredential by using Service Account JSON

我正在为 Android Publisher v2Oauth2 v2 使用 Java SDK。创建服务帐户后,我获得了 JSON 个 Google Play Android Developer 服务帐户,其中包含客户端 ID、电子邮件、私钥等。我试图环顾四周并弄清楚如何创建凭据,以便我使用 AndoirdPublisher 服务来获取有关我的 Android 应用的用户订阅、权利等的信息,并将这些信息存储在我们的后端服务器上。

我很难弄清楚如何解决这个问题。 None 到目前为止我看到的文档有助于使用下载的 JSON 创建 GoogleCredential

例如有这个 documentation 但它只提到 P12 文件而不是 JSON。我想尽可能避免使用 P12,因为我有多个客户端,我想将此 JSON 保存在某种数据库中,然后使用它为每个客户端创建凭据。

澄清一下,我正在尝试按照此处所述创建 GoogleCredential 对象,

import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.jackson2.JacksonFactory;
import com.google.api.services.sqladmin.SQLAdminScopes;

// ...

String emailAddress = "123456789000-abc123def456@developer.gserviceaccount.com";
JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();
HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();
GoogleCredential credential = new GoogleCredential.Builder()
    .setTransport(httpTransport)
    .setJsonFactory(JSON_FACTORY)
    .setServiceAccountId(emailAddress)
    .setServiceAccountPrivateKeyFromP12File(new File("MyProject.p12"))
    .setServiceAccountScopes(Collections.singleton(SQLAdminScopes.SQLSERVICE_ADMIN))
    .build();

但是我不想像这样使用 P12 文件设置服务帐户 setServiceAccountPrivateKeyFromP12File(),我想使用 JSON,它包含与我创建服务帐户时生成的相同信息。

我能够通过在 github(目前位于 here)上挖掘 GoogleCredential 本身的源代码来解决这个问题。

我的代码中存在的 google-api-java-client 版本有点过时了。我将它升级到最新的 1.20.0 并且我现在可以直接指定为创建 Google 凭据而创建的 JSON 对象。我希望 Google 会更新他们的文档。

这是代码片段,

InputStream resourceAsStream = AuthTest.class.getClassLoader().getResourceAsStream("Google-Play-Android-Developer.json");

GoogleCredential credential = GoogleCredential.fromStream(resourceAsStream);

就这么简单。