使用Swift 3恢复应用内购买 [英] Restore in-app purchase with Swift 3

查看:164
本文介绍了使用Swift 3恢复应用内购买的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用Swift 3中的应用程序购买。我可以在我的测试设备上成功付款。点击后,我在屏幕顶部有一个恢复按钮可以恢复以前的所有购买。这是我用来恢复的代码。我在函数中的队列总是空的。请帮我解决这个问题。

I am trying to work with in app purchases in Swift 3. I can successfully make payments on my test device. I have a restore button on top of the screen when clicked should restore all the previous purchases. Here is the code that I use to restore. My queue in the function is always empty. Please help me fix this.

func paymentQueueRestoreCompletedTransactionsFinished(_ queue: SKPaymentQueue) {
    for transaction in queue.transactions{
        let trans: SKPaymentTransaction = transaction as SKPaymentTransaction

            let prodID = trans.payment.productIdentifier as String
            switch prodID {
            case "some_iap":
                print("Do something")
                finishTransaction(trans)

            default: break
            }
    }
    updatePurchases()
}

func paymentQueue(_ queue: SKPaymentQueue, restoreCompletedTransactionsFailedWithError error: Error) {
    print("error in restore")
}

func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {

    for trans in queue.transactions{
        let trans: SKPaymentTransaction = trans as SKPaymentTransaction
        print(trans.transactionState.rawValue)
        switch (trans.transactionState) {
        case .purchased:
            let prodID = p.productIdentifier as String
            switch prodID {
            case "some_iap":
                print("do something")
                updatePurchases()
                finishTransaction(trans)

            default:
                print("defualt")
                finishTransaction(trans)
            }

        case .failed: break

        default: break
        }
    }
}

func finishTransaction(_ trans:SKPaymentTransaction){
    SKPaymentQueue.default().finishTransaction(trans)
    SKPaymentQueue.default().remove(self)
}

func paymentQueue(_ queue: SKPaymentQueue, removedTransactions transactions: [SKPaymentTransaction]) {
}


推荐答案

解决方案Swift 3

Solution for Swift 3

//Step 1 Call from button Restore Purchase
func restore() {
    SKPaymentQueue.default().add(self)
    SKPaymentQueue.default().restoreCompletedTransactions()
}

//Step 2 Get transactions
public func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {

    for transaction in transactions {

        switch transaction.transactionState {
         case .purchased:
                print("Product Purchased")
                unlockApp()
                SKPaymentQueue.default().finishTransaction(transaction as! SKPaymentTransaction)

                break;
            case .failed:
                print("Purchased Failed");
                SKPaymentQueue.default().finishTransaction(transaction as! SKPaymentTransaction)
                break;
            case .restored:
                print("Already Purchased")
                unlockApp()

                SKPaymentQueue.default().finishTransaction(transaction as! SKPaymentTransaction)
        default:
            break
        }
    }
}




//If an error occurs, the code will go to this function
func paymentQueue(_ queue: SKPaymentQueue, restoreCompletedTransactionsFailedWithError error: Error) {
    //Handle Error
}

这篇关于使用Swift 3恢复应用内购买的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