2015-12-03 7 views
15

Wir haben Probleme, den Belegüberprüfungsablauf in iOS vollständig zu verstehen. HierGrundlegendes zu Bestätigung und Empfang von Belegüberprüfungen in iOS

ist das, was wir derzeit tun (in Entwicklung):

In applicationDidFinishLaunching und in applicationWillEnterForeground bestätigen wir den Empfang auf der Serverseite, wenn kein Empfang ist oder der Empfang ist ungültig, wir versuchen, den Empfang zu aktualisieren und validiere es erneut.

Hier sind einige Fragen/Fragen:

  1. Was die Fälle, in denen es keine Quittung auf dem Gerät verfügbar ist?

  2. Sollten wir immer eine Quittungsaktualisierungsanfrage ausgeben, wenn keine Quittung vorliegt?

  3. Warum wird diese Alarmbox manchmal beim Start angezeigt? Ich verstehe, dass dies bei einer Quittungsaktualisierungsanfrage angezeigt wird.

Sign in required?

  1. Wann sollte eine Empfangsüberprüfung passieren? Wir tun es derzeit, wenn ein Kauf gemacht wird, um den Kauf zu überprüfen, ist diese korrekte Verwendung?

Antwort

8
  1. In der Produktion eine Quittung ist auf dem Gerät immer zur Verfügung. Im Test nach gibt es die erste Installation nicht. Wenn Sie also einen korrekten Test durchführen möchten, müssen Sie einen Kauf wiederherstellen, auch wenn es keinen Kauf für diesen Benutzer in der Testumgebung gibt. Warum das? Die aus dem Appstore heruntergeladene App wird immer mit einer Quittung geliefert, auch wenn sie kostenlos ist.
  2. Hängt von der Geschäftslogik ab, die Sie anwenden möchten. Wenn Sie die Quittung jedes Mal gegen einen Server validieren, wenn Sie die App starten, benötigen Sie natürlich die Quittung. Wenn es nicht vorhanden ist (aber in der Produktion ist immer) oder nicht gültig, können Sie nach einer Aktualisierung oder Wiederherstellung fragen, aber soweit ich mich erinnere, sollten Sie immer zuerst den Benutzer fragen, ob er das tun möchte (kann ein Grund für Ablehnung). Wiederherstellen und Aktualisieren sind nicht dasselbe.
  3. Dies erscheint normalerweise in Kauf/Restor/Refresh. Aber auch wenn das Konto einige ausstehende Anfragen hat, weil die App abgestürzt ist oder Sie das Debugging unterbrochen haben, bevor die Anfrage irgendwie beendet wurde, werden Sie von einer Menge davon gelangweilt sein. Es gibt keine Möglichkeit, sie programmatisch zu leeren, loggen Sie sich einfach ein, bis sie aufhören. Natürlich wird es kein gültiger Test sein.
  4. Es liegt an Ihnen und über die Art des Kaufs. Wenn es sich um ein automatisch aktualisierbares Abonnement handelt, können Sie den Beleg für einen Server validieren, das Enddatum auf dem Client speichern und nach Ablauf des Datums erneut prüfen. Achten Sie darauf, dass Belege ziemlich groß sein können, weil sie auch alle historischen Werte haben.
+1

Ich denke, das ist eine ziemlich solide Antwort, danke. Also, wenn wir nicht so streng sind, um den Empfang beim Start zu überprüfen, wäre nach jedem Kauf ein guter Punkt, um es zu tun? Wir wollen auch nicht auf Punkt 2 eingehen.) Sie haben erwähnt. So würde der Ablauf sein: 1) Benutzer kauft Abonnement. 2) Überprüfen Sie den Empfang 3) Überprüfung erfolgreich: Planen Sie eine lokale Benachrichtigung für das Ablaufdatum (Ist dies eine sichere Methode?). 4) Bestätigung des Ablaufs des Empfangsablaufs -> Revalidate oder Lock Premium Features. Scheint das ein guter Weg, damit umzugehen? –

+1

Ich bin wirklich abhängig von der Art des Kaufs. Wenn es kein Abonnement ist, klingt eine Validierung direkt nach dem Kauf für mich ok. Wenn es sich um eine Subskription handelt, müssen Sie das Ende der Subskription kennen, daher ist der Fluss, den Sie angegeben haben, bis auf die lokale Benachrichtigung in Ordnung. Nehmen wir an, Sie kaufen ein monatliches Abonnement mit automatischer Verlängerung, jeden Monat, wenn der Benutzer den automatischen Verlängerungsmechanismus nicht beendet, wird das Abonnement automatisch erneuert. Ich habe versucht zu verstehen, wenn dies ohne Erfolg passiert, wahrscheinlich wenige Tage vor dem tatsächlichen Ablaufdatum. – Andrea

+0

Automatisch bedeutet, dass Sie nichts tun müssen. Ich würde lokal (Keychain) den Ablauftag speichern, wenn ich in der Nähe dieses Datums bin, würde ich die Quittung erneut zur Validierung senden, bis sie abgelaufen oder aktualisiert ist. Wenn die Validierung einen neuen Monat sieht, aktualisiere ich das Datum, wenn der Beleg abgelaufen ist, würde ich eine Warnung wie "Ihr Abonnement scheint abgelaufen zu sein $ Enddatum $ möchten Sie eine Aktualisierung versuchen" präsentieren? Sie können die Quittung beliebig oft an Ihren Validierungsserver senden, ohne den Benutzer zu fragen, aber Sie können die Quittung nicht aktualisieren oder wiederherstellen, ohne den Benutzer zu fragen. – Andrea

0

1.Kein Kauf/Wiederherstellung fand statt.
2.Nope.See 1
4.Sure.For Verbrauchsmaterialien, denken Sie daran, Hash auf Ihrem Server zu speichern, um Wiederholung Angriff zu besiegen.

+0

Ich verstehe nicht wirklich hier. Der Validierungsbeleg prüft, ob es sich um eine gültige Transaktion handelt oder nicht, richtig? Nachdem der Transaktionszustand ".Purchased" lautet, rufe ich den Beleg an, um die Bestellung zu bestätigen. Und wenn die Quittung ungültig ist, markieren Sie diese Transaktion als Betrug, nicht wahr? – TomSawyer

+0

@ TomSawyer Ja. –

2
  1. Wie Zhang erwähnt, wenn es keine Kauf oder stattfand restore, wird es keinen Eingang in den Laden sein
  2. den Empfang liegen. Wenn kein Beleg gefunden wird, schlägt die Validierung fehl und Sie sollten die Aktualisierung des Belegs nicht erneut anfordern. Nur wenn Sie den Prozess selbst wiederherstellen, sollten Sie den Empfang erneut anfordern.
  3. Dies wird immer angezeigt, wenn Sie versuchen, die Quittung zu aktualisieren (oder Sie wählen aus Einstellungen, die Sie für 15 Minuten nicht nach einem Kennwort fragen möchten).
  4. Ja.

Weitere Informationen hier: https://www.objc.io/issues/17-security/receipt-validation/#about-validation