9

J'utilise Java SDK pour Android Publisher v2 et Oauth2 v2. Une fois le compte de service créé, un compte de service JSON de Google Play Android Developer avec ID client, email, clé privée, etc. m'a été fourni. J'ai essayé de voir comment créer une référence de manière à utiliser le service AndoirdPublisher pour récupérer des informations. sur les abonnements des utilisateurs de mon application Android, droits, etc. et stocker cette information sur nos serveurs backend.HOWTO créer GoogleCredential en utilisant le compte de service JSON

J'ai du mal à comprendre comment procéder. Aucune des documentations que j'ai vues jusqu'ici n'aide à créer GoogleCredential en utilisant le JSON téléchargé. Par exemple il y a ce documentation mais il ne mentionne que le fichier P12 et non le JSON. Je veux éviter P12 si possible puisque j'ai plusieurs clients & Je voudrais enregistrer ce JSON dans une sorte de base de données & puis l'utiliser pour créer des informations d'identification pour chaque client.

Juste pour préciser que je suis en train de créer l'objet GoogleCredential tel que décrit ici,

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

Mais au lieu de régler le compte de service à l'aide de fichiers P12 comme si setServiceAccountPrivateKeyFromP12File(), je veux utiliser le JSON qui porte le même info & généré lorsque j'ai créé le compte de service.

+0

Vous ne savez pas tout à fait ce que vous demandez, mais vous devez d'abord suivre les étapes indiquées [ici] (https://developers.google.com/android-publisher/getting_started#using_a_service_account). Il vous dira comment créer un compte de service si vous préférez l'utiliser. L 'API Google Play Developer pour les développeurs est activée, liez votre projet à votre compte de publication Google Play et accordez les autorisations nécessaires à votre compte de service dans la console Google Play Store. – Andy

+0

@Andy Merci. Oui, j'ai déjà créé un compte de service et je veux utiliser le JSON qui a été généré pour cela (au lieu du fichier P12) pour créer l'objet GoogleCredential. – Chantz

+0

@Andy J'ai mis à jour la question pour donner plus d'informations. – Chantz

Répondre

18

J'ai été en mesure de résoudre ce problème en creusant dans le code source pour GoogleCredential lui-même sur github (qui réside désormais à here).

Il s'avère que la version de google-api-java-client qui existait dans mon code était légèrement datée. Je l'ai mis à jour pour le dernier & Je peux maintenant spécifier directement l'objet JSON créé pour créer GoogleCredential. Je souhaite que Google aurait mis à jour leur documentation.

Voici l'extrait de code,

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

GoogleCredential credential = GoogleCredential.fromStream(resourceAsStream); 

simple.

+6

Certains Google Api a besoin de certaines étendues, vous pouvez ajouter les étendues en utilisant: credential = credential.createScoped (PredictionScopes.all()); –

+0

Quels sont les risques de sécurité de mettre votre clé JSON dans votre apk? Cela semble être une mauvaise idée ... mais je n'ai pas de meilleure solution. – Innova

+0

@Chantz Où avez-vous placé votre fichier 'Google-Play-Android-Developer.json'? Je l'ai mis dans le dossier 'app' mais il me donne null. –