29 Stimmen

IPhone - In-App-Kauf verbrauchbarer korrekter Ansatz

Ich habe diese neue App, die ich erstelle, die verbrauchbare In-App-Käufe verwenden wird.

Meine Frage ist folgende: Wie funktioniert das? Ich meine, stell dir vor, der Benutzer kauft etwas Verbrauchbares. Also, nach Abschluss des Verkaufs setze ich eine Flagge in der App-Datenbank, die die Verwendung dieses Objekts autorisiert. Ich habe irgendwo gelesen, dass ich dem Benutzer eine Schaltfläche zum Wiederherstellen alter Transaktionen zur Verfügung stellen muss, falls der Benutzer aus irgendeinem Grund sein Gerät verliert und alles wiederherstellen muss.

Stell dir vor, der Benutzer hat diesen Kauf bereits genutzt und nachdem er die alten In-App-Käufe wiederhergestellt hat. Was passiert dann? Hat der Benutzer wieder die gleichen Ressourcen, sodass er sie ein zweites Mal ohne Bezahlung nutzen kann? Wie funktioniert das und wie sollte ich damit umgehen?

Danke

68voto

user1139733 Punkte 976

Ich wollte eine etwas unkonventionelle Lösung teilen, die ich für dieses Problem gefunden habe und den ENORMEN Vorteil hat, keinen Server zu benötigen. Diese Methode ermöglicht es Benutzern, ihre verbrauchbaren Gegenstände wiederherzustellen, wenn die App gelöscht und neu installiert wird, erlaubt es ihnen aber nicht, die Gegenstände auf ein neues Gerät zu übertragen (es sei denn, alle ihre App-Daten werden kopiert).

Daten, die im Schlüsselbund gespeichert sind, bleiben erhalten, wenn eine App gelöscht und neu installiert wird. Der Schlüsselbund ist dazu gedacht, Benutzernamen und Passwörter zu speichern, aber man kann auch Informationen über verbrauchbare Käufe dort speichern. Ich habe die KeychainItemWrapper-Klasse verwendet, die hier verfügbar ist: https://developer.apple.com/library/content/samplecode/GenericKeychain/Introduction/Intro.html

Hier ist ein Beispielcode, bei dem ich die Anzahl der verbleibenden kostenpflichtigen Hinweise eines Benutzers speichere und abrufe:

//Speichern der verbrauchbaren Hinweis-Elementanzahl
int verbleibendeHinweise = 100;
KeychainItemWrapper *wrapper = [[KeychainItemWrapper alloc] initWithIdentifier="Hints" accessGroup:nil];
NSString *hinweisString = [NSString stringWithFormat:@"%i",verbleibendeHinweise];
[wrapper setObject:hinweisString forKey:(id)kSecValueData];
[wrapper release];

//Abruf
KeychainItemWrapper *wrapper = [[KeychainItemWrapper alloc] initWithIdentifier="Hints" accessGroup:nil];
NSString *numHints = [wrapper objectForKey:(id)kSecValueData];
[wrapper release];
int abgerufeneHinweise = [numHints intValue];

Notizen:

  • Der Schlüssel (id)kSecValueData kann kein beliebiger String sein, es gibt eine festgelegte Liste von Konstanten, die Sie als Schlüssel verwenden können.

  • Sie müssen das Security Framework hinzufügen

29voto

marcus Punkte 2501

StoreKit bietet nur Wiederherstellungsfunktionen für nicht verbrauchbare Artikel (und in gewissem Maße für Abonnements). Daher werden bei verbrauchbaren Produkten durch die Verwendung von restoreCompletedTransactions keine Transaktionen in Ihrem Fall übermittelt. Die Verarbeitung von Wiederherstellungsinformationen über verbrauchbare Produkte muss in Ihrer App und/oder auf Ihrem Server erfolgen.

Zur Referenz der verschiedenen Produktarten siehe den In-App Purchase Programming Guide: Entwerfen der Produkte Ihrer App. Es gibt verbrauchbare Produkte, die jedes Mal gekauft werden müssen, nicht verbrauchbare Produkte, die nur einmal gekauft und auf allen Geräten bereitgestellt werden, die mit dem iTunes-Konto dieses Benutzers verknüpft sind, automatisch erneuerbare Abonnements und nicht erneuerbare Abonnements.

5voto

Für Personen, die hierher kommen, um nach dem Weg zu suchen, um verbrauchbare Artikel lokal in iOS zu speichern, schauen Sie sich PDKeychainBindingsController an (https://github.com/carlbrown/PDKeychainBindingsController).

Es funktioniert wie NSUserDefaults und kann verwendet werden, um die Anzahl der gekauften verbrauchbaren Artikel im Schlüsselbund des iDevices zu speichern (die im Schlüsselbund gespeicherten Artikel werden nicht entfernt, wenn die App gelöscht wird.).

Verwenden Sie den Code etwas Ähnliches wie unten, um den Wert aus dem Schlüsselbund zu speichern und abzurufen:

- (NSUInteger)hintCount {
    PDKeychainBindings *wrapper=[PDKeychainBindings sharedKeychainBindings];
    NSString *valueString = [wrapper objectForKey:@"hintCount"];
    int value = [valueString intValue];
    return value;
}

- (void)setHintCount:(NSUInteger)starCount {
    PDKeychainBindings *wrapper=[PDKeychainBindings sharedKeychainBindings];
    NSString *valueString = [NSString stringWithFormat:@"%i",starCount];
    [wrapper setObject:valueString forKey:@"hintCount"];
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X