Browse Source

Access downloads array from transaction.

This enables downloads in all purchase paths (completeTransactions, purchaseProduct, restorePurchases)
Andrea Bizzotto 7 years ago
parent
commit
49bd0dd0c3

+ 4 - 1
SwiftyStoreKit-iOS-Demo/AppDelegate.swift

@@ -52,7 +52,10 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
             for purchase in purchases {
                 switch purchase.transaction.transactionState {
                 case .purchased, .restored:
-                    if purchase.needsFinishTransaction {
+                    let downloads = purchase.transaction.downloads
+                    if !downloads.isEmpty {
+                        SwiftyStoreKit.start(downloads)
+                    } else if purchase.needsFinishTransaction {
                         // Deliver content from server, then:
                         SwiftyStoreKit.finishTransaction(purchase.transaction)
                     }

+ 11 - 5
SwiftyStoreKit-iOS-Demo/ViewController.swift

@@ -132,7 +132,8 @@ class ViewController: UIViewController {
         SwiftyStoreKit.purchaseProduct(appBundleId + "." + purchase.rawValue, atomically: atomically) { result in
             NetworkActivityIndicatorManager.networkOperationFinished()
 
-            if case .success(let purchase, let downloads) = result {
+            if case .success(let purchase) = result {
+                let downloads = purchase.transaction.downloads
                 if !downloads.isEmpty {
                     SwiftyStoreKit.start(downloads)
                 }
@@ -153,9 +154,14 @@ class ViewController: UIViewController {
         SwiftyStoreKit.restorePurchases(atomically: true) { results in
             NetworkActivityIndicatorManager.networkOperationFinished()
 
-            for purchase in results.restoredPurchases where purchase.needsFinishTransaction {
-                // Deliver content from server, then:
-                SwiftyStoreKit.finishTransaction(purchase.transaction)
+            for purchase in results.restoredPurchases {
+                let downloads = purchase.transaction.downloads
+                if !downloads.isEmpty {
+                    SwiftyStoreKit.start(downloads)
+                } else if purchase.needsFinishTransaction {
+                    // Deliver content from server, then:
+                    SwiftyStoreKit.finishTransaction(purchase.transaction)
+                }
             }
             self.showAlert(self.alertForRestorePurchases(results))
         }
@@ -270,7 +276,7 @@ extension ViewController {
     // swiftlint:disable cyclomatic_complexity
     func alertForPurchaseResult(_ result: PurchaseResult) -> UIAlertController? {
         switch result {
-        case .success(let purchase, _):
+        case .success(let purchase):
             print("Purchase Success: \(purchase.productId)")
             return nil
         case .error(let error):

+ 1 - 1
SwiftyStoreKit/PaymentQueueController.swift

@@ -36,7 +36,7 @@ protocol TransactionController {
 }
 
 public enum TransactionResult {
-    case purchased(purchase: PurchaseDetails, downloads: [SKDownload])
+    case purchased(purchase: PurchaseDetails)
     case restored(purchase: Purchase)
     case failed(error: SKError)
 }

+ 1 - 1
SwiftyStoreKit/PaymentsController.swift

@@ -74,7 +74,7 @@ class PaymentsController: TransactionController {
         if transactionState == .purchased {
             let purchase = PurchaseDetails(productId: transactionProductIdentifier, quantity: transaction.payment.quantity, product: payment.product, transaction: transaction, originalTransaction: transaction.original, needsFinishTransaction: !payment.atomically)
             
-            payment.callback(.purchased(purchase: purchase, downloads: transaction.downloads))
+            payment.callback(.purchased(purchase: purchase))
 
             if payment.atomically {
                 paymentQueue.finishTransaction(transaction)

+ 2 - 1
SwiftyStoreKit/SwiftyStoreKit+Types.swift

@@ -55,6 +55,7 @@ public protocol PaymentTransaction {
     var transactionDate: Date? { get }
     var transactionState: SKPaymentTransactionState { get }
     var transactionIdentifier: String? { get }
+    var downloads: [SKDownload] { get }
 }
 
 // Add PaymentTransaction conformance to SKPaymentTransaction
@@ -69,7 +70,7 @@ public struct RetrieveResults {
 
 // Purchase result
 public enum PurchaseResult {
-    case success(purchase: PurchaseDetails, downloads: [SKDownload])
+    case success(purchase: PurchaseDetails)
     case error(error: SKError)
 }
 

+ 3 - 3
SwiftyStoreKit/SwiftyStoreKit.swift

@@ -95,8 +95,8 @@ public class SwiftyStoreKit {
 
     private func processPurchaseResult(_ result: TransactionResult) -> PurchaseResult {
         switch result {
-        case .purchased(let purchase, let downloads):
-            return .success(purchase: purchase, downloads: downloads)
+        case .purchased(let purchase):
+            return .success(purchase: purchase)
         case .failed(let error):
             return .error(error: error)
         case .restored(let purchase):
@@ -109,7 +109,7 @@ public class SwiftyStoreKit {
         var restoreFailedPurchases: [(SKError, String?)] = []
         for result in results {
             switch result {
-            case .purchased(let purchase, _):
+            case .purchased(let purchase):
                 let error = storeInternalError(description: "Cannot purchase product \(purchase.productId) from restore purchases path")
                 restoreFailedPurchases.append((error, purchase.productId))
             case .failed(let error):