Эх сурвалжийг харах

Progress on restore purchases controller

Andrea Bizzotto 8 жил өмнө
parent
commit
d8f444cee1

+ 16 - 0
SwiftyStoreKit/PaymentQueueController.swift

@@ -92,6 +92,21 @@ public class PaymentQueueController: NSObject, SKPaymentTransactionObserver {
     // MARK: SKPaymentTransactionObserver
     public func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
         
+        /*
+        
+         The payment queue seems to process payments in-order, however any calls to restorePurchases can easily jump
+         ahead of the queue as the user flows for restorePurchases are simpler.
+         
+         SKPaymentQueue rejects multiple restorePurchases calls
+         
+         Having one payment queue observer for each request causes extra processing
+         
+         Can a failed translation ever belong to a restore purchases request?
+         No. restoreCompletedTransactionsFailedWithError is called instead.
+         
+         
+         
+        */
         var unhandledTransactions = paymentsController.processTransactions(transactions, on: paymentQueue)
         
         unhandledTransactions = restorePurchasesController.processTransactions(unhandledTransactions, on: paymentQueue)
@@ -129,6 +144,7 @@ public class PaymentQueueController: NSObject, SKPaymentTransactionObserver {
     
     public func paymentQueue(_ queue: SKPaymentQueue, restoreCompletedTransactionsFailedWithError error: Error) {
         
+        restorePurchasesController.restoreCompletedTransactionsFailed(withError: error)
     }
     
     public func paymentQueueRestoreCompletedTransactionsFinished(_ queue: SKPaymentQueue) {

+ 13 - 0
SwiftyStoreKit/Payments.swift

@@ -117,6 +117,19 @@ public class RestorePurchasesController: TransactionController {
     public var restorePurchases: RestorePurchases?
     
     public func processTransactions(_ transactions: [SKPaymentTransaction], on paymentQueue: PaymentQueue) -> [SKPaymentTransaction] {
+        
+        guard let restorePurchases = restorePurchases else {
+            return transactions
+        }
+        // TODO: process
         return []
     }
+    
+    public func restoreCompletedTransactionsFailed(withError error: Error) {
+
+        guard let restorePurchases = restorePurchases else {
+            return
+        }
+        restorePurchases.callback([.failed(error: error)])
+    }
 }