从队列中删除旧SKPayment

时间:2014-04-30 22:55:15

标签: ios itunesconnect storekit

应用内购买与我的应用正常运行。我甚至使用自己的服务器来验证交易收据。

但是,我似乎遇到了SKPaymentQueue TransactionObserver 和/或 DefaultQueue 的问题。

每当我拨打以下电话时,都会出现iTunes提示旧测试帐户 -

SKPaymentQueue *currentQueue = [SKPaymentQueue defaultQueue];

我无法弄清楚当我需要购买或恢复交易时,如何阻止这个旧的测试帐户出现。

有人推荐了以下代码,它似乎可以完成所有旧的交易,但它无法解决我的问题。

SKPaymentQueue* currentQueue = [SKPaymentQueue defaultQueue];
[currentQueue.transactions enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
[currentQueue finishTransaction:(SKPaymentTransaction *)obj];

}];

我还尝试删除该应用,从设备中删除旧的测试帐户以及iTunesConnect。旧的用户提示仍然出现!

非常感谢任何帮助,谢谢。

2 个答案:

答案 0 :(得分:3)

他们是沙箱交易还是生产交易?

沙箱交易是一个很大的混乱,有时我在队列中发现旧的交易,沙箱交易的生命周期与生产交易的生命周期并不完全一致

答案 1 :(得分:0)

我刚刚在我的代码中解决了同样的问题。问题是因为我没有在应用程序退出时删除事务观察器。

将此添加到您的app delegate:

- (void)applicationDidEnterBackground:(UIApplication *)application
{   
   [[SKPaymentQueue defaultQueue] removeTransactionObserver:self.storeManager]; 
}


- (void)applicationWillTerminate:(UIApplication *)application
{   
    [[SKPaymentQueue defaultQueue] removeTransactionObserver:self.storeManager];
}

我还需要重新启动设备以确保它们完全清晰。然后,当您执行恢复所有购买时,系统应该恢复正常。