Invalide de la subvention lors de l'accès aux API de Google
J'essaie d'appeler l'une de l'API de Google à l'aide de "compte de Service" autorisation d'accès. J'ai téléchargé ".pk2" fichier et activé "le Raccourcisseur d'URL de l'API" dans l'onglet Services de l'API Google console. Chaque fois que j'essaie d'appeler l'API (raccourcisseur d'URL ou Adsense). J'ai exception suivante -
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:303)
at com.google.api.client.auth.oauth2.TokenRequest.execute(TokenRequest.java:323)
at com.google.api.client.googleapis.auth.oauth2.GoogleCredential.executeRefreshToken(GoogleCredential.java:345)
at com.google.api.client.auth.oauth2.Credential.refreshToken(Credential.java:526)
at com.google.api.client.auth.oauth2.Credential.intercept(Credential.java:287)
at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:836)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:412)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:345)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:463)
Ci-dessous est extrait de code -
HttpTransport HTTP_TRANSPORT = new NetHttpTransport();
JsonFactory JSON_FACTORY = new JacksonFactory();
File privateKey = new File(ReportAdsense.class.getResource("mykey.p12").toURI());
GoogleCredential credential = new GoogleCredential.Builder().setTransport(HTTP_TRANSPORT)
.setJsonFactory(JSON_FACTORY)
.setServiceAccountId("[email protected]")
.setServiceAccountScopes(UrlshortenerScopes.URLSHORTENER)
.setServiceAccountPrivateKeyFromP12File(privateKey)
.build();
Urlshortener service = new Urlshortener.Builder(new NetHttpTransport(), JSON_FACTORY, null).setHttpRequestInitializer(credential).build();
UrlHistory history = service.url().list().execute();
OriginalL'auteur user12384512 | 2013-04-14
Vous devez vous connecter pour publier un commentaire.
Tout d'abord "compte de Service" ne fonctionnera pas pour Adsense, car elle nécessite l'autorisation de l'utilisateur. Donc pour Adsense, vous devez utiliser le protocole Oauth 2.0. Lorsque vous y êtes autorisé première fois à l'aide de l'URL
https://accounts.google.com/o/oauth2/token
, copier-coller et de coder en dur votre jeton d'actualisation. Que vous pouvez utiliser pour obtenir un jeton d'accès, de spécifier client_id, client_secret et votre refresh_token pour obtenir le nouveau jeton d'accès. Maintenant jeton d'accès peut être utilisé dans votre application.Au sujet de votre erreur, que j'ai rencontré avec problème similaire et a passé beaucoup de temps à résoudre. Tout d'abord, assurez-vous que vous utilisez valide ServiceAccountId - elle doit pointer vers l'e-mail qui se termine par "developer.gserviceaccount.com". Assurez-vous que vous avez spécifié compte des étendues et des services activés dans Google Console API.
J'ai résolu ce problème grâce à la synchronisation de l'horloge système sur ma machine.
Il y a beaucoup de sujets à l'erreur semblable sans réponses. Plus encore, certains gens disent, que parfois cela fonctionne, parfois non valide de retours de subvention. Il pourrait fonctionner sur une seule machine et de l'échec sur l'autre. Je ne sais pas si c'est de l'horloge système en question, mais je voudrais éviter d'utiliser du Compte de Service de l'API, depuis regarde comme il y a des bugs et le support ne serait pas vous aider
OriginalL'auteur Anton