自动续期订阅校验:是否需同时检查cancellation_date_ms与expires_date_ms?
Apple自动续期订阅:取消后的到期时间与有效性判断
嘿,这个问题问到点子上了,我之前处理订阅逻辑的时候也纠结过这俩字段,给你详细拆解下:
1. 用户通过Apple支持取消订阅后,expires_date_ms会变吗?
答案是不会。Apple支持处理的取消通常分两种场景:
- 「取消自动续订,但保留当前周期权益」:用户只是不想后续被扣费,但当前订阅期的服务还能用到原本的到期时间,这时候
expires_date_ms完全不变,只是auto_renew_status会变成0。 - 「立即取消并退款」:这种情况用户申请了全额退款,Apple支持批准后,
expires_date_ms还是原来的到期时间,但会新增cancellation_date_ms字段标记取消操作的时间。
简单说:无论哪种取消方式,expires_date_ms都不会被修改,它始终代表原本订阅周期的结束时间。
2. 要不要额外检查cancellation_date_ms?
必须要,这是判断订阅有效性的关键补充项!
你的原逻辑只看expires_date_ms和status,会漏掉「用户已经通过Apple支持取消并退款,权益立即失效」的场景。正确的判断逻辑应该是这样的:
- 第一步:从
latest_receipt_info里筛选出status为0的有效收据记录(排除无效收据) - 第二步:找到其中
expires_date_ms最大的那条记录(这是用户最新的订阅周期记录) - 第三步:重点检查这条记录是否存在
cancellation_date_ms:- 如果存在:说明这个订阅已经被Apple官方取消(通常是退款场景),无论
expires_date_ms是否还没到,都应该判定为非活跃订阅,停止提供服务。 - 如果不存在:再对比当前时间和
expires_date_ms,如果当前时间小于到期时间,就是活跃订阅;反之则订阅已过期。
- 如果存在:说明这个订阅已经被Apple官方取消(通常是退款场景),无论
另外补充个细节:如果是用户自己在iOS设置里取消自动续订,不会生成cancellation_date_ms,只会把auto_renew_status设为0,这时候用户当前周期的服务还是有效的,直到expires_date_ms到期,这种情况你的原逻辑是能覆盖的,但结合auto_renew_status可以提前告知用户后续不会自动续订。
内容的提问来源于stack exchange,提问作者Dmitry Klochkov
相关产品推荐
相关产品推荐

