0

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

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

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

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

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

我的理由是,既然我在后端获取信息,我是否需要关心每个月在订阅续订时将出现在客户端队列中的交易?我不能忽略这些交易,还是需要调用queue.finishTransaction它们?

我还阅读了一些有关在用户删除应用程序并重新安装或获得新手机时恢复交易的内容。再说一次,我需要担心这个吗?因为我仍然应该知道后端的订阅,并且用户在获得新手机时所要做的就是登录他们的帐户以获得我的服务,它会检查后端以查看他们的订阅是否处于活动状态。

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

4

1 回答 1

1

最好的做法是立即在 AppDelegate 中实现观察者,以防 Apple 向用户收费和您升级他们的帐户之间出现问题 - 如果他们关闭应用程序或崩溃,您可能会丢失该交易。

另外,我想我有过忘记打电话的情况,finishTransaction并且烦人的 iTunes 登录提示不断弹出,但不确定这是否是沙盒唯一事件。

就像@Paulw11 说的。不要依赖状态通知。在撰写本文时,他们没有提供足够的信息来更新用户的状态,即任何类型的用户标识符。从后端刷新收据是要走的路。如果新收据发布到SKPaymentQueue(例如续订),您可以像处理服务器上用户的任何其他收据刷新一样处理它。

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

对于您的恢复逻辑,如果您通过基于帐户的系统实现了自己的恢复功能,则不需要使用 StoreKit 恢复方法。如果那是您想要走的路线,您绝对应该SKPaymentQueue在 AppDelegate 中收听,以避免尽可能多的边缘情况,您可能会忘记某人的订阅状态。好的“恢复购买”按钮是修复一些有轻微缺陷的应用内购买代码的好方法:)

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

不要忽略支付队列。如果您有自己的基于帐户的恢复系统,则可以忽略“恢复交易”。

于 2019-02-27T01:52:31.577 回答