Jelajahi Sumber

Remove old InAppCompleteTransactionsObserver and InAppPurchaseRequest

Andrea Bizzotto 8 tahun lalu
induk
melakukan
61a1cb85ba

+ 6 - 10
SwiftyStoreKit.xcodeproj/project.pbxproj

@@ -131,14 +131,12 @@
 		1592CD4F1E27756500D321E6 /* AppleReceiptValidator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppleReceiptValidator.swift; sourceTree = "<group>"; };
 		54C0D52C1CF7404500F90BCE /* SwiftyStoreKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftyStoreKit.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		6502F5FE1B985833004E342D /* SwiftyStoreKit_iOSDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SwiftyStoreKit_iOSDemo.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		6502F6221B98586A004E342D /* InAppProductPurchaseRequest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InAppProductPurchaseRequest.swift; sourceTree = "<group>"; };
 		6502F6231B98586A004E342D /* InAppProductQueryRequest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InAppProductQueryRequest.swift; sourceTree = "<group>"; };
 		6502F6241B98586A004E342D /* SwiftyStoreKit.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SwiftyStoreKit.swift; sourceTree = "<group>"; };
 		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>"; };
 		658A083E1E2EC5120074A98F /* SwiftyStoreKitTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SwiftyStoreKitTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -253,21 +251,19 @@
 		6502F6001B985833004E342D /* SwiftyStoreKit */ = {
 			isa = PBXGroup;
 			children = (
-				6502F6221B98586A004E342D /* InAppProductPurchaseRequest.swift */,
+				6502F6241B98586A004E342D /* SwiftyStoreKit.swift */,
+				65BB6CE71DDB018900218A0B /* SwiftyStoreKit+Types.swift */,
 				6502F6231B98586A004E342D /* InAppProductQueryRequest.swift */,
+				658A08361E2EC24E0074A98F /* PaymentQueueController.swift */,
+				65F70AC81E2EDC3700BF040D /* PaymentsController.swift */,
+				650307F31E3177EF001332A4 /* RestorePurchasesController.swift */,
+				650307F71E317BCF001332A4 /* CompleteTransactionsController.swift */,
 				C4083C561C2AB0A900295248 /* InAppReceiptRefreshRequest.swift */,
 				C4A7C7621C29B8D00053ED64 /* InAppReceipt.swift */,
 				1592CD4F1E27756500D321E6 /* AppleReceiptValidator.swift */,
-				651A71241CD651AF000B4091 /* InAppCompleteTransactionsObserver.swift */,
 				653722801DB8282600C8F944 /* SKProduct+LocalizedPrice.swift */,
-				6502F6241B98586A004E342D /* SwiftyStoreKit.swift */,
-				65BB6CE71DDB018900218A0B /* SwiftyStoreKit+Types.swift */,
 				C40C680F1C29414C00B60B7E /* OS.swift */,
 				65F7DF931DCD536100835D30 /* Platforms */,
-				658A08361E2EC24E0074A98F /* PaymentQueueController.swift */,
-				65F70AC81E2EDC3700BF040D /* PaymentsController.swift */,
-				650307F31E3177EF001332A4 /* RestorePurchasesController.swift */,
-				650307F71E317BCF001332A4 /* CompleteTransactionsController.swift */,
 			);
 			path = SwiftyStoreKit;
 			sourceTree = "<group>";

+ 0 - 83
SwiftyStoreKit/InAppCompleteTransactionsObserver.swift

@@ -1,83 +0,0 @@
-//
-// InAppCompleteTransactionsObserver.swift
-// SwiftyStoreKit
-//
-// Copyright (c) 2016 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 StoreKit
-
-class InAppCompleteTransactionsObserver: NSObject, SKPaymentTransactionObserver {
-    
-    private var callbackCalled: Bool = false
-        
-    typealias TransactionsCallback = ([Product]) -> ()
-    
-    var paymentQueue: SKPaymentQueue {
-        return SKPaymentQueue.default()
-    }
-
-    let atomically: Bool
-    
-    deinit {
-        paymentQueue.remove(self)
-    }
-
-    let callback: TransactionsCallback
-    
-    init(atomically: Bool, callback: @escaping TransactionsCallback) {
-    
-        self.atomically = atomically
-        self.callback = callback
-        super.init()
-        paymentQueue.add(self)
-    }
-
-    func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
-        
-        if callbackCalled {
-            return
-        }
-        
-        var completedTransactions: [Product] = []
-        
-        for transaction in transactions {
-            
-            let transactionState = transaction.transactionState
-
-            if transactionState != .purchasing {
-                
-                let product = Product(productId: transaction.payment.productIdentifier, transaction: transaction, needsFinishTransaction: !atomically)
-                
-                completedTransactions.append(product)
-                
-                print("Finishing transaction for payment \"\(transaction.payment.productIdentifier)\" with state: \(transactionState.stringValue)")
-                
-                if atomically {
-                    paymentQueue.finishTransaction(transaction)
-                }
-            }
-        }
-        callbackCalled = true
-
-        callback(completedTransactions)
-    }
-}

+ 0 - 184
SwiftyStoreKit/InAppProductPurchaseRequest.swift

