9

我正在使用Java SDK的Android Publisher v2Oauth2 v2。一旦我创建了服务帐户,我就获得了一个带有客户端ID,电子邮件,私钥等的Google Play Android Developer服务帐户的JSON。我尝试了解如何创建证书,以便使用AndoirdPublisher服务来获取信息在我的Android应用的用户订阅,权利等,并将这些信息存储在我们的后端服务器上。如何使用服务帐户JSON创建GoogleCredential

我越来越难试图找出如何去做这件事。迄今为止我所看到的文档都没有帮助使用下载的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 = "[email protected]"; 
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 info创建服务帐户时生成的&。

+0

不完全确定你在问什么,但你应该首先按照[这里]列出的步骤(https://developers.google.com/android-publisher/getting_started#using_a_service_account)。它会告诉你如何创建一个服务帐户,如果你想使用它。为确保您确实可以获取一些需要检查的信息,请启用Google Play Android开发人员API,将您的项目与Google Play发布帐户相关联,并将必要的权限授予您在Google Play商店控制台中的服务帐户。 – Andy

+0

@安迪谢谢。是的,我已经创建了一个服务帐户,并且希望使用为其生成的JSON(而不是P12文件)来创建GoogleCredential对象。 – Chantz

+0

@Andy我已经更新了这个问题以提供更多信息。 – Chantz

回答

18

我可以通过在github上搜索GoogleCredential本身的源代码(截至目前位于here)来解决此问题。

原来我的代码中存在的google-api-java-client的版本有点过时。我将其升级到最新版本1.20.0 &我现在可以直接指定创建的JSON对象来创建GoogleCredential。我希望Google会更新他们的文档。

这里是代码片段,

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

GoogleCredential credential = GoogleCredential.fromStream(resourceAsStream); 

那么简单。

+6

某些Google API需要一些可以添加示波器的示波器: credential = credential.createScoped(PredictionScopes.all()); –

+0

将您的JSON密钥放入您的apk文件有哪些安全风险?看起来像一个坏主意......但我没有更好的解决方案。 – Innova

+0

@Chantz你把你的'Google-Play-Android-Developer.json'文件放在哪里?我把它放到'app'文件夹里面,但是它给了我null。 –

相关问题