web-dev-qa-db-fra.com

Comment créer GoogleCredential en utilisant le compte de service JSON

J'utilise le SDK Java pour Android Publisher v2 Et Oauth2 v2. Une fois que j'ai créé le compte de service, j'ai reçu un JSON de compte de service Google Play Android Developer Avec l'identifiant client, l'e-mail, la clé privée, etc. Service AndoirdPublisher pour récupérer des informations sur les abonnements des utilisateurs de mon application Android, les droits, etc. et stocker ces informations sur nos serveurs principaux.

J'ai du mal à essayer de comprendre comment procéder. Aucune des documentations que j'ai vues jusqu'à présent n'a aidé à créer GoogleCredential à l'aide du JSON téléchargé.

Par exemple, il y a ceci documentation mais il ne mentionne que le fichier P12 et non le JSON. Je veux éviter P12 si possible car j'ai plusieurs clients et 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 clarifier, j'essaie de créer l'objet GoogleCredential comme 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 définir le compte de service à l'aide du fichier P12 comme si setServiceAccountPrivateKeyFromP12File(), je veux utiliser le JSON qui porte les mêmes informations et généré lorsque j'ai créé le compte de service.

17
Chantz

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

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

Voici l'extrait de code,

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

GoogleCredential credential = GoogleCredential.fromStream(resourceAsStream);

C'est simple.

27
Chantz