【发布时间】:2020-04-30 03:11:54
【问题描述】:
我有一个具有自动续订订阅的 macOS 应用程序。我正在阅读文档,无法完全理解这个概念。根据文档,我必须在支付队列中添加和观察者。如果重新安装了应用程序,我必须提供恢复功能来恢复购买。我的观察者正在监听队列,一旦我调用 SKPaymentQueue.default().restoreCompletedTransactions() 方法,它就会恢复交易。但是,我看不到订阅是否过期或不只是使用观察者。我在支付队列中收到的交易对象只有一些抽象的交易 ID。
文档建议验证收据。我将 base64 编码的收据发送到我的服务器,然后将其发送到 verifyReceipt 端点。即使我发送旧收据,Apple 也会以包含 latest_receipt_info 的 JSON 响应,我可以在其中看到订阅的当前状态及其到期日期。如果到期日期早于当前日期,我可以假设订阅无效。
问题是为什么我必须调用 SKPaymentQueue.default().restoreCompletedTransactions() 方法来恢复购买,如果我可以刷新收据(如果它丢失)并将其发送到我的服务器并获取最近的信息?在我看来,这是多余的。所以我的用法是:
- 收听支付队列
- 当我看到具有特定 productId 且到期日期晚于当前日期的交易时,在我获得购买状态的交易后立即执行收据验证并解锁付费功能
- 如果我看到具有特定 productId 且到期日期晚于当前日期的交易,则在用户单击恢复按钮时执行收据验证并解锁付费功能
- 在每次启动应用程序时执行收据验证以检查订阅状态
- 如果应用未关闭但订阅已过期,则每 12 或 24 小时执行一次收据验证以禁用付费功能
我是否清楚地理解了这个概念,或者我在这里遗漏了什么,因为我没有看到调用 SKPaymentQueue.default().restoreCompletedTransactions() 方法的好处?
【问题讨论】:
标签: macos in-app-purchase app-store