Flutter iOS端接入RevenueCat沙盒测试订阅试用的过期字段与测试方法疑问
正式生产环境下
latestExpirationDate的取值规则 latestExpirationDate是当前用户所有生效订阅权益的最近到期时间,不存在“跳过试用阶段只记录付费期时间”的逻辑:
- 如果用户处于免费试用周期内,该字段的值会直接对应免费试用的结束时间——也就是用户首次被Apple扣订阅费的节点,本质是用户当前可享有的全部权益的最终截止时间
- 当免费试用结束、用户进入正常付费订阅扣费周期后,该字段会自动更新为当前付费周期的结束时间
你当前测试日志的核心异常
从你贴出的日志可以直接看到,当前返回的权益对象中periodType: PeriodType.normal,这说明你现在的沙盒测试根本没有走到免费试用的购买分支,是直接按标准付费价格完成了沙盒订阅购买:
- 沙盒环境下正常付费订阅的时长会被压缩,月度订阅的沙盒周期就是5分钟,和你日志里看到的“5分钟后到期”完全匹配
- 真正的免费试用购买完成后,该字段一定会返回
PeriodType.trial,而非normal
获取试用结束时间的对应字段
不需要额外寻找独立字段记录试用结束时间,EntitlementInfo结构中的expirationDate本身就覆盖了试用周期的截止时间:
- 当用户处于免费试用阶段,对应权益的
expirationDate值就是免费试用的结束时间,这个时间会同步同步到顶层latestExpirationDate字段 - 注意沙盒环境的时长压缩规则:你在App Store Connect配置的正式环境7天免费试用,在沙盒环境下会被等效压缩为3分钟试用时长,对应的expirationDate就是购买后3分钟的时间,和正式环境的试用时长是一一映射的
RevenueCat下iOS订阅试用的完整测试流程
- 前置校验:在拉起购买弹窗前,先调用RevenueCat的试用资格校验接口,确认当前沙盒账号符合Introductory Offer的试用资格——Apple的规则是同一Apple ID在同一个订阅组内只能享受一次试用资格,之前用过试用的沙盒账号会直接被判定无资格,自动跳过试用按标准价格扣费
- 购买逻辑校验:拉起购买流程时,确认代码没有强制指定按非试用价格购买,系统会自动对符合资格的用户应用对应的Introductory Offer优惠
- 购买返回校验:试用购买完成后,检查返回的PurchaserInfo结构中,对应权益的
periodType是否返回PeriodType.trial,同时核对expirationDate是否为沙盒压缩后的试用时长(3分钟左右) - 流转逻辑校验:等待沙盒的试用时长走完,重新拉取PurchaserInfo,确认权益状态自动切换为
PeriodType.normal,expirationDate更新为沙盒下的付费订阅周期时长(月度订阅对应5分钟),即代表完整的试用流程验证通过
内容的提问来源于stack exchange,提问作者echoalpha
相关产品推荐
相关产品推荐

