9

Sto utilizzando Java SDK per Android Publisher v2 e Oauth2 v2. Una volta creato l'account di servizio, mi è stato fornito un account di servizio JSON Google Play Android Developer con ID client, email, chiave privata, ecc. Ho provato a cercare informazioni su come creare una credenziale in modo da utilizzare il servizio AndoirdPublisher per recuperare informazioni sugli abbonamenti degli utenti della mia app Android, diritti ecc. e memorizza queste informazioni sui nostri server di backend.HOWTO creare GoogleCredential utilizzando l'account di servizio JSON

Mi sto facendo fatica a cercare di capire come procedere. Nessuna delle documentazioni che ho visto finora aiuta a creare GoogleCredential usando il JSON scaricato.

Ad esempio, c'è questo documentation ma menziona solo il file P12 e non il JSON. Voglio evitare P12 se possibile poiché ho più client & Vorrei salvare questo JSON in una sorta di database & quindi utilizzarlo per creare credenziali per ogni client.

Giusto per chiarire che sto cercando di creare l'oggetto GoogleCredential come descritto qui,

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(); 

Ma invece di impostare l'account di servizio utilizzando P12 File in questo modo setServiceAccountPrivateKeyFromP12File(), voglio usare il JSON che porta lo stesso info & generato quando ho creato l'account di servizio.

+0

Non completamente sicuro di quello che stai chiedendo, ma dovresti prima seguire i passaggi elencati [qui] (https://developers.google.com/android-publisher/getting_started#using_a_service_account). Ti dirà come creare un account di servizio se preferisci usarlo. Per assicurarti di essere in grado di estrarre informazioni, alcuni aspetti da verificare sono l'attivazione dell'API per sviluppatori Android di Google Play, collegare il progetto al tuo account di pubblicazione di Google Play e concedere le autorizzazioni necessarie al tuo account di servizio nella console di Google Play Store. – Andy

+0

@Andy Grazie. Sì, ho già creato un account di servizio e voglio utilizzare il JSON generato per questo (anziché il file P12) per creare l'oggetto GoogleCredential. – Chantz

+0

@Andy Ho aggiornato la domanda per fornire maggiori informazioni. – Chantz

risposta

18

Sono stato in grado di risolvere questo scavando nel codice sorgente per GoogleCredential stesso su github (che a partire da ora risiede here).

Risulta che la versione di google-api-java-client esistente nel mio codice era leggermente datata. L'ho aggiornato all'ultima 1.20.0 & Ora sono in grado di specificare direttamente l'oggetto JSON creato per creare GoogleCredential. Vorrei che Google avrebbe aggiornato la loro documentazione.

Ecco il frammento di codice,

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

GoogleCredential credential = GoogleCredential.fromStream(resourceAsStream); 

così semplice.

+6

Alcune API di Google hanno bisogno di alcuni ambiti che è possibile aggiungere gli ambiti utilizzando: credenziali = credential.createScoped (PredictionScopes.all()); –

+0

Quali sono i rischi per la sicurezza di inserire la chiave JSON nel tuo apk? Sembra una cattiva idea .... ma non ho una soluzione migliore. – Innova

+0

@Chantz Dove hai inserito il file 'Google-Play-Android-Developer.json'? L'ho inserito nella cartella 'app' ma mi ha dato nulla. –