【发布时间】:2020-04-08 06:25:14
【问题描述】:
我创建了一个具有自动续订订阅的应用。
以下是我用来知道用户是否有活动订阅的逻辑。
- 每当调用
SKPaymentQueue的paymentQueue(_:updatedTransactions:)时,我都会尝试使用以下步骤执行收据验证 - 我检查本地收据是否存在。如果不存在,我使用
SKReceiptRefreshRequest刷新收据。 - 我将收据信息发送到 App Store 服务器的
verifyReceipt端点。 - 服务器返回响应,其中包含有关订阅到期日期的信息。
- 我将到期日期存储在应用程序中,并根据用户是否有有效订阅来显示相应的 UI。
App Store 审核多次拒绝我的应用,因为 SKReceiptRefreshRequest 出错。我无法重现 App Store 审查委员会面临的错误。
在网上搜索解决问题时,我了解到以下有关本地收据的事实-
- 本地收据始终存在于生产模式中。如果使用 Testflight 或在测试期间安装应用程序,本地收据可能不会出现。 (link)
- App Store 服务器会返回最新的订阅信息,即使它发送了旧的本地收据 (link)
从以上 2 条信息,我推断在生产中无需调用SKReceiptRefreshRequest,因为即使本地收据旧且本地收据始终存在,App Store 服务器也会提供最新的详细信息正在生产中。
为了让我的应用通过 App Store 审核,我决定删除 SKReceiptRefreshRequest,因为它会在 Testflight 构建中产生错误,并且在生产中不需要。
谁能确认我这样做是否正确?
【问题讨论】:
标签: ios in-app-purchase receipt-validation