Eine vollständige Lösung zur LOKALEN Validierung von In-App-Quittungen und Bündelung von Belegen auf iOS 7
Ich habe viel gelesen von Dokumentation und code, der in der Theorie überprüft, ob eine in-app und/oder bundle-Eingang.
Gegeben, dass meine Kenntnisse von SSL, Zertifikate, Verschlüsselung, etc., ist fast null, alle Erklärungen, die ich gelesen habe, wie diese vielversprechend ist, die ich gefunden habe, schwer zu verstehen.
Sie sagen, die Erklärungen sind unvollständig, da jede person muss selbst herausfinden, wie es zu tun, oder die Hacker haben einen einfachen job erstellen einer cracker-app können erkennen und zu identifizieren, Muster und patch-Anwendung. OK, ich Stimme mit diesem, bis zu einem bestimmten Punkt. Ich denke, Sie könnte erklären, ganz wie es zu tun und setzen eine Warnung sagen: "ändern Sie diesen Methode", "ändern Sie diesen anderen Methode", "verschleiern diese variable", "ändern Sie den Namen von diesem und jenem", etc.
Können einige gute Seele gibt, werden freundlich genug, zu erklären, wie LOKAL überprüfen, bündeln Sie Einnahmen und in-app-Kauf die Quittungen auf iOS 7 wie ich bin fünf Jahre alt (ok, machen Sie es 3), von oben nach unten, klar?
Dank!!!
Wenn Sie eine version der Arbeit auf Ihre apps und Ihre Bedenken sind, dass Hacker werden sehen, wie Sie es getan haben, ändern Sie einfach Ihre sensiblen Methoden, die vor der Veröffentlichung hier. Verschleiern Saiten, ändern Sie die Reihenfolge der Zeilen ändern Sie die Art, die Sie do-Schleifen (von mit für zu-block-enumeration und vice-versa) und Dinge wie, dass. Natürlich, jede person, verwendet der code, der hier veröffentlicht werden, hat damit zu tun, die gleiche Sache, nicht zu riskieren, die leicht gehackt.
InformationsquelleAutor der Frage SpaceDog | 2013-11-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist eine Anleitung, wie ich das Problem gelöst in meiner in-app-Kauf der Bibliothek RMStore. Ich werde erklären, wie Sie überprüfen, eine Transaktion, die gehört die überprüfung der gesamten Empfang.
Auf einen Blick
Bekommen Sie die Quittung, und überprüfen Sie die Transaktion. Wenn dies nicht funktioniert, aktualisieren Sie den Eingang und versuchen Sie es erneut. Dies macht die überprüfung der asynchronen wie erfrischend, der Eingang ist asynchron.
Vom RMStoreAppReceiptVerifier:
Immer den Empfang der Daten
Eingang ist in
[[NSBundle mainBundle] appStoreReceiptURL]
und ist eigentlich ein PCKS7 container. Ich sauge auf die Kryptographie, so habe ich OpenSSL zum öffnen dieser container. Andere scheinbar haben es getan, rein mit system-frameworks.Hinzufügen von OpenSSL zu Ihrem Projekt ist nicht trivial. Die RMStore wiki sollte helfen.
Wenn Sie sich entscheiden, verwenden Sie OpenSSL, um öffnen Sie die PKCS7-container, könnte der code wie folgt Aussehen. Von RMAppReceipt:
Bekommen wir in die details der überprüfung später.
Immer die Quittung Felder
Eingang ist ausgedrückt im ASN1-format. Es enthält Allgemeine Informationen, einige Felder, die für die Zwecke der überprüfung (wir kommen später) und spezifische Informationen der jeweiligen in-app-Kauf.
Wieder, OpenSSL kommt zur Rettung, wenn es um das Lesen ASN1. Von RMAppReceipt, mit ein paar helper Methoden:
Immer die in-app-Käufe
Jedem in-app-Kauf ist auch im ASN1. Analyse es ist sehr ähnlich wie das Parsen der Allgemeinen Erhalt von Informationen.
Vom RMAppReceipt, mit der gleichen Hilfsmethoden:
Es sollte beachtet werden, dass bestimmte in-app-Käufe, wie Verbrauchsmaterialien und nicht-erneuerbaren Abonnements, erscheint nur einmal in den Eingang. Sie sollten überprüfen, diese direkt nach dem Kauf (mal wieder, RMStore hilft Ihnen dabei).
Überprüfung auf einen Blick
Wir haben jetzt alle Felder der Eingang und alle Ihre in-app-Käufe. Zuerst überprüfen wir die Quittung, und dann prüfen wir einfach, ob der Eingang enthält das Produkt der Transaktion.
Unten ist die Methode, die wir riefen wieder am Anfang. Von RMStoreAppReceiptVerificator:
Überprüfung der Empfang
Überprüfen der Quittung hinausläuft:
Die 5 Schritte im code auf einem hohen Niveau, von RMStoreAppReceiptVerificator:
Let ' s drill-down in die Schritte 2 und 5.
Überprüfen der Erhalt Signatur
Zurück, wenn wir die Daten extrahiert, wir blickten über den Eingang Verifizierung der Signatur. Der Empfang ist unterzeichnet mit der Apple Inc. Root-Zertifikat, welches heruntergeladen werden kann Apple Root-Zertifizierungsstelle. Der folgende code nimmt die PKCS7-container und das root-Zertifikat als Daten und überprüft, ob Sie übereinstimmen:
Dies wurde getan, zurück an den Anfang, vor dem Eingang analysiert.
Überprüfung der Empfang hash
Den hash enthalten in der Quittung ist ein SHA1-Hash der Geräte-id, einige undurchsichtige Wert enthalten in den Erhalt und die bundle-id.
Dies ist, wie Sie prüfen, ob der Erhalt hash auf iOS. Von RMAppReceipt:
- Und das ist der Kern von ihm. Ich könnte hier etwas fehlt, oder dort, so dass ich vielleicht kommen Sie zurück zu diesem post später. In jedem Fall empfehle ich, durchsuchen Sie den vollständigen code für mehr details.
InformationsquelleAutor der Antwort hpique
Ich bin überrascht, niemand erwähnt Receigen hier. Es ist ein Werkzeug, das automatisch generiert verborgenen Eingang Validierungs-code, einem anderen ein jedes mal; es unterstützt sowohl GUI und Befehlszeilen-operation. Sehr zu empfehlen.
(Nicht in Verbindung mit Receigen, nur ein glücklicher Benutzer.)
Benutze ich ein Rakefile, wie diese automatisch erneut Receigen (weil es getan werden muss, um bei jeder version ändern) geben, wenn ich
rake receigen
:InformationsquelleAutor der Antwort Andrey Tarantsov
Hallo Dies ist Swift 3 - version für die Validierung von in-app-Kauf Quittung...
Call
receiptValidation()
Funktion von IhremAppDelegate
oder von wo Sie wollen.Nun haben Wir eine weitere Funktion ein Datum aus dem Eingang
expirationDateFromResponse()
. Diese Funktion würde in dem gleichen controller oder in derAppDelegate
Nun haben wir noch eine Funktion für das abrufen lokale Datum und Zeit, wenn es ist erforderlich für Sie.
Account tab
Do Sign in
Open iTune Connect
Open My App
Open Feature Tab
Open In App Purchase
Click at the right side on 'View Shared Secret'
At the bottom you will get a secrete key
Hoffen, dass dies für jeden auf, der will, dass in der swift-version.
InformationsquelleAutor der Antwort APK APPS