SKPayementQueue:恢复交易完成而不在发布配置中调用“updatedTransactions”但不是调试配置

Posted

技术标签:

【中文标题】SKPayementQueue:恢复交易完成而不在发布配置中调用“updatedTransactions”但不是调试配置【英文标题】:SKPayementQueue: restoring transactions finishes without calling 'updatedTransactions' in release config but not debug config 【发布时间】:2009-11-13 01:58:35 【问题描述】:

我正在调试恢复事务,在我的调试配置中一切正常:

我调用的IE:

  [[SKPaymentQueue defaultQueue] restoreCompletedTransactions];

稍后队列调用:

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions

然后它会调用:

- (void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue 

每个人都很开心。

但是在我的发布配置中,我从未看到对 updatedTransactions 的调用,因此我从未真正恢复购买。

可能相关,在我尝试还原后它不起作用。我重新启动应用程序,发现向商店索取产品列表时没有得到响应。

【问题讨论】:

我相信这是 storekit 中的一个错误。 发布调试/发布配置中的差异会有所帮助。只是代码签名和优化不同,还是还有其他变化? StoreKit 真的很糟糕;我认为卡尔是对的。我希望你能解决问题,但如果这个问题持续一段时间,我不会感到惊讶。 我遇到了同样的问题。这是4年后的错误吗?或者有什么方法可以进行不同的测试或更改代码? 【参考方案1】:

此错误情况与配置无关。这是商店套件中的间歇性错误。

【讨论】:

【参考方案2】:

Carl,正如您所说,这似乎是一个间歇性错误。 但是,我还发现,如果我使用美国商店对其进行测试,它不会发生(或者至少我还没有看到)。我一直在使用英国测试用户,今天它每次都失败了。创建了一个美国测试用户,自动切换到美国商店后,再次完美运行。 这不是一个修复,但它可能有用;)

【讨论】:

【参考方案3】:

你是这样把你的支付对象添加到支付队列中的吗?

SKPayment *payment = [SKPayment paymentWithProductIdentifier:"您的产品标识符"]; [[SKPaymentQueue defaultQueue] addPayment:payment];

如果你使用这种方式,那么在支付队列中添加支付对象后会立即调用UpdatedTransactions。你不必显式调用它。它由store kit处理。

【讨论】:

这与 OP 的恢复问题有什么关系?

以上是关于SKPayementQueue:恢复交易完成而不在发布配置中调用“updatedTransactions”但不是调试配置的主要内容,如果未能解决你的问题,请参考以下文章

处理恢复购买时如何处理旧交易?

自己动手写数据库:实现交易对象和恢复管理器

自己动手写数据库:实现交易对象和恢复管理器

Swift presentViewController 完成块仅在调试中工作而不在发布中调用

如何从自动完成建议中接收关键字,而不在 jQuery UI 的末尾添加逗号?

PayPal Rest 首次通话不会出现在沙盒交易中