ios - 恢复码paymentQueue RestoreCompletedTransactions Finished() 是不是必须要有?

标签 ios swift in-app-purchase storekit

我想正确实现恢复以前购买的 IAP 的能力,但是,我已经阅读了一些相互冲突的方法,现在我很困惑。

我在沙箱中使用的方法是从 paymentQueue() 中恢复,就像这样......

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

case .restored:

            defer {
                queue.finishTransaction(transaction)
            }

            if let productIdentifier = transaction.original?.payment.productIdentifier {
                unlockProduct(withIdentifier: productIdentifier)
            }
}

我刚刚在 paymentQueueRestoreCompletedTransactionsFinished() 中有一个警报。其他一些方法在那里有恢复代码,但我认为他们不应该。

我这样做是否正确,我是如何做到的,是一种可以在沙盒环境之外工作的正确方法吗?

谢谢。

最佳答案

您不需要实现 paymentQueueRestoreCompletedTransactionsFinished。正如您所注意到的,这不是实际恢复已完成交易的地方。

我建议您考虑在用户点击“恢复”按钮时提供适当的用户反馈;恢复事务可能需要一些时间,因此您可能需要考虑显示一个事件微调器或其他 UI 元素以指示正在进行恢复。 paymentQueueRestoreCompletedTransactionsFinished 是您应该删除此 UI 的位置。

您还可以跟踪是否实际恢复了任何购买,然后在此功能中显示适当的消息。例如“未找到任何购买”或“已恢复 3 个购买”

关于ios - 恢复码paymentQueue RestoreCompletedTransactions Finished() 是不是必须要有?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50848017/

相关文章:

ios - 将应用从付费转换为应用内购买?我如何找出哪些用户支付了费用?

ios - UIApplicationWillEnterForegroundNotification与application:openURL:sourceApplication:annotation:

ios - 如何从 SwiftUI View 返回到 UIKit?

ios - -[NSManagedObjectContext 保存 :] 中的数组索引越界问题 (NSRangeException)

multithreading - NSSplitViewItem 折叠动画和窗口 setFrame 冲突

ios - Flutter 应用内购买 IOS ProductDetailResponse.productDetails.isEmpty 仅在沙盒模式下

iphone - 检测 "Confirm Your In-App Purchase"UIAlert 的取消按钮点击

ios - 如何对已重命名的方法使用@available?

ios - PaintCode - 更新 View 并传递变量

ios - swiftpresentViewController以编程方式在destinationVC VDL中找到nil