浏览代码

Add ShouldAddStorePaymentHandler to PaymentQueueController and make it available through SwiftyStoreKit class

Andrea Bizzotto 8 年之前
父节点
当前提交
7e1900805f

+ 6 - 0
SwiftyStoreKit/PaymentQueueController.swift

@@ -142,6 +142,8 @@ class PaymentQueueController: NSObject, SKPaymentTransactionObserver {
         }
         paymentQueue.finishTransaction(skTransaction)
     }
+    
+    var shouldAddStorePaymentHandler: ShouldAddStorePaymentHandler?
 
     // MARK: SKPaymentTransactionObserver
     func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
@@ -202,4 +204,8 @@ class PaymentQueueController: NSObject, SKPaymentTransactionObserver {
 
     }
 
+    func paymentQueue(_ queue: SKPaymentQueue, shouldAddStorePayment payment: SKPayment, for product: SKProduct) -> Bool {
+        
+        return shouldAddStorePaymentHandler?(payment, product) ?? false
+    }
 }

+ 2 - 0
SwiftyStoreKit/SwiftyStoreKit+Types.swift

@@ -76,6 +76,8 @@ public struct RestoreResults {
     public let restoreFailedPurchases: [(SKError, String?)]
 }
 
+public typealias ShouldAddStorePaymentHandler = (_ payment: SKPayment, _ product: SKProduct) -> Bool
+
 // MARK: Receipt verification
 
 // Info for receipt returned by server

+ 10 - 1
SwiftyStoreKit/SwiftyStoreKit.swift

@@ -28,7 +28,7 @@ public class SwiftyStoreKit {
 
     private let productsInfoController: ProductsInfoController
 
-    private let paymentQueueController: PaymentQueueController
+    fileprivate let paymentQueueController: PaymentQueueController
 
     fileprivate let receiptVerificator: InAppReceiptVerificator
 
@@ -204,6 +204,15 @@ extension SwiftyStoreKit {
 
         sharedInstance.finishTransaction(transaction)
     }
+    
+    /**
+     * Register a handler for SKPaymentQueue.shouldAddStorePayment delegate method in iOS 11
+     */
+    public static var shouldAddStorePaymentHandler: ShouldAddStorePaymentHandler? {
+        didSet {
+            sharedInstance.paymentQueueController.shouldAddStorePaymentHandler = shouldAddStorePaymentHandler
+        }
+    }
 }
 
 extension SwiftyStoreKit {