swift - 自动更新订阅在沙盒中永不过期
问题描述
我已经使用 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()
}
解决方案
确定订阅是否对用户仍然有效的唯一方法是通过收据验证。
最好的方法是将收据文件存储在您的服务器上,并定期使用 Apple 的
/verifyReceipt
端点刷新它以查看是否有任何更改。(有关详细信息,请参阅iOS 订阅很难)。如果您只是在寻找快速而肮脏的东西,您可以在本地进行验证,并将订阅的到期日期存储在用户默认值中。启动时检查设备时间是否早于到期日期。如果设备时间在到期日期之后,您只需重新验证以检查订阅是否续订。
第二种方法是一种不安全、不可扩展的订阅方式,但对于一个小项目来说,它会“工作”。推荐的方法是通过#1 中提到的服务器端收据验证和状态跟踪。
推荐阅读
- python - 如何删除字符串中两个代码标签之间的逗号、句号和分号?
- python - 如何避免短文本分类中的实体过拟合?
- java - 运行嵌入式 ElasticSearch 时权限被拒绝异常
- android - Android - 配置文件 CONTENT_URI 返回零计数光标
- php - 如何在PHP中检查文件是否存在?
- python - Elif 语句每隔一次只返回正确的输出
- dspace - 在 DSPace 中使用 REST 将项目设为私有
- angular - 如何在角度上有 Markdown 的响应图像?
- ios - How to send two reponses to a GCDWebServer request
- django - 如何以 RESTfull 方式处理登录用户的 django 后端请求?