如何正确恢复应用内购买?

Pab*_*blo 1 in-app-purchase swift

我有几个应用内购买.但是,我读到我需要提供一种方法来恢复它们,以防他们意外删除我的应用程序.它们是不可消耗的物品,如皮肤和纹理.我正在阅读本网站的教程:https://code.tutsplus.com/tutorials/in-app-purchase-tutorial-with-swift-3-ios-sdk--cms-27595

但是,他们对恢复交易的解释使我感到困惑.他们这样做了:

@IBAction func restorePurchaseButt(_ sender: Any) {
SKPaymentQueue.default().add(self)
SKPaymentQueue.default().restoreCompletedTransactions()
}

func paymentQueueRestoreCompletedTransactionsFinished(_ queue: SKPaymentQueue) {
nonConsumablePurchaseMade = true
UserDefaults.standard.set(nonConsumablePurchaseMade, forKey: "nonConsumablePurchaseMade")

UIAlertView(title: "IAP Tutorial",
message: "You've successfully restored your purchase!",
delegate: nil, cancelButtonTitle: "OK").show()
}
Run Code Online (Sandbox Code Playgroud)

但是,他们从未向我展示他们实际使用paymentQueueRestoreCompletedTransactionsFinished()的位置.我知道他们正在使用restorePurchaseButt()来恢复购买.但是,我不理解这两种方法.

SKPaymentQueue.default().add(self)
SKPaymentQueue.default().restoreCompletedTransactions()
Run Code Online (Sandbox Code Playgroud)

这段代码甚至可以检查用户是否进行了购买?我没有看到任何if语句.我假设也许restoreCompletedTransactions()触发paymentQueueRestoreCompletedTransactionsFinished(),但我不确定?但是,即使它确实如此,paymentQueueRestoreCompletedTransactionsFinished()如何检查玩家是否进行了这些交易?现在,当有多个应用内购买时,如何进行恢复?

Oli*_*own 10

正如您在要恢复的按钮中所做的那样,您需要添加:

SKPaymentQueue.default().add(self)
SKPaymentQueue.default().restoreCompletedTransactions()
Run Code Online (Sandbox Code Playgroud)

然后,您还需要使用iTunesConnect中的不同应用内购买添加此功能.将案例的"ProductID"更改为iTunesConnect中的产品ID,并添加与应用内购买一样多的案例.

func paymentQueueRestoreCompletedTransactionsFinished(_ queue: SKPaymentQueue) {
    for transaction in queue.transactions {
        let t: SKPaymentTransaction = transaction
        let prodID = t.payment.productIdentifier as String

        switch prodID {
        case "ProductID1":
            // implement the given in-app purchase as if it were bought
        case "ProductID2":
            // implement the given in-app purchase as if it were bought
        default:
            print("iap not found")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

要回答你的问题:它看起来像你下面是重点教你应用内购买的总体思路和使用他们的榜样购买,而不是可用于多个产品代码这个特殊的教程.

Apple检查该项是否先前通过您在按钮时调用的restoreCompletedTransactions()函数购买.这是Apple提供的StoreKit框架的一部分.它一旦检查就会自动触发paymentQueueRestoreCompletedTransactionsFinished()函数.使用上面提供的代码,它根据找到的购买执行不同的代码,如果找不到要恢复的产品,则会打印到控制台.