Ver código fonte

Merge pull request #652 from azouts/master

Communicate deferred transactions to the app
Sam Spencer 3 anos atrás
pai
commit
b3f2601196

+ 1 - 0
Sources/SwiftyStoreKit/PaymentQueueController.swift

@@ -38,6 +38,7 @@ protocol TransactionController {
 public enum TransactionResult {
     case purchased(purchase: PurchaseDetails)
     case restored(purchase: Purchase)
+    case deferred(purchase: PurchaseDetails)
     case failed(error: SKError)
 }
 

+ 9 - 0
Sources/SwiftyStoreKit/PaymentsController.swift

@@ -127,6 +127,15 @@ class PaymentsController: TransactionController {
             return true
         }
 
+        if transactionState == .deferred {
+            let purchase = PurchaseDetails(productId: transactionProductIdentifier, quantity: transaction.payment.quantity, product: payment.product, transaction: transaction, originalTransaction: transaction.original, needsFinishTransaction: !payment.atomically)
+
+            payment.callback(.deferred(purchase: purchase))
+
+            payments.remove(at: paymentIndex)
+            return true
+        }
+
         return false
     }
 

+ 1 - 0
Sources/SwiftyStoreKit/SwiftyStoreKit+Types.swift

@@ -128,6 +128,7 @@ public struct RetrieveResults {
 /// Purchase result
 public enum PurchaseResult {
     case success(purchase: PurchaseDetails)
+    case deferred(purchase: PurchaseDetails)
     case error(error: SKError)
 }
 

+ 5 - 0
Sources/SwiftyStoreKit/SwiftyStoreKit.swift

@@ -99,6 +99,8 @@ public class SwiftyStoreKit {
         switch result {
         case .purchased(let purchase):
             return .success(purchase: purchase)
+        case .deferred(let purchase):
+            return .deferred(purchase: purchase)
         case .failed(let error):
             return .error(error: error)
         case .restored(let purchase):
@@ -114,6 +116,9 @@ public class SwiftyStoreKit {
             case .purchased(let purchase):
                 let error = storeInternalError(description: "Cannot purchase product \(purchase.productId) from restore purchases path")
                 restoreFailedPurchases.append((error, purchase.productId))
+            case .deferred(let purchase):
+                let error = storeInternalError(description: "Cannot purchase product \(purchase.productId) from restore purchases path")
+                restoreFailedPurchases.append((error, purchase.productId))
             case .failed(let error):
                 restoreFailedPurchases.append((error, nil))
             case .restored(let purchase):