We tried to create a code to obtain Google Adwords API connection using service account but we are getting the following errors.
Caused by: com.google.api.client.auth.oauth2.TokenResponseException: 400 Bad Request
{
"error" : "invalid_grant"
}
at com.google.api.client.auth.oauth2.TokenResponseException.from(TokenResponseException.java:105)
at com.google.api.client.auth.oauth2.TokenRequest.executeUnparsed(TokenRequest.java:287)
at com.google.api.client.auth.oauth2.TokenRequest.execute(TokenRequest.java:307)
at com.google.api.client.googleapis.auth.oauth2.GoogleCredential.executeRefreshToken(GoogleCredential.java:384)
at com.google.api.client.auth.oauth2.Credential.refreshToken(Credential.java:489)
at com.google.api.ads.common.lib.auth.OAuth2Helper.callRefreshToken(OAuth2Helper.java:70)
at com.google.api.ads.common.lib.auth.OAuth2Helper.refreshCredential(OAuth2Helper.java:56)
at com.google.api.ads.common.lib.auth.AuthorizationHeaderProvider.getOAuth2Header(AuthorizationHeaderProvider.java:102)
The code for google adwords API connection using service account is :
GoogleCredential serviceAccountCredential = new GoogleCredential.Builder()
.setTransport(new NetHttpTransport.Builder().setProxy(proxy).build())
.setJsonFactory(new JacksonFactory())
.setServiceAccountId("****.apps.googleusercontent.com")
.setServiceAccountScopes(Collections.singleton("https://adwords.google.com/api/adwords"))
.setServiceAccountPrivateKeyFromP12File(keyFile)
.setServiceAccountUser("****@gmail.com")
.build();
return serviceAccountCredential;
AdWordsSession adSession = new AdWordsSession.Builder()
.fromFile()
.withOAuth2Credential(credential)
.build();