2017-02-16 5 views
0

Ich bin ein bisschen Neuling, aber habe mir ziemlich viel beigebracht, Code von Grund auf in den letzten drei Monaten zu programmieren (Danke youtube!). Entschuldigen Sie bitte, wenn ich einen offensichtlichen Fehler mache.iOS IAPs - Handhabung wiederherstellen, wenn kein vorheriger Kauf getätigt wurde

Meine App ist so ziemlich fertig, aber ich habe einen Fehler, den ich nicht finden kann, um eine Lösung für online zu finden.

Im Wesentlichen funktioniert mein IAP-Prozess ordnungsgemäß, ebenso wie die Wiederherstellungsfunktion die meiste Zeit. Ich habe jedoch einen Fehler gefunden, wenn ein Benutzer die Wiederherstellungsschaltfläche drückt, aber noch keine nicht konsumierbaren In-App-Käufe getätigt hat. Meine App bleibt einfach im Status 'Wiederherstellen' mit einem Spinner und Interaktions-Ereignissen ignoriert.

Ich bin nicht sicher, wo der Code zum Abbrechen des Drehfelds und zum Ignorieren von Interaktionsereignissen in einer Situation platziert werden soll, in der die paymentQueue anscheinend keine wiederhergestellten Transaktionen zurückgibt.

Ich habe versucht, dies für die folgenden unter .default zu platzieren:

func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) { 
    for transaction in transactions { 
     switch transaction.transactionState 

aber es scheint nicht, nicht zu funktionieren.

Hat jemand schon einmal auf dieses Problem gestoßen und hat Vorschläge, wie man mit dieser Situation umgehen soll?

Grüße, Gavin

Antwort

0

Wenn Sie die Wiederherstellung initiieren, wird der Beobachter Methode paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) mit den zuvor erworbenen Transaktionen genannt. Wenn keine Einkäufe getätigt wurden, wird diese Methode nicht aufgerufen.

Sobald die Wiederherstellung der Einkäufe abgeschlossen ist, wird die Beobachtermethode paymentQueueRestoreCompletedTransactionsFinished(_:) aufgerufen. Dies ist die Methode, bei der Sie Ihre Benutzeroberfläche aktualisieren sollten, um anzugeben, dass die Wiederherstellung abgeschlossen ist. verstecken Sie den Spinner etc.

+0

Oh wow! haha, ich habe sogar diese Funktion in meinem Code, aber es hat einfach nichts getan. Sinn macht jedoch, wenn ich meine UI-Update-Funktionen (entfernen Spinner etc ...) aus der 'paymentQueue (_ queue: SKPaymentQueue, updatedTransactions ...' Funktion auf die 'paymentQueueRestoreCompletedTransactionsFinished (_ :)' die Benutzeroberfläche jetzt nicht für beide Fälle aktualisiert: 1) Der Benutzer hat zuvor einen nicht konsumierbaren IAP-Kauf getätigt oder 2) Der Benutzer hat noch nie einen IAP-Kauf getätigt ... Was fehlt mir ?! –

+0

Versenden Sie Ihre UI-Updates in der Hauptwarteschlange? – Paulw11

+0

Paulw11, vielen Dank für Ihre schnellen Antworten! Okay, um die Wahrheit zu sagen bin ich mir nicht wirklich sicher ... aber ich bin nicht weiter gegangen und habe bewusst zusätzliche Warteschlangen erstellt, daher nehme ich an, dass die Wiederherstellung in der Hauptwarteschlange in der folgenden Funktion stattfindet: 'func paymentQueue (_ queue: SKPaymentQueue, updatedTransactions-Transaktionen: [SKPaymentTransaction]) '. Wir wissen, dass die Funktion ausgeführt wird, da wir in der Konsole über die Transaktion transaction.transactionState ... case SKPaymentTransactionState.restored Funktion ausgegeben werden.

Verwandte Themen