You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

沙盒环境iOS自动续期订阅未自动续订问题咨询

沙盒环境下自动续期订阅收据的那些事儿

首先直接给你明确答案:沙盒环境下自动续期订阅的应用收据是会自动更新的,但有几个容易踩坑的限制和触发条件,你遇到的问题大概率是没满足这些条件导致的

我结合自己踩过的坑,给你拆解下:

沙盒订阅的核心规则

  • 加速续订周期:为了方便测试,苹果把沙盒里的订阅周期大幅缩短了——比如1周订阅会在5分钟后自动续订,1月订阅是10分钟,1年订阅则是1小时。而且整个订阅生命周期内最多会自动续订6次(和你看到的文档“每日最多6次”对应,本质是沙盒的次数限制),之后订阅就会彻底过期,不会再续了。
  • 收据不会主动推送:系统不会把更新后的收据主动塞给你的应用,你必须主动触发刷新才能拿到最新的订阅状态。如果只是读取本地缓存的旧收据,自然看不到后续的续订记录。

你遇到问题的可能原因

你说“首次查询有效,后续失效”,大概率是这个情况:

  • 首次查询时,你读取的是刚订阅成功后的初始收据,状态是有效的;
  • 之后订阅自动续订了,但你没有主动刷新收据,一直读的是本地旧缓存,所以看起来“失效”了。

解决步骤

  1. 主动刷新收据:每次需要检查订阅状态时,调用SKReceiptRefreshRequest来获取最新的收据,而不是直接读取本地存储的版本。示例代码大概是这样:
    let request = SKReceiptRefreshRequest(receiptProperties: nil)
    request.delegate = self
    request.start()
    
    记得实现SKRequestDelegate的回调,在刷新成功后再解析收据内容。
  2. 处理刷新失败的情况:沙盒环境偶尔会出现网络延迟或服务器响应慢的情况,要做好错误处理,比如简单的重试机制。
  3. 重置测试状态:如果已经续订了6次,订阅会停止续期,这时候你可以去App Store Connect的沙盒测试账号页面,重置该账号的订阅状态,或者换一个新的测试账号重新测试。
  4. 前台触发刷新:也可以在应用从后台回到前台时,触发一次收据刷新,确保用户每次打开应用都能拿到最新的订阅状态。

额外提醒

沙盒环境的行为和生产环境有细微差别,比如生产环境的续订是按真实周期来的,而且没有6次的限制,但收据刷新的逻辑是一致的——都需要主动触发才能获取最新状态。

内容的提问来源于stack exchange,提问作者mistakeNot

火山引擎 最新活动