【问题标题】:Remove Old SKPayment From Queue从队列中删除旧的 SKPayment
【发布时间】:2014-04-30 22:55:15
【问题描述】:

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

但是,我似乎遇到了 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。旧的用户提示仍然出现!

任何帮助将不胜感激,谢谢。

【问题讨论】:

    标签: ios app-store-connect storekit


    【解决方案1】:

    它们是沙盒交易还是生产交易?

    沙盒事务非常混乱,有时我发现队列中有旧事务,并且沙盒事务的生命周期与生产事务的生命周期并不完全一致

    【讨论】:

    • 是的,我暂时使用的是沙盒 API。嗯,你这么说很有趣,这可以解释事情。虽然我不确定我是否有信心发布应用程序,希望它实际上只是沙盒交易。
    • 我也有同样的疑问,我花了几天时间试图了解我的沙盒队列中出现了什么然后我决定忽略它们并发布应用程序,我发现这只是沙盒问题......
    • 很高兴我不是唯一遇到这种情况的人。即使在生产/从商店下载后,我是否仍会继续在我的测试设备上收到这些不可靠的交易?我认为队列以某种方式与我的设备绑定...
    【解决方案2】:

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

    将此添加到您的应用委托:

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

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

    【讨论】:

      猜你喜欢
      • 2022-01-13
      • 2012-12-17
      • 1970-01-01
      • 1970-01-01
      • 2016-01-31
      • 2018-12-11
      • 2012-08-17
      • 2016-08-01
      相关资源
      最近更新 更多