连续订阅设计(apple/google)
公司的业务调整需要接入 apple/google 的连续订阅,看了一下 apple 的产品配置和我们实际的情况,需要支持如下几种配置
- 月付,首期优惠(第一个月的费用低一些)
- 年付,赠送体验时长(有几天的试用时间,到期之后再扣费)
看了一下 apple 的回包数据
通过这个数据我们可以拿到{ "quantity": "1", "product_id": "xxxx", "transaction_id": "xxxx", "original_transaction_id": "xxdef", "purchase_date": "2024-07-04 07:49:55 Etc\/GMT", "purchase_date_ms": "1720079395000", "purchase_date_pst": "2024-07-04 00:49:55 America\/Los_Angeles", "original_purchase_date": "2024-07-02 07:00:03 Etc\/GMT", "original_purchase_date_ms": "1719903603000", "original_purchase_date_pst": "2024-07-02 00:00:03 America\/Los_Angeles", "expires_date": "2024-07-04 07:54:55 Etc\/GMT", "expires_date_ms": "1720079695000", "expires_date_pst": "2024-07-04 00:54:55 America\/Los_Angeles", "web_order_line_item_id": "2342342134235234", "is_trial_period": "false", "is_in_intro_offer_period": "false", "in_app_ownership_type": "PURCHASED", "subscription_group_identifier": "sfewfe", "app_account_token": "" }
expires_date_ms
订阅的到期时间purchase_date_ms
订阅支付时间is_trial_perios
是否是体验周期,如果是体验周期expires_date_ms
就是免费时长的到期时间,比如 3 天免费is_in_intro_offer_period
是否是优惠购买
如果只有订阅的场景,那么我们就可以直接使用expires_date_ms
作为用户的到期时间即可,随着 apple/google 的回调来调整用户的到期时间。
但是产品的业务需求需要在这个基础上做出一些特例,需有支持赠送时长,大概的场景如下:
- 用户有订阅的情况下,用户的到期时间在订阅时长后追加赠送时长,用户一直订阅就用不了赠送时长
- 用户订阅过期的情况下,用户的到期时间就是赠送时间(可以理解从生效时间开始累计),这里有个情况就是假设用户过期很久了突然获得了几天的用户时长,就需要从获取的那一刻开始计算
可能出现但是不需要考虑的问题
- 用户在 apple/google 同时订阅
- 用户在订阅中再次订阅(apple应该是不支持的,具体的还没有测试)
现在有个问题expires_date_ms
和 purchase_date_ms
的差值能否代表用户的订阅时长
如何更方便的存储用户的到期时间,能既满足订阅的动态增长,也满足赠送时长的业务切实现的业务不那么复杂
我自己有一个设计思路但是不够完备和完善,所有就想看看大家有没有更好的方案
感谢大家!
苹果可以再次订阅的时候可以修改本次订阅的到期时间的把,这样就没有用不了赠送时长的问题了。我没对接过不清楚。