ソースを参照

Nest SKProduct and Purchase inside PurchaseDetails type when making a purchase.

Andrea Bizzotto 8 年 前
コミット
59d79b2577

+ 3 - 3
SwiftyStoreKit-iOS-Demo/ViewController.swift

@@ -81,8 +81,8 @@ class ViewController: UIViewController {
 
             if case .success(let purchase) = result {
                 // Deliver content from server, then:
-                if purchase.needsFinishTransaction {
-                    SwiftyStoreKit.finishTransaction(purchase.transaction)
+                if purchase.purchase.needsFinishTransaction {
+                    SwiftyStoreKit.finishTransaction(purchase.purchase.transaction)
                 }
             }
             if let alert = self.alertForPurchaseResult(result) {
@@ -217,7 +217,7 @@ extension ViewController {
     func alertForPurchaseResult(_ result: PurchaseResult) -> UIAlertController? {
         switch result {
         case .success(let purchase):
-            print("Purchase Success: \(purchase.productId)")
+            print("Purchase Success: \(purchase.purchase.productId)")
             return alertWithTitle("Thank You", message: "Purchase completed")
         case .error(let error):
             print("Purchase Failed: \(error)")

+ 1 - 1
SwiftyStoreKit/PaymentQueueController.swift

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

+ 4 - 3
SwiftyStoreKit/PaymentsController.swift

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

+ 6 - 1
SwiftyStoreKit/SwiftyStoreKit+Types.swift

@@ -35,6 +35,11 @@ public struct Purchase {
     public let needsFinishTransaction: Bool
 }
 
+public struct PurchaseDetails {
+    public let purchase: Purchase
+    public let product: SKProduct
+}
+
 //Conform to this protocol to provide custom receipt validator
 public protocol ReceiptValidator {
 	func validate(receipt: String, password autoRenewPassword: String?, completion: @escaping (VerifyReceiptResult) -> Void)
@@ -58,7 +63,7 @@ public struct RetrieveResults {
 
 // Purchase result
 public enum PurchaseResult {
-    case success(purchase: Purchase)
+    case success(purchase: PurchaseDetails)
     case error(error: SKError)
 }
 

+ 2 - 2
SwiftyStoreKit/SwiftyStoreKit.swift

@@ -132,8 +132,8 @@ public class SwiftyStoreKit {
         for result in results {
             switch result {
             case .purchased(let purchase):
-                let error = storeInternalError(description: "Cannot purchase product \(purchase.productId) from restore purchases path")
-                restoreFailedPurchases.append((error, purchase.productId))
+                let error = storeInternalError(description: "Cannot purchase product \(purchase.purchase.productId) from restore purchases path")
+                restoreFailedPurchases.append((error, purchase.purchase.productId))
             case .failed(let error):
                 restoreFailedPurchases.append((error, nil))
             case .restored(let purchase):