I am using the Java SDK for Android Publisher v2
and Oauth2 v2
. Once I created the service account I was provided with a JSON of Google Play Android Developer
service account with client id, email, private key etc. I have tried to look around and figure out how to create a Credential so that I use the AndoirdPublisher service to fetch info on my Android App's users subscriptions, entitlements etc and store this info on our backend servers.
I am getting hard time trying to figure out how to go about this. None of the documentations I have seen so far help in creating GoogleCredential
using the downloaded JSON.
For example there is this documentation but it mentions only about P12 file and not the JSON. I want to avoid P12 if possible since I have multiple clients & I would like to save this JSON in some sort of database & then use it to create credential for each client.
Just to clarify I am trying to create the GoogleCredential object as described here,
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();
But instead of setting the Service Account using P12 File like so setServiceAccountPrivateKeyFromP12File()
, I want to use the JSON that carries the same info & generated when I created the service account.
Log in to the Google Cloud CLI as the caller Google Account. Impersonate the privilege-bearing service account to generate the token. The gcloud auth print-access-token command generates an OAuth 2.0 access token for a service account.
I was able to solve this by digging in to the source code for GoogleCredential
itself on github (which as of now resides here).
Turns out the version of google-api-java-client
that was existing in my code was slightly dated. I upgraded it to the latest one 1.20.0
& I am able to now directly specify the JSON object created to create the GoogleCredential. I wish Google would have updated their documentation.
Here is the code snippet,
InputStream resourceAsStream = AuthTest.class.getClassLoader().getResourceAsStream("Google-Play-Android-Developer.json"); GoogleCredential credential = GoogleCredential.fromStream(resourceAsStream);
That simple.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With