iOS:购买时恢复之前购买的应用内商品,但不更新交易

标签 ios xamarin.ios in-app-purchase

我有一个适用于 iOS 的 Xamarin 应用,可以进行应用内购买。在测试过程中,我购买了一种消耗品,但没有完成交易(因错误而崩溃)。现在,如果我重新安装该应用程序,它允许购买此产品,但当然会恢复它并显示消息“该产品已免费恢复”。

此行为是预期的,但未触发队列监听器的 UpdatedTransactions。我可以通过 StoreKit.SKPaymentQueue.DefaultQueue.Transactions 直接检查队列,但我需要知道用户交互何时完成(用户在该消息对话框中按确定)。但是没有触发任何监听器方法。 据我从 Apple 文档中了解到,此后必须进行交易更新。也许它在我尝试购买之前就被解雇了。但是,我是否应该在购买前手动检查队列?

最佳答案

我没有使用 Xamarin,但 StoreKit 是 iOS 功能的底层,因此它无法在 Xamarin 中以其他方式工作。该事件必须提前触发。一旦添加交易观察者([[SKPaymentQueue defaultQueue] addTransactionObserver:self]),您将收到所有未决交易的更新回调。如果在启动应用程序时完成此操作(并且应该这样做),则在您到达购买屏幕时,您将更新交易。对我来说,这是 IAP 开发中最棘手的部分,因为您必须在应用程序启动时以及在您拥有它们的所有屏幕中处理它们,并且回调可能随时发生。

另请注意,此待处理交易可能会在交易列表中出现多次(我主要使用非消耗品,因此每次重新启动应用程序时都会添加新交易而不关闭所有待处理交易)。为此,我有一个组件,一旦应用程序启动,它就会被添加为事务观察器,监听更新的事务并将它们存储在实例变量中供以后使用。在开始新的购买之前,我会检查是否有具有相同产品 ID 的待处理交易并采取相应行动。

希望这对您有所帮助。

关于iOS:购买时恢复之前购买的应用内商品,但不更新交易,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41140477/

相关文章:

ios - Swift:模板定义中的常量

iphone - ASIHTTPRequest 将响应数据转换为 NSArray

ios - Xamarin.iOS - 如何动态更改标签字体大小?

iphone - 在单点触控应用程序中支持 ios 5

ios - Swift 解析 PubNub Mach-O 错误

c# - 无论设备时区如何,都获取特定时区的 DateTime.Now?

ios - 应用内购买还原

ios - 无法删除 iTunes 测试帐户

ios - 在 iOS 中取消付款?

iOS 8 : UIAlertView/UIAlertController not showing text or buttons