Browse Source

Add CompleteTransactionsController definition

Andrea Bizzotto 8 years ago
parent
commit
b285bc1441

+ 8 - 0
SwiftyStoreKit.xcodeproj/project.pbxproj

@@ -24,6 +24,9 @@
 		650307F41E3177EF001332A4 /* RestorePurchasesController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 650307F31E3177EF001332A4 /* RestorePurchasesController.swift */; };
 		650307F51E3177EF001332A4 /* RestorePurchasesController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 650307F31E3177EF001332A4 /* RestorePurchasesController.swift */; };
 		650307F61E3177EF001332A4 /* RestorePurchasesController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 650307F31E3177EF001332A4 /* RestorePurchasesController.swift */; };
+		650307F81E317BCF001332A4 /* CompleteTransactionsController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 650307F71E317BCF001332A4 /* CompleteTransactionsController.swift */; };
+		650307F91E317BCF001332A4 /* CompleteTransactionsController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 650307F71E317BCF001332A4 /* CompleteTransactionsController.swift */; };
+		650307FA1E317BCF001332A4 /* CompleteTransactionsController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 650307F71E317BCF001332A4 /* CompleteTransactionsController.swift */; };
 		651A71251CD651AF000B4091 /* InAppCompleteTransactionsObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 651A71241CD651AF000B4091 /* InAppCompleteTransactionsObserver.swift */; };
 		651A71261CD651AF000B4091 /* InAppCompleteTransactionsObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 651A71241CD651AF000B4091 /* InAppCompleteTransactionsObserver.swift */; };
 		653722811DB8282600C8F944 /* SKProduct+LocalizedPrice.swift in Sources */ = {isa = PBXBuildFile; fileRef = 653722801DB8282600C8F944 /* SKProduct+LocalizedPrice.swift */; };
@@ -139,6 +142,7 @@
 		6502F62D1B985C40004E342D /* SwiftyStoreKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftyStoreKit.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		650307F11E3163AA001332A4 /* RestorePurchasesControllerTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RestorePurchasesControllerTests.swift; sourceTree = "<group>"; };
 		650307F31E3177EF001332A4 /* RestorePurchasesController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RestorePurchasesController.swift; sourceTree = "<group>"; };
+		650307F71E317BCF001332A4 /* CompleteTransactionsController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CompleteTransactionsController.swift; sourceTree = "<group>"; };
 		651A71241CD651AF000B4091 /* InAppCompleteTransactionsObserver.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InAppCompleteTransactionsObserver.swift; sourceTree = "<group>"; };
 		653722801DB8282600C8F944 /* SKProduct+LocalizedPrice.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "SKProduct+LocalizedPrice.swift"; sourceTree = "<group>"; };
 		658A08361E2EC24E0074A98F /* PaymentQueueController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PaymentQueueController.swift; sourceTree = "<group>"; };
@@ -267,6 +271,7 @@
 				658A08361E2EC24E0074A98F /* PaymentQueueController.swift */,
 				65F70AC81E2EDC3700BF040D /* PaymentsController.swift */,
 				650307F31E3177EF001332A4 /* RestorePurchasesController.swift */,
+				650307F71E317BCF001332A4 /* CompleteTransactionsController.swift */,
 			);
 			path = SwiftyStoreKit;
 			sourceTree = "<group>";
@@ -592,6 +597,7 @@
 				658A08391E2EC24E0074A98F /* PaymentQueueController.swift in Sources */,
 				653722831DB8290B00C8F944 /* SKProduct+LocalizedPrice.swift in Sources */,
 				54B069921CF742D100BAFE38 /* InAppReceipt.swift in Sources */,
+				650307FA1E317BCF001332A4 /* CompleteTransactionsController.swift in Sources */,
 				65BB6CEA1DDB018900218A0B /* SwiftyStoreKit+Types.swift in Sources */,
 				54B069941CF742D600BAFE38 /* InAppProductQueryRequest.swift in Sources */,
 			);
@@ -622,6 +628,7 @@
 				658A08371E2EC24E0074A98F /* PaymentQueueController.swift in Sources */,
 				653722811DB8282600C8F944 /* SKProduct+LocalizedPrice.swift in Sources */,
 				C4A7C7631C29B8D00053ED64 /* InAppReceipt.swift in Sources */,
