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。 –

相關問題