9

Я использую Java SDK для Android Publisher v2 и Oauth2 v2. Когда я создал учетную запись службы, мне предоставили JSON из учетной записи службы Google Play Android Developer с идентификатором клиента, электронной почтой, закрытым ключом и т. Д. Я попытался осмотреться и выяснить, как создать учетные данные, чтобы я использовал службу AndoirdPublisher для получения информации на моих подписях пользователей Android, правах и т. д. и хранить эту информацию на наших серверных серверах.HOWTO создайте GoogleCredential с помощью учетной записи службы JSON

Мне нелегко пытаться выяснить, как это сделать. Ни одна из документов, которые я видел до сих пор, не помогает в создании GoogleCredential с использованием загруженного JSON.

Например, есть 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). Он расскажет вам, как создать учетную запись службы, если вы предпочитаете ее использовать. Чтобы убедиться в том, что вы действительно можете извлечь информацию, некоторые вещи, которые нужно проверить, включают в себя API разработчика Android для Google Play, свяжите свой проект с учетной записью публикации Google Play и предоставите необходимые разрешения для учетной записи службы в консоли Google Play Store. – Andy

+0

@ Энди Спасибо. Да, я уже создал учетную запись службы и хочу использовать созданный для нее JSON (вместо файла P12) для создания объекта GoogleCredential. – Chantz

+0

@ Энди Я обновил вопрос, чтобы дать больше информации. – Chantz

ответ

18

Я был в состоянии решить эту проблему, перекодировав исходный код для GoogleCredential сам по github (который на данный момент находится 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. –

Смежные вопросы