1.进行购买,
2.恢复购买.
当我测试它时,它完美地工作,当用户必须恢复购买时,他们不再付费.我不知道Apple是否可以接受.或者如果我忘了放些东西,请检查我的代码!
消息是:
From Apple
Missing restore mechanism
We found that your app offers in-app Purchase(s) that can be restored but does not include a “Restore Purchases” feature to allow users to restore the prevIoUsly purchased in-app Purchase(s),as specifIEd in the “Restoring Purchase Products” section of the in-app Purchase Programming GuIDe
“Users restore transactions to maintain access to content they’ve already purchased. For example,when they upgrade to a new phone,they don’t lose all of the items they purchased on the old phone. Include some mechanism in your app to let the user restore their purchases,such as a Restore Purchases button.”
To restore prevIoUsly purchased in-app Purchase products,it would be appropriate to provIDe a “Restore” button and initiate the restore process when the “Restore” button is tapped by the user. Including restore in the purchase button is not a sufficIEnt restore mechanism.
我使用的代码是:
overrIDe func vIEwDIDLoad() { super.vIEwDIDLoad()func addTransactionObserver() { SKPaymentQueue.defaultQueue().addTransactionObserver(self)}func removeTransactionObserver() { SKPaymentQueue.defaultQueue().removeTransactionObserver(self)}}@IBAction func removeAds(sender: UIbutton) { print("Remove Ads button pressed") for product in List { let prodID = product.productIDentifIEr if(prodID == "Squares.RemoveAds") { p = product buyProduct() break; } } ////SKPaymentQueue.defaultQueue().addTransactionObserver(self) SKPaymentQueue.defaultQueue().restoreCompletedTransactions()}overrIDe func prefeRSStatusbarHIDden() -> Bool { return true}//Remove Ads Paymentvar List = [SKProduct]()var p = SKProduct()//Squares.RemoveAdsfunc buyProduct() { print("Buy" + p.productIDentifIEr) let pay = SKPayment(product: p) ////SKPaymentQueue.defaultQueue().addTransactionObserver(self) SKPaymentQueue.defaultQueue().addPayment(pay as SKPayment)}func productsRequest(request: SKProductsRequest,dIDReceiveResponse response: SKProductsResponse) { print("Product Request") let myProduct = response.products for product in myProduct { print("Product Added") print(product.productIDentifIEr) print(product.localizedTitle) print(product.localizedDescription) print(product.price) List.append(product as SKProduct) } removeAdsbutton.enabled = true removeAdsIPhone6Plus.enabled = true}func paymentQueueRestoreCompletedTransactionsFinished(queue: SKPaymentQueue) { print("Transactions Restored") var purchasedItemIDS = [] for transaction in queue.transactions { let t: SKPaymentTransaction = transaction as SKPaymentTransaction let prodID = t.payment.productIDentifIEr as String switch prodID { case ProductID.removeAds: print("Remove Ads") Ads.removeAllAds() case ProductID.removeAds: print("Remove Ads for iPhone 6 Plus") Ads.removeAllAds() default: print("IAP not setup") } }}func paymentQueue(queue: SKPaymentQueue,updatedTransactions transactions: [SKPaymentTransaction]) { print("Add Payment") for transaction:AnyObject in transactions { let trans = transaction as! SKPaymentTransaction print(trans.error) switch trans.transactionState { case .Purchased: print("Buy,Ok unlock Squares here") print(p.productIDentifIEr) let prodID = p.productIDentifIEr as String switch prodID { case ProductID.removeAds: print("Remove Ads") Ads.removeAllAds() case ProductID.removeAds: print("Remove Ads for iPhone 6 Plus") Ads.removeAllAds() default: print("IAP not Setup") } queue.finishTransaction(trans) break; case .Failed: print("Buy Error") queue.finishTransaction(trans) break; default: print("Default") break; } }}func finishTransaction(trans:SKPaymentTransaction){ print("Finish Transaction")}func paymentQueue(queue: SKPaymentQueue,removedTransactions transactions: [SKPaymentTransaction]) { print("Remove Transaction") }}
我希望你的贡献对我有所帮助.
解决方法 您可能只需要在屏幕上放置一个按钮供用户按下,然后将其连接到@IBAction func RestorePurchases我已经为Xcode 7.0,iOS 9.0和Swift 2.0添加了我的默认IAP,使用正确的字符串更改“com.dname.YourApp.removeAds”:)
//// IAPVIEwController.swift// import UIKitimport StoreKitclass IAPVIEwController: UIVIEwController,SKProductsRequestDelegate,SKPaymentTransactionObserver{ let userDefaults = NSUserDefaults.standardUserDefaults() //@IBOutlet var lblAd: UILabel! // @IBOutlet var lblCoinAmount: UILabel! @IBOutlet var removeAds: UIbutton! //@IBOutlet var outAddCoins: UIbutton! //var coins = 50 // 1 overrIDe func vIEwDIDLoad() { super.vIEwDIDLoad() removeAds.enabled = false // outAddCoins.enabled = false // Set IAPS if(SKPaymentQueue.canMakePayments()) { print("IAP is enabled,loading") let productID:NSSet = NSSet(objects: "com.dname.YourApp.removeAds") let request: SKProductsRequest = SKProductsRequest(productIDentifIErs: productID as! Set<String>) request.delegate = self request.start() } else { print("please enable IAPS") } } // 2 @IBAction func btnRemoveAds(sender: UIbutton) { for product in List { let prodID = product.productIDentifIEr if(prodID == "com.dname.YourApp.removeAds") { p = product buyProduct() break; } } }/*// 3@IBAction func btnAddCoins(sender: UIbutton) { for product in List { var prodID = product.productIDentifIEr if(prodID == "com.dname.YourApp.addcoins") { p = product buyProduct() break; } }}*//*// 4func removeAds() { lblAd.removeFromSupervIEw()}*//*// 5func addCoins() { coins = coins + 50 lblCoinAmount.text = "\(coins)"}*/overrIDe func dIDReceiveMemoryWarning() { super.dIDReceiveMemoryWarning() // dispose of any resources that can be recreated.}@IBAction func RestorePurchases(sender: UIbutton) { SKPaymentQueue.defaultQueue().addTransactionObserver(self) SKPaymentQueue.defaultQueue().restoreCompletedTransactions()}var List = [SKProduct]()var p = SKProduct()func productsRequest(request: SKProductsRequest,dIDReceiveResponse response: SKProductsResponse) { print("product request") let myProduct = response.products for product in myProduct { print("product added") print(product.productIDentifIEr) print(product.localizedTitle) print(product.localizedDescription) //println(product.price) List.append(product ) } removeAds.enabled = true //outAddCoins.enabled = true}func buyProduct() { print("buy " + p.productIDentifIEr) let pay = SKPayment(product: p) SKPaymentQueue.defaultQueue().addTransactionObserver(self) SKPaymentQueue.defaultQueue().addPayment(pay as SKPayment)}func paymentQueueRestoreCompletedTransactionsFinished(queue: SKPaymentQueue) { print("transactions restored") // var purchasedItemIDS = [] for transaction in queue.transactions { let t: SKPaymentTransaction = transaction let prodID = t.payment.productIDentifIEr as String switch prodID { case "com.dname.YourApp.removeAds": //Set the user default to not show ads userDefaults.setobject(1,forKey: "noAds") userDefaults.synchronize() print("remove ads") //removeAds() case "com.dname.YourApp.addcoins": print("add coins to account") //addCoins() default: print("IAP not setup") } }}func paymentQueue(queue: SKPaymentQueue,updatedTransactions transactions: [SKPaymentTransaction]) { print("add paymnet") for transaction:AnyObject in transactions { let trans = transaction as! SKPaymentTransaction print(trans.error) switch trans.transactionState { case .Purchased: print("buy,ok unlock iap here") print(p.productIDentifIEr) let prodID = p.productIDentifIEr as String switch prodID { case "com.dname.YourApp.removeAds": print("remove ads") //Set the user default to not show ads userDefaults.setobject(1,forKey: "noAds") userDefaults.synchronize() //removeAds()`enter code here` case "com.dname.YourApp.addcoins": print("add coins to account") //addCoins() default: print("IAP not setup") } queue.finishTransaction(trans) break; case .Failed: print("buy error") queue.finishTransaction(trans) break; default: print("default") break; } }}func finishTransaction(trans:SKPaymentTransaction){ print("finish trans") SKPaymentQueue.defaultQueue().finishTransaction(trans)}func paymentQueue(queue: SKPaymentQueue,removedTransactions transactions: [SKPaymentTransaction]) { print("Remove Transaction")}
}
总结以上是内存溢出为你收集整理的应用程序内购买 – 如何在Swift中使用Xcode 7和SpriteKit修复iOS应用程序中的Restore Purchase?全部内容,希望文章能够帮你解决应用程序内购买 – 如何在Swift中使用Xcode 7和SpriteKit修复iOS应用程序中的Restore Purchase?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)