In meiner App möchte ich nicht erneuernde Abonnements implementieren. Ich habe (ich glaube richtig) meine Logik aufgebaut. Ich stelle den Beobachter in der AppDelegate und dann in der Klasse, die SKPaymentTransactionObserver
implementiert ich die folgende Funktion implementieren:Wiederherstellen unverarbeitete SKPaymentTransaction für nicht erneuernde Abonnement
func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) { }
Innerhalb dieser Methode, die ich Schleife durch die alle updatedTransactions
und ich prüfe jedes transactionState
und dementsprechend ich meine Logik implementieren .
Was ich stört, ist dies: wenn die Transaktion erfolgreich ist, ich habe unseren Server kontaktieren Profil des Benutzers zu aktualisieren und mehr Tage, um sein/ihr Abonnement hinzuzufügen. Dies bedeutet, dass ich SKPaymentQueue.default().finishTransaction(transaction)
nach anrufen muss Ich habe eine erfolgreiche Antwort von unseren Servern erhalten. Es besteht jedoch die Möglichkeit, dass etwas schief geht, sobald die Server von Apple die Transaktion abgeschlossen haben, bis unsere Server reagieren.
würde eine Verknüpfung, um die Transaktion zu markieren, wie sobald Apple-antwortet fertig, aber durch die Dokumentation zu lesen, ist es nicht korrekt zu sein scheint. Wie kann ich eine nicht verarbeitete Transaktion wiederherstellen? (falls unsere Server nicht antworten und die SKPaymentQueue.default().finishTransaction(transaction)
nicht angerufen wird).
Vielen Dank im Voraus.
Dank. Ich neu, dass die Logik geändert werden musste und Ihre Antwort es verifiziert hat. Was ich getan habe, war, die Kaufdetails als Schlüssel der Transaktions-ID beizubehalten, sobald ich eine Antwort von den Servern von Apple erhalte. Wenn etwas schief geht, prüft das nächste Mal, wenn der Beobachter aufgerufen wird, ob ein gespeicherter Kauf mit dieser Transaktions-ID als Schlüssel vorliegt. Wenn ja, dann mache ich den Anruf bei unseren Servern mit den gespeicherten Details und wenn ich eine erfolgreiche Antwort erhalte, rufe ich die Transaktion an und entferne die persistenten Kaufdetails. – TheoK