2012-10-29 2 views
5

Ich habe IAPs implementiert, bei denen es einen einmaligen Kauf gibt, der einige Funktionen in der App freischaltet. Da der Kauf nur einmal von jedem Nutzer getätigt wird, kann ich einfach den Apple IAP Service fragen, ob dieser Nutzer den Kauf getätigt hat. Wenn ja, entsperren Sie die Funktion. Wenn nicht, dann zeigen Sie die IAP-Eingabeaufforderung an. Ich habe wahrscheinlich auch ein "userDidMakePurchase" -Flag in Benutzerstandardeinstellungen als eine unvollkommene Lösung für die Verwendung der App ohne eine Netzwerkverbindung beibehalten.Datensätze von iOS In-App-Käufen verwalten

Jetzt möchte ich ein IAP implementieren, wo der Benutzer es immer und immer wieder machen kann. Jedes Mal erhält der Nutzer zehn Token, um eine In-App-Währung zu verwenden. Wie kann ich die Anzahl der Token bestimmen, die ein bestimmter Benutzer beim Starten der App hat?

Bis jetzt habe ich erwogen, eine Tokenzählung in den Benutzerstandardeinstellungen fortzusetzen. Dies hat einige Nachteile, wie das Löschen und Neuinstallieren der App, um das Token-Guthaben des Benutzers zu löschen. Auch Tokens werden nicht auf andere Geräte übertragen.

Natürlich könnte ich die Token-Zählungen auf meinem eigenen Server persistieren oder AWS verwenden. Ich möchte dies jedoch möglichst vermeiden. Ich bin nur mit IAP-Grundlagen vertraut, also behält Apple vielleicht alle Einkäufe im Auge, und ich kann es von dort aus herausfinden.

+0

"Natürlich könnte ich die Token-Zählungen auf meinem eigenen Server beibehalten oder AWS verwenden. Ich möchte dies jedoch, wenn möglich, vermeiden." Würden Sie erklären, warum Sie das vermeiden wollen? – khunshan

Antwort

8

Umstellung von "einmal kaufen, für immer verwenden" zu "kaufen viele Male, verwenden, solange es" macht Ihren Kauf Verbrauchsmaterial in Apples Terminologie. Da Apple den Zustand der Verbrauchsgüterkäufe für Sie nicht speichert, liegt die Aufgabe, den Verbrauch der Ressource zu verfolgen, in Ihrer Anwendung.

Im Allgemeinen gibt vier Orte, die Sie möglicherweise die verbleibende Zählung speichern verwenden:

------------------------------------------------------------------ 
|  Storage  | Offline? | Reinstall? | Encrypted? | Large? | 
------------------------------------------------------------------ 
| Documents Folder | YES |  NO  |  NO  | YES | 
| iCloud   |  NO |  YES |  NO  | YES | 
| User Defaults | YES |  NO  |  NO  | NO | 
| Keychain   | YES |  YES |  YES | NO | 
------------------------------------------------------------------ 

Da Sie sind Keychain eine winzige Menge an Daten, die idealen Kandidaten müssen speichern: es offline arbeitet, überlebt Neuinstallationen, und als zusätzlichen Bonus ist es auch verschlüsselt.

Obwohl es keine eingebauten in NS Wrapper um den Schlüsselbund CF APIs hat Apple freundlich published eine schöne Verpackung für sie (nach unten scrollen der Seite, um den Code zu sehen). Fügen Sie Ihrer Lösung ein Sicherheitsframework hinzu, kopieren Sie den Wrappercode in Ihr Projekt (es sind nur zwei Dateien). Jetzt können Sie Schlüsselbund verwenden, als wäre es ein NSDictionary.

+3

Vielen Dank für die Info! Der Keychain klingt in gewisser Weise vielversprechend. Ich bin mir jedoch nicht sicher, ob es das Problem mit mehreren Geräten löst. Schlüsselbunddaten werden nicht über Geräte hinweg synchronisiert, oder? – SundayMonday

+5

@SundayMonday Leider ist die gemeinsame Nutzung von Verbrauchsmaterialien auf Geräten eine äußerst knifflige Aufgabe, die (unter anderem) die Unterstützung von Transaktionsupdates erfordert. Apple erkennt indirekt an, dass es in den Richtlinien für In-App-Käufe kompliziert ist, Verbrauchsmaterialien von der Freigabe zu befreien: "Verbrauchsmaterialien sind die einzige Ausnahme von der Anforderung, dass Ihre Inhalte auf allen Geräten des Nutzers verfügbar sind. Verbrauchsmaterialien sind digitale Produkte Diese sind aufgebraucht oder verschwinden nach Gebrauch und können nie wieder verwendet werden." – dasblinkenlight

+2

@SundayMonday Wenn Sie die Freigabe implementieren müssen, müssten Sie höchstwahrscheinlich ein [Server-Produktmodell] verwenden (http://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/StoreKitGuide/APIOverview/ OverviewoftheStoreKitAPI.html), die sehr viel komplexer ist .. – dasblinkenlight

1

Ich bin mir ziemlich sicher, dass der iCloud-Schlüsselwertspeicher über die App-Lösch-/Neuinstallation hinweg bestehen bleibt. Das könnte der richtige Weg sein.

Sonst benötigen Sie Ihren eigenen Server, um die Token-Anzahl zu speichern, zusammen mit einer Möglichkeit, den Benutzer zu authentifizieren (Geräte-ID ist nicht gut, was, wenn sie das Gerät ersetzen und aus Backup wiederherstellen?) Und alle damit verbundenen Schwierigkeiten - Registrierung, Passwort vergessen Bildschirme, etc.