From 0158b260eceeeb266eccb71488eba61e27ff1870 Mon Sep 17 00:00:00 2001 From: Abel Orosz Date: Fri, 19 Feb 2016 10:58:47 +0100 Subject: [PATCH] Add purchase canceled notification --- InAppFw.podspec | 2 +- InAppFw/InAppFw.swift | 19 ++++++---------- README.md | 53 +++++++++++++++++-------------------------- 3 files changed, 29 insertions(+), 45 deletions(-) diff --git a/InAppFw.podspec b/InAppFw.podspec index de4f09e..4937664 100644 --- a/InAppFw.podspec +++ b/InAppFw.podspec @@ -5,7 +5,7 @@ Pod::Spec.new do |s| s.name = "InAppFw" s.summary = "In App Purchase Manager framework for iOS" s.requires_arc = true - s.version = "0.9.2" + s.version = "0.9.3" s.license = { :type => "MIT", :file => "LICENSE" } s.author = { "Sandor Gyulai" => "sandor.gyulai@icloud.com" } s.homepage = "https://github.com/sandorgyulai/InAppFramework" diff --git a/InAppFw/InAppFw.swift b/InAppFw/InAppFw.swift index 8433946..af08745 100644 --- a/InAppFw/InAppFw.swift +++ b/InAppFw/InAppFw.swift @@ -23,10 +23,11 @@ import UIKit import StoreKit +let kIAPPurchasedNotification = "IAPPurchasedNotification" +let kIAPFailedNotification = "IAPFailedNotification" + public class InAppFw: NSObject, SKProductsRequestDelegate, SKPaymentTransactionObserver{ - public let ProductPurchasedNotificationName = "IAPPurchasedNotification" - public static let sharedInstance = InAppFw() var productIdentifiers: Set? @@ -185,7 +186,6 @@ public class InAppFw: NSObject, SKProductsRequestDelegate, SKPaymentTransactionO print("No productIdentifiers") completionHandler(success: false, products: nil) } - } /** @@ -203,10 +203,8 @@ public class InAppFw: NSObject, SKProductsRequestDelegate, SKPaymentTransactionO Check if the product with identifier is already purchased */ public func productPurchased(productIdentifier: String) -> (isPurchased: Bool, hasValidReceipt: Bool) { - let purchased = purchasedProductIdentifiers.contains(productIdentifier) return (purchased, hasValidReceipt) - } /** @@ -235,23 +233,21 @@ public class InAppFw: NSObject, SKProductsRequestDelegate, SKPaymentTransactionO private func failedTransaction(transaction: SKPaymentTransaction) { print("Failed Transaction...") - if (transaction.error!.code != SKErrorPaymentCancelled) - { + if (transaction.error!.code != SKErrorPaymentCancelled) { print("Transaction error \(transaction.error!.code): \(transaction.error!.localizedDescription)") } SKPaymentQueue.defaultQueue().finishTransaction(transaction) + NSNotificationCenter.defaultCenter().postNotificationName(kIAPFailedNotification, object: nil, userInfo: nil) } private func provideContentForProductIdentifier(productIdentifier: String!) { - purchasedProductIdentifiers.insert(productIdentifier) NSUserDefaults.standardUserDefaults().setBool(true, forKey: productIdentifier) NSUserDefaults.standardUserDefaults().synchronize() - NSNotificationCenter.defaultCenter().postNotificationName(ProductPurchasedNotificationName, object: productIdentifier, userInfo: nil) - + NSNotificationCenter.defaultCenter().postNotificationName(kIAPPurchasedNotification, object: productIdentifier, userInfo: nil) } // MARK: - Delegate Implementations @@ -261,8 +257,7 @@ public class InAppFw: NSObject, SKProductsRequestDelegate, SKPaymentTransactionO { if let trans = transaction as? SKPaymentTransaction { - switch trans.transactionState - { + switch trans.transactionState { case .Purchased: completeTransaction(trans) break diff --git a/README.md b/README.md index dd67361..a796ffa 100644 --- a/README.md +++ b/README.md @@ -17,46 +17,35 @@ pod 'InAppFw' ### Usage -* Register for Notifications with the name below where you want to do something - -``` -ProductPurchasedNotificationName +First you should add product IDs: +```swift +InAppFw.sharedInstance.addProductId(String) +InAppFw.sharedInstance.addProductIds([String]) ``` -* Add your product identifiers - +Then you can request them from the Apple servers: +```swift +InAppFw.sharedInstance.requestProducts(completionHandler: (success: Bool, products: [SKProduct]?) ``` -InAppFw.sharedInstance.addProductId(id: String) -``` - -or add multiple of them +Make purchases: +```swift +InAppFw.sharedInstance.purchaseProduct(SKProduct) ``` -InAppFw.sharedInstance.addProductIds(ids: Set) -``` - -* Request products from Apple - -``` -InAppFw.sharedInstance.requestProducts(completionHandler: (success:Bool, products:[SKProduct]?) -``` - -* Load the previously purchased products +Restore purchases: +```swift +InAppFw.sharedInstance.restoreCompletedTransactions() ``` -InAppFw.sharedInstance.loadPurchasedProducts(checkWithApple: Bool, completion: ((valid: Bool) -> Void)?) -``` - -"checkWithApple" if true will validate the Purchase receipt with Apple Servers too. The completion will be only true if the receipt was valid - -* Purchase product +Register for notifications: +```swift +- kIAPPurchasedNotification +- kIAPFailedNotification ``` -InAppFw.sharedInstance.purchaseProduct(product: SKProduct) -``` - -* Or Restore products purchased on an other device +Load the previously purchased products: +```swift +InAppFw.sharedInstance.loadPurchasedProducts(checkWithApple: Bool, completion: ((valid: Bool) -> Void)?) ``` -InAppFw.sharedInstance.restoreCompletedTransactions() -``` +```checkWithApple```: if ```true```, will validate the Purchase receipt with Apple Servers too. The completion will be only true if the receipt is valid. \ No newline at end of file