Hat jemand Ideen zum Zurücksetzen und / oder Löschen der iOS-In-App-Kaufsandbox?
Ich habe eine App, die ich mit der Sandbox teste, und ich möchte neue Einkäufe testen, ohne jedes Mal, wenn ich etwas kaufe, einen neuen Testbenutzer erstellen zu müssen.
Wenn ich dies nicht tue, erhalte ich (natürlich) immer eine Nachricht, dass der In-App-Kaufartikel bereits gekauft wurde, wenn ich auf die Schaltfläche "Kaufen" meiner App klicke.
quelle
+
E-Mail-Adressen können nicht mehr zum Anmelden für Apple IDs verwendet werden.Soweit ich weiß, können Sie das nicht tun. Das Sandbox-Backend funktioniert wie ein echtes Konto - sobald es gekauft wurde, wird es gekauft (und somit können Sie die Wiederherstellung testen). Sie sollten den größten Teil Ihrer Entwicklung mit ausgeblendeten Store-Inhalten durchführen. Wenn Sie dann mit dem Testen beginnen, sollten Sie nur damit rechnen, mehrere Testkonten zu erstellen.
quelle
SKPaymentTransactionStateRestored
stattdessen aus dem App Store zurückkehrenSKPaymentTransactionStatePurchased
. Da Sie hier nicht in jeder Hinsicht echtes Geld verwenden,SKPaymentTransactionStateRestored
entspricht dies zu 100% denSKPaymentTransactionStatePurchased
Tests. Das Zurücksetzen Ihres App-Status auf "nicht gekauft" liegt ganz bei Ihnen (löschen Sie einfach den entsprechenden Schlüsselbund-Eintrag oder was auch immer Sie verwenden, um das "vom Benutzer gekaufte X" zwischenzuspeichern)Ich habe 2 in App Kaufartikel. 1 für die Produktion. und der andere zum Testen. Wenn ich "löschen" muss, lösche ich das In-App-Element und erstelle ein neues (15 Sekunden in iTunes Connect und 1 Sekunde, um die Produkt-ID im Code zu ändern).
Wenn ich "neuer Benutzer" nicht testen muss, verwende ich die Produktion im App-Element.
quelle
Technisch gesehen brauchen Sie das nicht.
Wenn Sie erhalten
SKPaymentTransactionStateRestored
, entspricht dies zu 100% dem App Store, der den Benutzer überprüft und ihm den Kauf gewährt. Ich habe einen Schalter wie:Die Frage, ob Ihre App logisch ist oder den Kauf zurücknimmt, ist einfach: Wenn Sie Einkäufe im Schlüsselbund zwischenspeichern, löschen Sie Ihren Schlüsselbund. Wenn Sie es anders machen, ändern Sie einfach Ihren lokalen App-Status, um so zu tun, als hätte der Benutzer ihn noch nie zuvor gekauft. Der Kaufanforderungsdialog ist immer noch genau derselbe. Der einzige Unterschied besteht darin, dass Sie beim Drücken von JA
SKPaymentTransactionStateRestored
stattdessen stattSKPaymentTransactionStatePurchased
.quelle
Das Löschen Ihrer App und die Neuinstallation funktionieren auch für Sandbox-Tests. Hängt natürlich von der App ab, aber ich teste eine abonnementbasierte App, die im Moment nur während der Anmeldung gekauft wird, sodass dies die einfachste Lösung ist.
quelle
Schauen Sie sich SimStoreKit an . Es handelt sich um eine "simulierte Version des StoreKit des iPhones zum Testen von Store-Benutzeroberflächen auf dem iPhone Simulator oder sogar auf einem Gerät, ohne dass IAP in Connect eingerichtet werden muss."
SimStoreKit speichert Einkäufe in den Standardeinstellungen des Benutzers unter dem Schlüssel
ILSimSKTransactions
. So löschen Sie alle Einkäufe:Auf dem Simulator können Sie einfach Ihre App entfernen und erneut installieren.
Ich habe SimStoreKit erfolgreich zum Debuggen der Store-Front meiner App verwendet, bevor ich mit der Sandbox getestet habe. Das Schöne an dieser Bibliothek ist, dass sie so eingerichtet werden kann, dass dieselben Klassennamen wie das echte StoreKit-Framework verwendet werden (indem Sie dies
#define ILSimReplaceRealStoreKit 1
vorher tun)#include <ILSimStoreKit.h>
).In Quelldateien, in denen ich auf StoreKit zugreifen muss, füge ich diese Header-Datei hinzu:
Dies hat den Effekt, dass SimStoreKit verwendet wird, wenn ich auf dem Simulator ausgeführt werde, und das echte StoreKit, wenn ich auf dem Gerät ausgeführt werde.
quelle
Nicht wirklich eine Antwort, aber Hilfe beim Erklären.
Dachte, da die Datei heruntergeladen werden musste, könnte sie vielleicht gelöscht werden. Einfache Funktion unten versucht das (Swift 3.0):
Folgende Antwort erhalten:
Empfangs-URL: Datei: /// privat / var / mobil / Container / Daten / Anwendung / 7A2-App-bezogene-Nummer-67 / StoreKit / sandboxReceipt
FEHLER: "sandboxReceipt" konnte nicht entfernt werden, da Sie keine Zugriffsberechtigung haben.
Obwohl der Code anzeigt, dass er die Quittung aus dem App-Bundle zieht, hatte er gedacht, dass die Quittung statisch ist und die Quittung daher möglicherweise immer noch löschbar ist. Ich bin mir sicher, dass es Sicherheitsgründe gibt, warum dies alles so funktioniert. Daher musste die App gelöscht werden, um den Fall, dass keine Quittung auf eine neu heruntergeladene Quittung heruntergeladen wurde, (erneut) zu testen.
quelle
Alternativ können Sie zum Erstellen mehrerer Testbenutzerlösungen mehrere Tests bei App-Käufen in iTunes Connect erstellen, ohne ein Benutzerkonto ändern zu müssen.
quelle
Verwenden Sie einfach weiterhin dasselbe Testkonto und stellen Sie Einkäufe wieder her, anstatt neue abzuschließen. Unabhängig davon, ob Sie einen neuen Kauf tätigen oder einen alten wiederherstellen, wird IHRE APP dasselbe tun (zumindest anfangs wird die Benutzeroberfläche nach Abschluss möglicherweise anders aktualisiert). Apple sind die Leute, die in diesen verschiedenen Situationen unterschiedlich mit Dingen umgehen - machen Sie sich keine Sorgen.
Platzieren Sie Ihre Übermittlungslogik im Fall SKPaymentTransactionStateRestored in der Implementierung dieser Methode zum Testen:
Stellen Sie dann sicher, dass Sie diese Übermittlungslogik in den Fall SKPaymentTransactionStatePurchased einfügen.
Am Ende, weil die meisten von uns in unterschiedlichem Maße zwanghaft sind, machen Sie einen abschließenden Test mit einem neuen Konto (keine große Sache, um einen zweiten für absolute Sicherheit zu machen).
Das Letzte, was zu beachten ist: Betrachten Sie die Position des Apfels. Wenn es ein Problem gegeben hätte, bei dem Entwickler Zeit damit verschwenden müssten, Dutzende oder Hunderte von Konten zu erstellen, um IAP gründlich zu testen, hätten sie das Problem gelöst. Es gibt kein Problem.
quelle