SwiftUI 自动续订订阅流程

SwiftUI Auto-Renewable Subscription flow

我已经在我的应用程序中实现了应用程序内购买自动续订订阅,但我不确定我是否正确地完成了它,因为该应用程序不断要求登录 iTunes。

在用户案例中:我订阅了按月付款,我的第一个月已经结束并希望它自动续订。

我目前的流程如下...

  1. (在App Delegate中)检查收据是否有效

  2. (如果收据有效)检查所有收据的最新有效期

  3. (如果过期 - 第一个月结束后似乎是这种情况)调用 SKReceiptRefreshRequest 获取最新收据。我已经对此进行了计数检查,否则它会陷入永无止境的循环。

  4. 最后检查最新的收据是否确实过期。

这是解决这个问题的正确方法吗?如果没有,你能对此有所启发吗?

除了 iTunes 登录的烦人之外,一切似乎都运行良好。我想在 Sandbox 环境之外每月只有一次,这还不错,但只是想确保我做的正确。

谢谢

不要调用 SKReceiptRefreshRequest。此请求通常仅针对“恢复购买”机制。这就是为什么您要在对话中登录的原因。 StoreKit会return给你只要你一个观察者到支付队列:https://developer.apple.com/documentation/storekit/skpaymentqueue/1506042-add so you should add yourself to the payment queue on app launch. Then keep that object aline to listen for changes for the entire app lifecycle. You will receive the renewals in the updatedTransactions callback https://developer.apple.com/documentation/storekit/skpaymenttransactionobserver/1506107-paymentqueue

其次,您应该在自己的服务器上而不是在客户端上进行收据验证,因为它容易受到 MITM 攻击。您还可以轻松控制那里的逻辑并接收服务器到服务器的通知,这最适合管理订阅。