如何正确处理autorenewable subscriptions(iOS)的续订

时间:2017-01-30 21:04:49

标签: ios in-app-purchase storekit subscriptions

在Apple文档中找到此声明:

  

成功续订订阅后,Store Kit会添加一个   用于续订事务队列的事务。你的应用检查   启动时的事务队列并以相同的方式处理续订   与任何其他交易一样。

如果我只在开始时这样做:

[[SKPaymentQueue defaultQueue] addTransactionObserver:self];

没有任何反应 - 订阅不会续订(使用测试模式)。

如果我添加

[[SKPaymentQueue defaultQueue] restoreCompletedTransactions];

然后它会在完整的购买历史中运行,这也不是我想要的。

处理它的正确方法是什么?

4 个答案:

答案 0 :(得分:2)

您需要了解的一点是,在沙箱环境中测试自动续订订阅时,有时订阅不会续订,您也无法从商店获得续订服务。

这在沙箱中是正常的,并且在沙箱环境中调用restoreCompletedTransactions有时会触发商店上的续订。沙箱中订阅本身的持续时间不同:以下是沙箱中的持续时间表:

enter image description here

只需在您的应用启动时添加[[SKPaymentQueue defaultQueue] addTransactionObserver:self],然后在制作中,它就会续订,您将接到来电。

答案 1 :(得分:1)

Apple应用内购买storkit文档:

  

成功续订订阅后,Store Kit会将续订事务添加到事务队列中。您的应用程序在启动时检查事务队列,并以与任何其他事务相同的方式处理续订。

这意味着,             如果用户的订阅是自动续订的,那时我们的应用程序没有运行,Apple在事务队列中添加了续订的事务。因此,当您打开应用程序时,我们可以从事务队列中获取更新的事务详细信息。

storekit文档中提到了另一个声明,如: -

  

请注意,如果您的应用在订阅续订时已在运行,则不会调用事务观察器;您的应用在下次启动时会发现续订。

解决方案:如何处理自动续订订阅?

根据Apple storekit的最佳做法,我们应该在AppDelegate的“didFinishLaunchingWithOptions”中添加以下行: -

SKPaymentQueue.defaultQueue().addTransactionObserver(SubscriptionObserverClassReference)

&安培;用于验证订阅,有两种可用方式:

1)使用服务器:设置用于验证用户订阅的用户订阅到期日期的cron作业。因此,我们可以根据到期日期确定是否续订的用户订阅。

2)使用StoreKit Observer:每次续订用户订阅时,我们都会获得续订的交易信息。因此,我们可以据此采取行动。

答案 2 :(得分:0)

评论员和文档是正确的:在启动时将交易观察者添加到PaymentQueue就足够了。在我的情况下,我一直使用的沙盒用户没有触发更新。我创建了新的,它工作了!

答案 3 :(得分:0)

就我而言,在沙盒订阅测试中,仅会在首次订阅时自动续订5个订阅。以后的订阅购买将在购买后停止续订。测试的唯一方法是重新创建一个新的沙箱用户并再次测试。冲洗并重复!