应用程序内购买 – 如何在Swift中使用Xcode 7和SpriteKit修复iOS应用程序中的Restore Purchase?

应用程序内购买 – 如何在Swift中使用Xcode 7和SpriteKit修复iOS应用程序中的Restore Purchase?,第1张

概述我在 Swift中使用Xcode 7和SpriteKit制作了一个游戏,然后我完成了它.在我将其提交给iTunes Connect之后,Apple拒绝了它并且他们给我发了一条消息,他们说问题出在Restore Purchase上,但是我把它放在购买的同一个按钮中,所以我创建了一个具有两个功能的按钮:  1.进行购买,  2.恢复购买. 当我测试它时,它完美地工作,当用户必须恢复购买时,他们不再付费 我在 Swift中使用Xcode 7和SpriteKit制作了一个游戏,然后我完成了它.在我将其提交给iTunes Connect之后,Apple拒绝了它并且他们给我发了一条消息,他们说问题出在Restore Purchase上,但是我把它放在购买的同一个按钮中,所以我创建了一个具有两个功能的按钮:
 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?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1005140.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存