【问题标题】:Swift: how to fix strange in-app purchase behavior?Swift:如何解决奇怪的应用内购买行为?
【发布时间】:2020-11-15 13:26:33
【问题描述】:

我使用基于此answer 的应用内购买代码。但是我遇到了一些奇怪的错误。例如:

我有带有锁定内容的FirstViewController 和带有购买按钮的PurchasesViewController。当我点击PurchasesViewController中的购买按钮时,确认购买并等待几秒钟通知购买成功。接下来我回到FirstViewController 并看到该内容已解锁。在这个例子中,一切正常。但是……

问题:

如果我点击PurchasesViewController 中的购买按钮,确认购买并且不等待通知,我会返回FirstViewController 并在那里收到通知。我的内容未解锁。即使我重新启动未解锁的应用程序内容。但如果我点击restore purchases 按钮,所有启动都可以正常工作,锁定的内容将被解锁。

这个问题可能会让用户感到困惑。所以我想锁定界面并显示activity indicator,直到用户收到购买成功的通知。用户在通知窗口中单击“确定”后,我想解锁界面并删除activity indicator。但是怎么做呢?何时何地调用lock接口函数?

【问题讨论】:

    标签: ios swift user-interface in-app-purchase in-app-subscription


    【解决方案1】:

    在我的项目中,我通常使用https://github.com/SVProgressHUD/SVProgressHUD 来显示加载。在您的情况下,当用户点击购买按钮时,您需要显示SVProgress.show()。并在所有购买完成时添加SVProgress.dismiss()SVProgress.showErrorWithStatus(error.localizedDescription),当您遇到付款问题时。

    在 SKPaymentTransactionObserver 上有 func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) 在这个函数上,你可以像这个例子一样检查状态 paymentQueue:

    func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
        for t in transactions {
            switch t.transactionState {
            case .purchasing, .deferred: break // do nothing
            case .purchased, .restored:
                let p = t.payment
                if p.productIdentifier == whatever {
                    queue.finishTransaction(t)
                    SVProgress.dismiss() 
                }
            case .failed:
                queue.finishTransaction(t)
                SVProgress.showErrorWithStatus("Error message")
            }
        }
    }
    

    【讨论】:

    • 我需要在我的购买操作中使用SVProgress.show()(当用户点击它时)。但是为什么你在paymentQueuecase .purchased 中使用SVProgress.show()?我想我应该在 `case .purchased? 中使用SVProgressHUD.dismiss()
    • @User 你是对的!我在我的答案中修复了它。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多