如何使用服务帐户 JSON 创建 GoogleCredential
HOWTO create GoogleCredential by using Service Account JSON
我正在为 Android Publisher v2
和 Oauth2 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);
就这么简单。
我正在为 Android Publisher v2
和 Oauth2 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);
就这么简单。