Ungültige gewähren, wenn der Zugriff auf die Google API
Ich versuche, rufen Sie die Google-API-über "Service-Kontos" Autorisierung Zugang. Ich habe heruntergeladen ".pk2" - Datei und aktiviert "URL Shortener API" in der Registerkarte "Dienste" von Google API console. Immer wenn ich versuche zu rufen-API (URL-shortener oder Adsense). Ich habe folgende Ausnahme -
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)
Unten ist ein code-snippet -
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();
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zunächst "Service-Konto" wird nicht für Adsense, da es erfordert die Benutzer-Autorisierung. Also für Adsense Sie sollten die Verwendung von Oauth 2.0. Wenn Sie berechtigt sind erste mal mit URL
https://accounts.google.com/o/oauth2/token
-, copy-paste und fest Ihre refresh-token. Als können Sie es verwenden, um access-token, die angeben, client_id, client_secret und Ihre refresh_token, um neue Zugangs-token. Jetzt Zugriffstoken kann in Ihrer Anwendung verwendet werden.Zu Ihrem Fehler, ich habe vor ähnlichen Problem, und verbrachte viel Zeit, es zu beheben. Zunächst stellen Sie sicher, dass Sie gültige ServiceAccountId - es sollte zeigen Sie auf E-Mail, die endet mit "developer.gserviceaccount.com". Stellen Sie sicher, dass Sie die angegebene Konto-Bereiche und aktivierten Diensten in der Google-Console-API.
Behob ich dieses Problem durch die Synchronisation der system-Uhr in meinem Rechner.
Gibt es eine Menge von Themen mit ähnlichen Fehler, ohne zu Antworten. Mehr noch, einige Menschen sagen, dass es manchmal funktioniert, manchmal gibt es ungültige gewähren. Es könnte die Arbeit an einer Maschine und nicht auf andere. Ich weiß nicht, ob es Systemuhr Problem, aber ich würde vermeiden, mit Service-Konto API, da sieht aus wie es gibt bugs und der support würde nicht helfen, Sie