Reputation: 5594
I am trying to get an access token to use the Google Play Android Developer API, and I got this far using the Google API Java Client documentation example:
HttpTransport HTTP_TRANSPORT = new NetHttpTransport();
JsonFactory JSON_FACTORY = new JacksonFactory();
GoogleCredential credential = new GoogleCredential.Builder()
.setTransport(HTTP_TRANSPORT)
.setJsonFactory(JSON_FACTORY)
.setServiceAccountId("...gserviceaccount.com")
.setServiceAccountScopes("https://www.googleapis.com/auth/androidpublisher")
.setServiceAccountPrivateKeyFromP12File(keyFile)
.build();
But how do I get the access token from this credential? credential.getAccessToken()
returns null
. Am I doing something wrong, or missing some steps?
Upvotes: 29
Views: 29961
Reputation: 793
If you use ServiceAccountCredentials.fromStream()
to create your credential object, you may have to call the createScoped()
method too.
FileInputStream fileInputStream = new FileInputStream(KEY_FILE_PATH);
GoogleCredentials credentials = ServiceAccountCredentials.fromStream(fileInputStream);
credentials = credentials.createScoped(SCOPES);
AccessToken accessToken = credentials.refreshAccessToken();
Otherwise you get the error
java.io.IOException: Scopes not configured for service account. Scoped should be specified by calling createScoped or passing scopes to constructor.
Upvotes: 6
Reputation: 5594
Got it. You have to call credential.refreshToken() before credential.getAccessToken(). It doesn't say this anywhere in the documentation but that's what does it.
credential.refreshToken();
accessToken = credential.getAccessToken();
Upvotes: 65