+				650307F81E317BCF001332A4 /* CompleteTransactionsController.swift in Sources */,
 				65BB6CE81DDB018900218A0B /* SwiftyStoreKit+Types.swift in Sources */,
 				6502F63C1B985CA4004E342D /* SwiftyStoreKit.swift in Sources */,
 			);
@@ -656,6 +663,7 @@
 				658A08381E2EC24E0074A98F /* PaymentQueueController.swift in Sources */,
 				653722821DB8290A00C8F944 /* SKProduct+LocalizedPrice.swift in Sources */,
 				C4083C551C2AADB500295248 /* InAppReceipt.swift in Sources */,
+				650307F91E317BCF001332A4 /* CompleteTransactionsController.swift in Sources */,
 				65BB6CE91DDB018900218A0B /* SwiftyStoreKit+Types.swift in Sources */,
 				C4D74BC51C24CEDC0071AD3E /* SwiftyStoreKit.swift in Sources */,
 			);

+ 56 - 0
SwiftyStoreKit/CompleteTransactionsController.swift

@@ -0,0 +1,56 @@
+//
+// CompleteTransactionsController.swift
+// SwiftyStoreKit
+//
+// Copyright (c) 2017 Andrea Bizzotto (bizz84@gmail.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+import Foundation
+import StoreKit
+
+public class CompleteTransactionsController: TransactionController {
+
+    public func processTransactions(_ transactions: [SKPaymentTransaction], on paymentQueue: PaymentQueue) -> [SKPaymentTransaction] {
+     
+        for transaction in transactions {
+
+            let transactionState = transaction.transactionState
+
+            switch transactionState {
+            case .purchased:
+
+                break
+            case .failed:
+                break
+
+            case .restored:
+                break
+
+            case .purchasing:
+                // In progress: do nothing
+                break
+            case .deferred:
+                break
+            }
+        }
+
+        return transactions
+    }
+}

+ 9 - 27
SwiftyStoreKit/PaymentQueueController.swift

@@ -62,6 +62,8 @@ public class PaymentQueueController: NSObject, SKPaymentTransactionObserver {
     
     private let restorePurchasesController: RestorePurchasesController
     
+    private let completeTransactionsController: CompleteTransactionsController
+    
     unowned let paymentQueue: PaymentQueue
 
     deinit {
@@ -70,11 +72,13 @@ public class PaymentQueueController: NSObject, SKPaymentTransactionObserver {
 
     public init(paymentQueue: PaymentQueue = SKPaymentQueue.default(),
                 paymentsController: PaymentsController = PaymentsController(),
-                restorePurchasesController: RestorePurchasesController = RestorePurchasesController()) {
+                restorePurchasesController: RestorePurchasesController = RestorePurchasesController(),
+                completeTransactionsController: CompleteTransactionsController = CompleteTransactionsController()) {
      
         self.paymentQueue = paymentQueue
         self.paymentsController = paymentsController
         self.restorePurchasesController = restorePurchasesController
+        self.completeTransactionsController = completeTransactionsController
         super.init()
         paymentQueue.add(self)
     }
@@ -121,38 +125,16 @@ public class PaymentQueueController: NSObject, SKPaymentTransactionObserver {
          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)
-
-        // TODO: Complete transactions
         
-//        for transaction in transactionsExcludingPayments {
-//            
-//            let transactionState = transaction.transactionState
-//
-//            switch transactionState {
-//            case .purchased:
-//                
-//                break
-//            case .failed:
-//                break
-//
-//            case .restored:
-//                break
-//
-//            case .purchasing:
-//                // In progress: do nothing
-//                break
-//            case .deferred:
-//                break
-//            }
-//
-//        }
+        unhandledTransactions = completeTransactionsController.processTransactions(unhandledTransactions, on: paymentQueue)
         
+        if unhandledTransactions.count > 0 {
+            print("unhandledTransactions: \(unhandledTransactions)")
+        }
     }
     
     public func paymentQueue(_ queue: SKPaymentQueue, removedTransactions transactions: [SKPaymentTransaction]) {