Erhalte ich die richtigen Schritte, um das Android In-App-Abonnement eines Nutzers zu überprüfen?
Mache ich eine app, die nicht erfordert ein Benutzer-account/login-Daten und ermöglicht dem Benutzer um ein Abonnement zu kaufen. Ich möchte das Google Play-Entwickler-API, um zu überprüfen, ob ein Benutzer ein gekauftes/aktives Abonnement. Von allen Unterlagen, die ich gesammelt habe die folgenden Schritte aus.
Sind Sie richtig, und könnte man Antwort auf die beiden Fragen in Ihnen?
- Erstellen Sie eine Dienstkonto in der Google APIs-Konsole.
- Speichern Sie den privaten Schlüssel, der mir gegeben wird (wo? sicherlich nicht in meinem code, der/die auf dem Gerät dieses Beispiel-code schon sagt)
- Verwenden Google APIs Client Library for Java zu erstellen und zu unterzeichnen JWT mit dem privaten Schlüssel (wie? die docs mir dieseaber das ist nicht Java-code... Was muss ich tun?)
- Konstruieren Sie ein access token Anfrage und erhalten Sie Zugriff auf die API
- Anwendung können Sie jetzt senden Sie eine ERHALTEN Anfrage an die API, um herauszufinden, ob oder nicht die
Benutzer hat ein Abonnement - Wenn der access-token abläuft, gehen Sie zurück zu Schritt 3.
Außerdem habe ich ein web-service, aber ich weiß nichts über web-services oder web-service-Programmierung... ich weiß nur, genug zu wissen, dass es ist wahrscheinlich notwendig, hier zu verwenden.
EDIT: Diese Schritte wurden nicht korrekt ist. Siehe meine Antwort unten, für die richtigen Schritte. Beachten Sie jedoch, dass dies nur gilt, um sich mit einem service account (weil ich nicht wollen, muss ein Benutzer explizit erlauben API-Zugriff)
InformationsquelleAutor der Frage Kalina | 2012-09-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als es stellt sich heraus, meine Schritte waren nicht korrekt. Es dauerte Wochen, um dies herauszufinden und es scheint nicht dokumentiert überall sonst. Du bist willkommen:
Erstellen Sie eine Web-Anwendung Konto in der Google APIs-Konsole. Jede website als "redirect URI"; es spielt keine Rolle, da Sie nicht wirklich nutzen es. Erhalten Sie eine client-id und client secret, wenn Sie das Konto erstellen.
In einem browser auf Ihrem computer gehen Sie zu
https://accounts.google.com/o/oauth2/auth?scope=https://www.googleapis.com/auth/androidpublisher&response_type=code&access_type=offline&redirect_uri=[YOUR REDIRECT URI]&client_id=[YOUR CLIENT ID]
und Zugriff zulassen, wenn Sie dazu aufgefordert werden.Schau mal in der Adressleiste. Am Ende der URI, die Sie ursprünglich eingegeben wird, werden Sie Ihre refresh-token. Es sieht aus wie
1/....
Sie müssen diesen "code" in den nächsten Schritt. Der refresh-token läuft nie ab.Konvertieren dieser "code", um ein "refresh token", indem Sie zu
https://accounts.google.com/o/oauth2/token?client_id=[YOUR CLIENT ID]&client_secret=[YOUR CLIENT SECRET]&code=[CODE FROM PREVIOUS STEP]&grant_type=authorization_code&redirect_uri=[YOUR REDIRECT URI]
. Sie speichern den resultierenden Wert direkt in Ihrem Programm, es läuft nie ab, es sei denn, ausdrücklich widerrufen. (diesem Schritt eingefügt durch @BrianWhite -- siehe Kommentare)Stellen Sie sicher, dass Sie mit der POST.(eingefügt durch Gintas)
In Ihrem code, HttpPost senden Sie eine Anfrage an
https://accounts.google.com/o/oauth2/token
mit der BasicNameValuePairs"grant_type","refresh_token"
"client_id",[YOUR CLIENT ID]
"client_secret",[YOUR CLIENT SECRET]
"refresh_token",[YOUR REFRESH TOKEN]
. Für ein Beispiel schauen Sie hier. Sie tun müssen, wird dies in einem separaten thread, wahrscheinlich mit AsyncTask. Diese Rückkehr wird ein JSONObject.Holen Sie sich den access token von dem zurückgegeben JSONObject. Für ein Beispiel schauen Sie hier. Sie benötigen, um die Zeichenfolge "access_token". Das access-token abläuft in 1 Stunde.
In Ihrem code haben, senden Sie eine HttpGet-Anfrage an
https://www.googleapis.com/androidpublisher/v1/applications/[YOUR APP'S PACKAGE NAME]/subscriptions/[THE ID OF YOUR PUBLISHED SUBSCRIPTION FROM YOUR ANDROID DEVELOPER CONSOLE]/purchases/[THE PURCHASE TOKEN THE USER RECEIVES UPON PURCHASING THE SUBSCRIPTION]?accesstoken="[THE ACCESS TOKEN FROM STEP 4]"
. Für ein Beispiel schauen Sie hier.InformationsquelleAutor der Antwort Kalina
Wenn Sie wie ich sind, und wollen diese in PHPhier ist die Prozedur, wie es zu tun... Dank Kalina Antwort es hat mich nur drei Tage, um herauszufinden, wie es funktioniert :).
Hier geht:
gehen Sie zu google Entwickler-Konsole https://console.developers.google.com/ und erstellen Sie eine web-app. "Developers.google.com/oauthplayground'als einen "redirect URI"; verwenden Sie es in Schritt 2. Erhalten Sie eine client-id und client secret, wenn Sie das Konto erstellen. Stellen Sie sicher, dass die Google Play Android Developer API Hinzugefügt.
gehen Sie auf die Google-oauth2 Spielplatz https://developers.google.com/oauthplayground/. Dieses großartige tool wird Ihr bester Freund für die nächsten Tage.
Gehen Sie jetzt zu Einstellungen : stellen Sie sicher, dass Verwenden Sie Ihre eigenen OAuth-Anmeldeinformationen eingestellt ist. Nur dann können Sie füllen Sie Ihre client-ID und client secret das Formular unten aus.
In Google oauth2 Spielplatz gehen Sie zu Schritt 1 Wählen Sie & autorisieren APIs füllen Sie den Rahmen in das Eingabefeld https://www.googleapis.com/auth/androidpublisher. Ich couldnt finden, der Google Play Android Developer-API in der Liste, vielleicht werden Sie fügen Sie einige Zeit später. Treffer AUTORIZE APIS. Tun die Genehmigung der Sache, dass folgt.
In Google oauth2 Spielplatz gehen Sie zu Schritt 2 Exchange auth-code für Token. Wenn alles gut gegangen ist, sehen Sie einen Autorisierungs-code beginnend mit /4. Wenn etwas nicht gut gehen, überprüfen Sie die Fehlermeldung auf der rechten Seite. Jetzt, Sie klicken Sie auf 'refresh access token'. Kopieren Sie die Refresh-token... es wird aus /1...
Nun können Sie jederzeit ein Zugangs-token! hier ist, wie:
Nun haben Sie ein ZUGANGS-TOKEN Hurra... das JSON sieht wie folgt aus:
Schließlich sind Sie bereit, um Fragen von google etwas! Hier ist, wie es zu tun:
JSON zurückgegeben werden, enthalten zwei Zeitstempel, die initiationTimestampMsec und validUntilTimestampMsec der Zeit, das Abonnement gültig ist. Beide sind die nr von millisecs hinzufügen, um das Datum 1/1/1970!
InformationsquelleAutor der Antwort Rudolfwm
.NET-Benutzer: ich hoffe, diese Antwort speichert jemand ein ton der Trauer.
Als @Christophe Fondacci bereits auf 2015, die akzeptierte Lösung hat Super funktioniert, vor ein paar Jahren. Jetzt ist es 2017 und der Prozess ist viel einfacher und schneller.
Mein use-case ist die Validierung von in-app-Abonnements, wo mein mobile-app sendet Abonnement kaufen meine RESTful-server, die wiederum Kontakte von Google zu überprüfen, ein Abonnement zu erwerben.
Ist die Strategie erstellen Sie ein Dienstkonto, das wird betreiben in Ihrem Namen.
Ab Jan 2017 ein Dialogfeld mit Anweisungen einrichten eines Dienstkontos angezeigt. Den dialog nimmt Sie an die Google API-Konsole; von dort aus
A) Klicken Sie Auf Erstellen Von Service-Konto
B) Erstellen Sie die service-Konto-Namen, die Sinn macht. Da wir daran interessiert sind, Zugriff auf Android Publisher Services, wählte ich "publisher".
C) Für die Rolle, wählen Sie einfach etwas - ändern kann man das später.
D) Wählen Sie "Liefern Neuen privaten Schlüssel" und wählen Sie P12.Net-Implementierungen. Verlieren Sie nicht diese Datei!
5.) Jetzt bist du fertig mit #4, Sie werden sehen, Ihre neue Service-Konto aufgeführt; klicken Sie auf "Zugriff Gewähren", um es zu aktivieren.
6) Tippen Sie auf den link "Berechtigungen". Sie sollten ändern Sie die Berechtigungen auf der Grundlage Ihrer Bedürfnisse und API.
Zur Validierung von in-app-Einkäufe, besuchen Sie die Cog->Berechtigungen Ändern und aktivieren Sie die GLOBALE "Sichtbarkeit" und "Bestellungen Verwalten" - Berechtigungen.
OK, an diesem Punkt Sie alles konfiguriert haben, auf den Google-Ende. Nun zum einrichten der server-zu-server-Zeug. Ich empfehlen
ein .Net-Konsole App zu testen Sie Ihre Implementierung dann auslagern, wo es benötigt wird.
1) Fügen Sie die Android-Publisher-Client-Bibliothek von Nuget
2) Fügen Sie die P12-Datei zu Ihrem Projekt root
3) Ändern Sie die P12-Eigenschaften, also "Build Action" auf "Inhalt" und "Copy To Output Directory" auf "Kopieren, wenn neuer".
4) Implementieren, so etwas zu testen, Ihren Zugang und die Feinabstimmung.
Glück, hoffe, das jemand hilft.
Quellen:
Die Verwendung von OAuth 2.0 für Server-zu-Server-Anwendungen
.Net-Client-Bibliothek für Google.Apis.AndroidPublisher.v2
InformationsquelleAutor der Antwort RamblinRose
Ich weiß nicht in 2012, aber im Jahr 2015, die Sie nicht tun sollten alle diese Schritte manuell durchführen. Ich hatte eine sehr harte Zeit zu finden in der Dokumentation, so bin ich hier veröffentlichen, falls es hilft jemand.
Nun auf der server-Seite (ich denke, Sie könnte immer noch die gleichen-code für Ihre app, wenn Sie absolut müssen), zählen die
google-api-services-androidpublisher
- client-Bibliothek zu Ihrem Projekt (siehe https://developers.google.com/api-client-library/java/apis/androidpublisher/v1)Als Sie erwähnt, Sie brauchen eine service-Konto mit einer P12-Datei (die client-Bibliothek akzeptieren nur P12-Datei).
Dann den folgenden code authentifizieren und bekommen Informationen zum Kauf schön:
Informationen über Java-client-Authentifizierung kann hier gefunden werden:
https://developers.google.com/identity/protocols/OAuth2ServiceAccount
InformationsquelleAutor der Antwort Christophe Fondacci
Ich missverstehen Ihre Frage, aber ich sehe keinen Grund, Sie über die links Sie verweisen, um In-App-Billing für eine Android-app arbeiten. Diese Seite ist viel hilfreicher:
http://developer.android.com/guide/google/play/billing/index.html
Können Sie versuchen, die demo-Anwendung, die Sie enthalten (Dungeons -- http://developer.android.com/guide/google/play/billing/billing_integrate.html#billing-download). Verwendet Produkte (one-time-Einkäufe), sondern als Abonnements, aber Sie sollten in der Lage sein, zu ändern, zu testen, was Sie wollen.
Ich denke, der Schlüssel, für Sie, wäre die restoreTransactions Methode, die Sie in die Probe, um zu sehen, wenn die Google-Play-Konto hat alle Abonnements für Ihre app:
InformationsquelleAutor der Antwort Allison
Als Sie ein web-Dienst, kann die app aufrufen, ich würde empfehlen, speichern Sie Ihre privaten Schlüssel sicher auf Ihren server. Sie sollten schauen, um zu bewegen, wie viel der in-app-Zeug um service-Aufrufe, wie möglich, sehen dieser link. Ich habe implementiert, die in-app-Abo, aber es war, bevor dieser Teil der API wurde. Ich hatte zu tun, meinen eigenen Anmeldung und Sicherheitsüberprüfung, aber es sieht aus wie diese API ist die meisten, dass für Sie, die Verwendung von OAuth, obwohl es sieht aus wie Sie sind immer noch verantwortlich für die Speicherung der Abonnement-Anforderung/überprüfung.
Wo es Gespräche über die Unterzeichnung Ihre JWT ' s mit einer vorhandenen Bibliothek, Sie scheinen zu bieten, die Sie mit links zu einer java-Bibliothek, eine Python-Bibliothek und eine PHP-Bibliothek - es hängt davon ab, was Ihre web-Dienst oder server-Komponente geschrieben wird (bei mir ist C#, so dass ich mit RSACryptoServiceProvider), um zu überprüfen, unterzeichnet Einkäufe. Sie sind in der JSON-Objekte für die eigentliche übertragung der Daten.
InformationsquelleAutor der Antwort John J Smith
Wenn jemand Probleme mit der akzeptierten Beiträge Letzte Schritt (#7) fand ich
?access_token=
zu arbeiten, anstatt von?accessToken=
Schade stack-überlauf wird nicht lassen Sie mich diesen Kommentar direkt zu dem thread...
InformationsquelleAutor der Antwort Butch128