Kauf nicht konsumierbarer Produkte in Xamarin.iOS
Nicht konsumierbare Produkte befinden sich im Besitz des Kunden. Die Erwartung ist, dass sie immer Zugriff auf sie haben werden, auch wenn ihr Gerät verloren geht/gestohlen wird oder sie eine neue kaufen. Sie sind nützlich für Bücher, Magazinprobleme, Spiellevels, Fotofilter, "Pro-Features" usw. Sobald ein Benutzer ein nicht konsumierbares Produkt erworben hat, muss er es nie wieder bezahlen. Wenn Ihr Code versehentlich den Versuch ermöglicht, zeigt StoreKit eine Meldung an, dass er bereits erworben wurde.
Beispiel für Nicht-Verbrauchsprodukte
Das Beispiel enthält ein Projekt namens "NonConsumables". Das Codebeispiel veranschaulicht, wie Nicht-Verbrauchsprodukte mithilfe von Fotofiltern als Beispiel implementiert werden. Nachdem Sie einen Filter erworben haben, können Sie ihn auf das Foto immer wieder anwenden. Sie müssen es nie erneut kaufen.
Der Kaufvorgang wird in dieser Reihe von Screenshots angezeigt – die Schaltfläche "Kaufen " wird zur Schaltfläche "Featureaktivierung":
Der Einkaufsvorgang ist identisch mit einem Verbrauchsprodukt; Der hauptunterschied besteht darin, wie der Kauf im Anwendungscode nachverfolgt wird. In diesem Beispiel ist die Schaltfläche "Kaufen" nur verfügbar, wenn das Produkt noch nicht gekauft wurde, andernfalls aktiviert die Schaltfläche das Feature selbst.
Das folgende Diagramm zeigt die Interaktionen zwischen Klassen und dem App Store-Server zum Ausführen eines Nicht-Verbrauchsproduktkaufs:
Der Hauptunterschied zum Beispiel "Verbrauchsartikel" besteht darin, dass nach Abschluss des Kaufs die Benutzeroberfläche aktualisiert wird, um den Erneutkauf zu verhindern. In diesem Beispiel aktualisiert die Benachrichtigung einer erfolgreichen Transaktion die Benutzeroberfläche, sodass die Schaltfläche "Kaufen " in eine Schaltfläche konvertiert wird, die das Feature selbst aktiviert.
Wiedereinkauf nicht konsumierbarer Produkte
Ihr Code sollte eine Kaufschaltfläche normalerweise ausblenden oder erneut verwenden, nachdem das Produkt erfolgreich erworben wurde, um zu verhindern, dass der Benutzer erneut versucht, das Produkt zu kaufen. Die Beispielanwendung bewirkt dies, indem Sie die Schaltfläche "Kaufen " in die Schaltfläche ändern, mit der der Beispielfotofilter funktioniert.
Es gibt Situationen, in denen eine Anwendung nicht erkennen kann, ob bereits ein nicht konsumierbares Produkt erworben wurde:
- Wenn eine Anwendung gelöscht und auf einem Gerät erneut installiert wird, sind alle Kaufdatensätze nicht mehr vorhanden (es sei denn, der Benutzer führt eine Sicherung wiederherzustellen).
- Wenn der Benutzer die Anwendung auf zwei (oder mehr) Geräten installiert hat und auf einem der Geräte einen Kauf tätigen kann. Die anderen Geräte zeigen weiterhin das zum Kauf verfügbare Produkt an.
- Wenn ein Kunde versucht, in diesen Situationen ein nicht konsumierbares Produkt erneut zu kaufen, erfüllt der App Store das Produkt erneut ohne Gebühr. Die Benutzeroberfläche wird zunächst angezeigt, um einen Kauf durchzuführen (z. B. wird eine Bestätigungswarnung angezeigt, und die Apple-ID ist erforderlich), aber der Benutzer wird dann eine Meldung angezeigt, in der er darauf hinweist, dass das Produkt bereits erworben wurde.
Der Codepfad in diesem Szenario entspricht genau dem regulären Kauf, die einzigen Unterschiede sind:
- Der Benutzer wird für das Produkt nicht erneut belastet.
- Das
SKPaymentTransaction
an die Anwendung übergebene Objekt verfügt über eineOriginalTransaction
Eigenschaft, die auf die Transaktion verweist, die beim erstmaligen Kauf des Produkts generiert wurde. - Anwendungen, die Nicht-Verbrauchsartikel verkaufen, müssen auch das Wiederherstellungsfeature von StoreKit implementieren, um Benutzern beim Abrufen vorhandener Einkäufe zu helfen.