在苹果的文档中发现了这一声明:
订阅成功续订后,Store将更新的事务添加到事务队列中。您的应用程序在启动时检查事务队列,并以与其他事务相同的方式处理更新。
如果我一开始就这么做的话:
[[SKPaymentQueue defaultQueue] addTransactionObserver:self];什么都没有发生-订阅没有更新(使用测试模式)。
如果我加上
[[SKPaymentQueue defaultQueue] restoreCompletedTransactions];然后,它超越了完整的历史购买,这也不是我想要的。
正确的处理方法是什么?
发布于 2017-01-31 09:41:17
您需要了解的一件事是,在沙箱环境中测试自动可再生订阅时,有时订阅不会得到更新,也不会收到商店的更新调用。
这在沙箱中是正常的,在沙箱环境中调用restoreCompletedTransactions有时会触发商店的更新。沙箱中订阅本身的持续时间是不同的:下面是沙箱中的持续时间表:

只要添加[[SKPaymentQueue defaultQueue] addTransactionObserver:self],当你的应用程序启动,在生产中,它将得到更新,你将收到电话。
发布于 2017-02-01 06:59:15
Apple购买存储工具包文档:-
订阅成功续订后,Store将更新的事务添加到事务队列中。您的应用程序在启动时检查事务队列,并以与其他事务相同的方式处理更新。
这意味着,如果用户的订阅是自动更新的,而当时我们的应用程序没有运行,那么Apple在交易队列中添加了更新的交易。因此,当您打开应用程序时,我们可以从事务队列中获得更新的事务细节。
在storekit文件中还提到了另一条声明,如:
请注意,如果您的应用程序在订阅更新时已经在运行,则不会调用事务观察者;您的应用程序在下次启动时会发现更新的情况。
解决方案:如何处理自动更新订阅?
根据Apple的最佳实践,我们应该在AppDelegate的“didFinishLaunchingWithOptions”中添加以下一行:-
SKPaymentQueue.defaultQueue().addTransactionObserver(SubscriptionObserverClassReference)&用于验证订阅,有两种可用方式:
1)使用服务器:设置验证用户订阅的cron作业,绕过用户的订阅过期日期。因此,我们可以根据过期日期识别更新或未更新的用户订阅。
2)使用StoreKit观察者:-每次更新用户订阅时,我们都会得到更新的事务信息。因此,我们可以在此基础上采取相应的行动。
发布于 2017-02-03 14:38:42
注释和文档是正确的:在start上向PaymentQueue添加事务观察者就足够了。在我的例子中,对于我一直使用的Sandbox用户来说,更新没有被触发。我创造了一个新的,它起作用了!
https://stackoverflow.com/questions/41945384
复制相似问题