首页 > 解决方案 > 自动更新订阅在沙盒中永不过期

问题描述

我已经使用 StoreKit 在我的应用中成功实现了自动更新订阅(应用内购买)。我仍处于开发模式,所以我使用沙盒用户进行测试。一旦我使用沙盒环境订阅了每月订阅,我就可以访问“高级内容”。我使用 UserDefaults 表示用户购买了产品。我还没有实施收据验证。

我的问题是订阅永远不会过期,因为我可以随时访问高级内容,订阅到期后的方式,即最大。30 分钟,因为在测试模式下会加速更新(6 * 5 分钟)

我的问题:如果我们将购买的产品存储在 userDefaults 中,自动更新订阅是否会过期?我是否必须使用收据验证才能使自动续订订阅过期?

private func productPurchaseCompleted(identifier: ProductID?) {
        guard let identifier = identifier else { return }

        purchasedProductIDs.insert(identifier)
        UserDefaults.standard.set(true, forKey: identifier)
        productPurchaseCompletionHandler?(true, identifier)
        clearHandler()
    }

标签: swiftin-app-purchasesubscriptionstorekitreceipt-validation

解决方案


确定订阅是否对用户仍然有效的唯一方法是通过收据验证。

  1. 最好的方法是将收据文件存储在您的服务器上,并定期使用 Apple 的/verifyReceipt端点刷新它以查看是否有任何更改。(有关详细信息,请参阅iOS 订阅很难)。

  2. 如果您只是在寻找快速而肮脏的东西,您可以在本地进行验证,并将订阅的到期日期存储在用户默认值中。启动时检查设备时间是否早于到期日期。如果设备时间在到期日期之后,您只需重新验证以检查订阅是否续订。

第二种方法是一种不安全、不可扩展的订阅方式,但对于一个小项目来说,它会“工作”。推荐的方法是通过#1 中提到的服务器端收据验证和状态跟踪。


推荐阅读