@@ -1,184 +0,0 @@
-//
-// InAppProductPurchaseRequest.swift
-// SwiftyStoreKit
-//
-// Copyright (c) 2015 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 StoreKit
-import Foundation
-
-class InAppProductPurchaseRequest: NSObject, SKPaymentTransactionObserver {
-
-    enum TransactionResult {
-        case purchased(product: Product)
-        case restored(product: Product)
-        case failed(error: Error)
-    }
-    
-    typealias RequestCallback = ([TransactionResult]) -> ()
-    private let callback: RequestCallback
-    private var purchases : [SKPaymentTransactionState: [String]] = [:]
-    
-    var paymentQueue: SKPaymentQueue {
-        return SKPaymentQueue.default()
-    }
-    
-    let product : SKProduct?
-    let atomically: Bool
-    
-    deinit {
-        paymentQueue.remove(self)
-    }
-    // Initialiser for product purchase
-    private init(product: SKProduct?, atomically: Bool, callback: @escaping RequestCallback) {
-
-        self.atomically = atomically
-        self.product = product
-        self.callback = callback
-        super.init()
-        paymentQueue.add(self)
-    }
-    // MARK: Public methods
-    class func startPayment(product: SKProduct, atomically: Bool, applicationUsername: String = "", callback: @escaping RequestCallback) -> InAppProductPurchaseRequest {
-        let request = InAppProductPurchaseRequest(product: product, atomically: atomically, callback: callback)
-        request.startPayment(product, applicationUsername: applicationUsername)
-        return request
-    }
-    class func restorePurchases(atomically: Bool, callback: @escaping RequestCallback) -> InAppProductPurchaseRequest {
-        let request = InAppProductPurchaseRequest(product: nil, atomically: atomically, callback: callback)
-        request.startRestorePurchases()
-        return request
-    }
-    
-    class func finishTransaction(_ transaction: PaymentTransaction) {
-        guard let skTransaction = transaction as? SKPaymentTransaction else {
-            print("Object is not a SKPaymentTransaction: \(transaction)")
-            return
-        }
-        SKPaymentQueue.default().finishTransaction(skTransaction)
-    }
-    
-    // MARK: Private methods
-    private func startPayment(_ product: SKProduct, applicationUsername: String = "") {
-        let payment = SKMutablePayment(product: product)
-        payment.applicationUsername = applicationUsername
-        
-        DispatchQueue.global(qos: .default).async {
-            self.paymentQueue.add(payment)
-        }
-    }
-    private func startRestorePurchases() {
-        
-        DispatchQueue.global(qos: .default).async {
-            self.paymentQueue.restoreCompletedTransactions()
-        }
-    }
-        
-    // MARK: SKPaymentTransactionObserver
-    func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
-        
-        var transactionResults: [TransactionResult] = []
-        
-        for transaction in transactions {
-            
-            let transactionProductIdentifier = transaction.payment.productIdentifier
-            
-            var isPurchaseRequest = false
-            if let productIdentifier = product?.productIdentifier {
-                if transactionProductIdentifier != productIdentifier {
-                    continue
-                }
-                isPurchaseRequest = true
-            }
-
-            let transactionState = transaction.transactionState
-
-            switch transactionState {
-            case .purchased:
-                if isPurchaseRequest {
-                    let product = Product(productId: transactionProductIdentifier, transaction: transaction, needsFinishTransaction: !atomically)
-                    transactionResults.append(.purchased(product: product))
-                    if atomically {
-                        paymentQueue.finishTransaction(transaction)
-                    }
-                }
-            case .failed:
-                // TODO: How to discriminate between purchase and restore?
-                // It appears that in some edge cases transaction.error is nil here. Since returning an associated error is
-                // mandatory, return a default one if needed
-                let message = "Transaction failed for product ID: \(transactionProductIdentifier)"
-                let altError = NSError(domain: SKErrorDomain, code: 0, userInfo: [ NSLocalizedDescriptionKey: message ])
-                transactionResults.append(.failed(error: transaction.error ?? altError))
-                paymentQueue.finishTransaction(transaction)
-            case .restored:
-                if !isPurchaseRequest {
-                    let product = Product(productId: transactionProductIdentifier, transaction: transaction, needsFinishTransaction: !atomically)
-                    transactionResults.append(.restored(product: product))
-                    if atomically {
-                        paymentQueue.finishTransaction(transaction)
-                    }
-                }
-            case .purchasing:
-                // In progress: do nothing
-                break
-            case .deferred:
-                break
-            }
-            // Keep track of payments
-            if let _ = purchases[transactionState] {
-                purchases[transactionState]?.append(transactionProductIdentifier)
-            }
-            else {
-                purchases[transactionState] = [ transactionProductIdentifier ]
-            }
-        }
-        if transactionResults.count > 0 {
-            DispatchQueue.main.async {
-                self.callback(transactionResults)
-            }
-        }
-    }
-    
-    func paymentQueue(_ queue: SKPaymentQueue, removedTransactions transactions: [SKPaymentTransaction]) {
-        
-    }
-    
-    func paymentQueue(_ queue: SKPaymentQueue, restoreCompletedTransactionsFailedWithError error: Error) {
-        
-        DispatchQueue.main.async {
-            self.callback([.failed(error: error)])
-        }
-    }
-
-    func paymentQueueRestoreCompletedTransactionsFinished(_ queue: SKPaymentQueue) {
-        // This method will be called after all purchases have been restored (includes the case of no purchases)
-        guard let restored = purchases[.restored], restored.count > 0 else {
-            
-            self.callback([])
-            return
-        }
-    }
-    
-    func paymentQueue(_ queue: SKPaymentQueue, updatedDownloads downloads: [SKDownload]) {
-        
-    }
-}
-