如何正确处理自动续费订阅(iOS)的续费

如何正确处理自动续费订阅(iOS)的续费,ios,in-app-purchase,storekit,subscriptions,Ios,In App Purchase,Storekit,Subscriptions,在apple文档中找到此语句: 成功续订订阅后,Store Kit会添加 用于续订到事务队列的事务。你的应用程序检查 启动时的事务队列,并以相同的方式处理续订 与任何其他交易一样 如果我只在开始时执行此操作: [[SKPaymentQueue defaultQueue] addTransactionObserver:self]; 没有发生任何事情-订阅未续订(使用测试模式) 如果我加上 [[SKPaymentQueue defaultQueue] restoreCompletedTransac

在apple文档中找到此语句:

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

如果我只在开始时执行此操作:

[[SKPaymentQueue defaultQueue] addTransactionObserver:self];
没有发生任何事情-订阅未续订(使用测试模式)

如果我加上

[[SKPaymentQueue defaultQueue] restoreCompletedTransactions];
然后,它运行了完整的购买历史,这也不是我想要的


正确的处理方法是什么

您需要了解的一件事是,在沙盒环境中测试自动续费订阅时,有时订阅不会续费,也不会收到商店的续费电话

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


只需添加
[[SKPaymentQueue defaultQueue]addTransactionObserver:self]
当您的应用程序启动并投入生产时,它将得到更新,您将收到呼叫。

苹果应用内购买storkit文档:-

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

也就是说, 若用户的订阅是自动续费的,而当时我们的应用程序并没有运行,那个么苹果会将续费的交易添加到交易队列中。所以,当您打开应用程序时,我们可以从事务队列中获取更新的事务详细信息

storekit文档中提到的另一项声明如下:

请注意,如果订阅续订时您的应用程序已在运行,则不会调用transaction observer;您的应用程序在下次启动时会发现续费

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

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

&对于验证订阅,有两种方法可用:

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


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

评论和文档是正确的:在开始时将transaction observer添加到PaymentQueue就足够了。在我的例子中,对于我一直使用的沙盒用户,还没有触发续订。我创造了一个新的,它的工作

对于我的情况,在订阅的沙盒测试中,它只会在第一次订阅购买时自动续订5次订阅。后续订阅购买将在购买后停止续订。测试的唯一方法是重新创建一个新的沙盒用户并再次测试。冲洗并重复

这就是我在续费时不会收到呼叫的要点,即使我在开始时添加了事务观察者。问题的解决方案毫无意义:当事务观察者未被调用时,添加事务观察者并不能解决应用程序运行时没有事务的问题。你能澄清你的意思吗?
SKPaymentQueue.defaultQueue().addTransactionObserver(SubscriptionObserverClassReference)