How to get access-token mit gmail-api
Bekam ich die Genehmigung folgender code dieses Dokument. Aber wenn ich versuchte, access token, bekam ich immer Fehler. Kann mir jemand helfen ?
public String AccessToken()
{
String accessToken = "";
StringBuilder strBuild = new StringBuilder();
String authURL = "https://accounts.google.com/o/oauth2/token?";
String code = "4/SVisuz_x*********************";
String client_id = "******************e.apps.googleusercontent.com";
String client_secret = "*******************";
String redirect_uri = "urn:ietf:wg:oauth:2.0:oob";
String grant_type="authorization_code";
strBuild.append("code=").append(code)
.append("&client_id=").append(client_id)
.append("&client_secret=").append(client_secret)
.append("&redirect_uri=").append(redirect_uri)
.append("&grant_type=").append(grant_type);
System.out.println(strBuild.toString());
try{
URL obj = new URL(authURL);
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setDoOutput(true);
con.setRequestMethod("POST");
con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
con.setRequestProperty("Host", "www.googleapis.com");
//BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(con.getOutputStream()));
//bw.write(strBuild.toString());
//bw.close();
DataOutputStream wr = new DataOutputStream(con.getOutputStream());
wr.writeBytes(strBuild.toString());
wr.flush();
wr.close();
//OutputStreamWriter out = new OutputStreamWriter(con.getOutputStream());
System.out.println(con.getResponseCode());
System.out.println(con.getResponseMessage());
} catch (Exception e)
{
System.out.println("Error.");
}
return "";
}
wenn ich lief diesen code, die Ausgabe ist:
400
Bad Request
Welche Fehler machen Sie?
der Ausgang ist mit einem Wort:
sehen Sie, msg, "Ungültige string-Wert" in Ihrer Ausgabe?
Würden Sie bitte geben Sie e.printStackTrace(); von Ihrem catch-block? Es wird helfen, geben Sie die richtige Lösung.
Es noch gedruckt: 400, Bad request
der Ausgang ist mit einem Wort:
Error
sehen Sie, msg, "Ungültige string-Wert" in Ihrer Ausgabe?
Würden Sie bitte geben Sie e.printStackTrace(); von Ihrem catch-block? Es wird helfen, geben Sie die richtige Lösung.
Es noch gedruckt: 400, Bad request
InformationsquelleAutor tqjustc | 2016-03-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ans: Als pro Ihre folgenden tutorial, Sie sind mit
OAuth 2.0
. So gibt es ein grundlegendes Muster für den Zugriff auf ein Google-API mitOAuth 2.0
. Es folgt 4 Schritte:Details, können Sie die tutorial - Die Verwendung von OAuth 2.0 für den Zugriff auf Google APIs
Haben Sie zu besuchen, die Google Entwickler-Konsole zu erhalten OAuth 2.0-Anmeldeinformationen wie ein
client ID
undclient secret
denen bekannt ist, dass sowohl Google als auch Ihre AnwendungRoot Cause Analysis:
Problem-1:
Nach dem Studium Ihren code noch etwas fehlt, sind gefunden. Wenn dein code läuft, dann den code immer eine leere Zeichenfolge. Weil Ihr
AccessToken()
Methode immer zurückreturn "";
Problem-2:
Try-catch-block geht exception-block. Weil es scheint, dass Sie nicht abgeschlossen haben Ihren code richtig. Sie verpasst haben
encoding
sowie mitJSONObject
denen bereitet den access token. Also es gibt die Ausgabe alsLösung:
Bekam ich, dass Ihr code ist ähnlich wie mit diesem tutorial
Wie muss der code mehr Veränderungen, um Ihr Problem zu lösen. Deshalb biete ich Ihnen die Nutzung LinkedHashMap oder ArrayList. Diese ermöglichen einen einfacheren Weg zur Lösung. Also ich gebe dir 2 Beispiel-code, um Ihr Leben leichter machen. Sie können jede von Ihnen zu wählen. Sie müssen ändern
refresh_token, client id, client secret and grant type
wie deine.Ressource Link:
Nicht in der Lage zu Holen Sie sich die Informationen zu den Abonnements von Google Play Android Developer API
Mit Hilfe von java.net.URLConnection Feuer und behandeln von HTTP-requests
Wie zum senden von HTTP-request GET/POST in Java
Hoffen, dass diese
samples
undresource link
wird Ihnen helfen, Ihr Problem zu lösen und erhalten Sie Zugangaccess token
.Was ist 400 bad request?
Ans: Es zeigt an, dass die Abfrage war ungültig. Parent ID fehlt oder die Kombination von Dimensionen oder Kennzahlen angefordert wurde, nicht gültig ist.
Empfohlene Aktion:, die Sie benötigen, um änderungen an der API-Abfrage, um für Sie zu arbeiten.
Warum token abläuft? Was ist das limit der token?
Token könnte aufhören zu arbeiten für eine der folgenden Gründe:
revoked
Zugang.six months
.user changed passwords
und das token enthält, Gmail, Kalender,Kontakte oder Treffpunkte Bereiche.
exceeded a certain number of token requests
.Es ist
currently a limit of 25 refresh tokens per user account per client
. Wenn das limit erreicht ist, wird ein neues token erstellen automatisch invalidiert die älteste token ohne Warnung. Diese Grenze gilt nicht für service-Konten.Welche Vorsichtsmaßnahmen sollten befolgt werden?
Vorsichtsmaßnahmen - 1:
Vorsichtsmaßnahmen - 2:
Vorsichtsmaßnahmen - 3:
Ich update meine Antwort mit einigen Proben und Ressourcen-link. Bitte überprüfen Sie dies und geben Sie mir zu aktualisieren, so dass ich geben kann Sie ein besseres feedback.
InformationsquelleAutor SkyWalker
Sind Sie nicht mit dem richtigen Endpunkt. Versuchen Sie eine Veränderung der
authURL
zuhttps://www.googleapis.com/oauth2/v4/token
Aus der Dokumentation:
Die eigentliche Anfrage könnte wie folgt Aussehen:
Referenz https://developers.google.com/identity/protocols/OAuth2InstalledApp#handlingtheresponse
400 Bad Request
.Versuchen Sie die Verschlüsselung Ihrer params mit
URLEncoder.encode(param, "UTF-8");
nope, es funktioniert immer noch nicht
InformationsquelleAutor newhouse
Für mich, Ihre Anfrage ist in Ordnung, versuchte ich es mit Curl, bekomme ich auch eine 'HTTP/1.1 400 Bad Request" mit der Grund, warum es fehlgeschlagen 'invalid_grant' :
Ich erhalten ("HTTP/1.1 400 Bad Request) :
Nun mit HttpClient von Apache :
Sehe ich in meiner Konsole :
Sind Sie sicher, dass der code, den Sie verwenden, ist die noch gültig ? Können Sie versuchen mit einem neuen ?
InformationsquelleAutor Benoit Vanalderweireldt
Erstens muss man diese Seite :
https://developers.google.com/gmail/api/auth/web-server#create_a_client_id_and_client_secret
Den Wert sehen Sie in den query-parameter-code ist eine Zeichenfolge, die Sie haben, um posten zu google, um das access token.
Nach der web-server erhält den Autorisierung code, es kann den Austausch der auth-code für eine access-token und refresh token. Diese Anfrage ist ein http POST an die URL https://www.googleapis.com/oauth2/v3/token
POST /oauth2/v3/token HTTP/1.1
content-type: application/x-www-form-urlencoded
code=4/v4-CqVXkhiTkn9uapv6V0iqUmelHNnbLRr1eberzkqw#&redirect_uri=&client_id=&scope=&client_secret=************&grant_type=authorization_code
https://developers.google.com/identity/protocols/OAuth2WebServer
InformationsquelleAutor Fırat Kocabay
Ich glaube, ich verstehe, was falsch ist:
als @newhouse sagte, Sie sollten die POST zu
https://www.googleapis.com/oauth2/v4/token
und nichthttps://accounts.google.com/o/oauth2/token
(@newhouse ich gab dir ein +1 🙂 )(
https://www.googleapis.com/oauth2/v4/token
ist für immer dieauthorization_code
undhttps://accounts.google.com/o/oauth2/token
ist für immer diecode
).Sie nicht verwenden können, den gleichen
code
mehr als einmal.Alles andere scheint in Ordnung so, wenn du immer 400, versuchen Sie wahrscheinlich, verwenden Sie die
code
bekam man mehr als einmal (und dann bekommst du 400 jedes mal, wieder und wieder).* Sollten Sie verlieren auch die
con.setRequestProperty("Host", "www.googleapis.com");
InformationsquelleAutor Yoav Aharoni
Finden : https://developers.google.com/android-publisher/authorization
Haben Sie schon Autorisierungs-code, der aufgerufen wird, "refresh token". Bitte halten Sie es in einem sicheren Ort auf. Sie können mit "refresh token" generieren "access token".
Bekommen "access token", bitte machen Sie einen post-request an folgende URL
https://accounts.google.com/o/oauth2/token
Parameter:
wo "grant_type" sollte "refresh_token"
Sind wir mit PHP zu tun, gleich, hier ist der PHP-code für Ihre Referenz
Hoffe es wird Euch helfen.
InformationsquelleAutor Umang Joshi