使用后端服务器时,iOS处理本地SkpaymentTransaction



我正在创建具有自动续订订阅的iOS应用程序。我一直在阅读很多教程和文档,但我对如何处理某些方案有些困惑。

这是我的应用程序的工作方式:

  1. 用户安装应用程序
  2. 用户在注册流中创建帐户
  3. 要求用户选择一个计划并在注册流中付款
  4. 付款收据已上传到我的服务器,我在数据库中激活了他们的帐户。
  5. 我的服务器会定期轮询/verifyReceipt端点,以续订用户的帐户或取决于Apple的最新信息。(或使用Apple的新状态更新通知,两者都具有相同的目的,可以在服务器上获得最新的订阅信息)

一个月后,订阅续订我知道交易将出现在用户设备上的SKPaymentQueue上。因此,很多教程/文档建议您使用AppDelegate实现SKPaymentTransactionObserver协议,以便您可以随时处理交易。

但是,我没有使用AppDelegate。我在注册中使用了视图控制器,用户选择了他们的计划来实现SKPaymentTransactionObserver

我的理由是,由于我收到了有关后端的信息,因此我需要关心每月订阅续订时每月在客户的队列中出现的交易吗?我不能只是忽略这些交易,还是需要在它们上调用queue.finishTransaction

我还阅读了一些有关恢复交易的内容,当用户删除应用程序并重新安装或获取新手机时。同样,我需要担心这个吗?因为我仍然应该知道后端上的订阅,并且用户在获得新电话时必须要做的是登录他们的服务帐户,它将检查后端以查看他们的订阅是否处于活动状态。p>我想我的较大问题是:当您有后端处理IAP自动续订订阅时,您能否忽略客户付款等级的某些事情,因为该功能是为没有没有的应用程序构建的后端。

最好的做法是在AppDelegate中立即实现观察者,以防万一Apple向用户收取的用户与您升级其帐户之间存在问题 - 如果他们关闭了应用程序或它可能会崩溃,则可能失去交易。

另外,我认为我忘了致电finishTransaction,而烦人的iTunes登录提示不断弹出,不确定这是否是Sandbox的事件。

就像 @paulw11所说。不依赖状态通知。在撰写本文时,他们没有提供足够的信息来更新用户状态,即任何形式的用户标识符。从后端获得的刷新收据是必经之路。如果将新收据发布到SKPaymentQueue(例如续订),则可以像服务器上的用户一样处理它。

这是一篇不错的博客文章,可提供有关服务器上应该发生的事情的更多详细信息: iOS订阅很难

对于您的还原逻辑,如果,您不需要使用Storekit Restore方法您已经通过基于帐户的系统实现了自己的还原功能。如果这是您要走的路线,则绝对应该在AppDelegate中收听SKPaymentQueue,以避免尽可能多的边缘情况,您可能会失去对某人订阅状态的跟踪。良好的" al dredore购买"按钮是修复一些略有缺陷的应用内购买代码的好方法:)

我想我的更大的问题是:当您有后端处理IAP时 自动续订订阅,您可以忽略一些发生的事情吗 付款队列的客户在客户上,因为该功能已构建 对于没有后端的应用程序。

不要忽略付款队列。如果您有自己的基于帐户的还原系统,则可以忽略"还原交易"。

最新更新