如何管理带免费试用期的Google Billing订阅并隐藏冗余基础方案
Google Play 订阅冗余优惠隐藏实现方案
一、Play Console 端标签配置
offerTags是官方支持的最稳定实现方案,不需要额外硬编码映射,完全支持远程配置优惠的需求,配置规则如下:
- 为每个无额外权益的纯基础方案设置唯一关联标识标签,格式建议统一为
base_plan:[自定义基计划标识]:比如1个月纯基计划(对应Offer1)打标签base_plan:p1m,6个月纯基计划(对应Offer3)打标签base_plan:p6m - 所有挂载在对应基础方案下的优惠(比如带1周免费试用的Offer2,后续新增的首单折扣、升级折扣等优惠都算),必须打上和所属基础方案完全一致的关联标签:比如Offer2属于6个月基计划下的优惠,就同样打
base_plan:p6m标签,可额外增加offer_type:free_trial这类标签做优惠类型区分 - 标签配置后不要随意修改,同属一个基计划的纯基计划条目、其下所有挂载的优惠条目,关联标签必须完全一致
二、端侧过滤逻辑
核心逻辑完全基于Billing接口返回的结果做本地处理,不需要额外接口请求,也不需要自己实现用户资格判断:
- 调用
queryProductDetailsAsync拿到对应订阅产品的所有offer列表后,先遍历每个offer的getOfferTags()返回值,提取出base_plan:开头的关联标签,按标签值对所有offer做分组,同一个标签下的offer归属同一基础方案 - 给同组内的offer做优先级排序,排序规则按优惠吸引力从高到低设定:
- 最高优先级:带免费试用期的offer
- 次优先级:带限期折扣(比如首月半价)的offer
- 最低优先级:无任何额外权益的纯基础方案offer
- 每个分组仅保留优先级最高的1个offer用于前端展示,同组其余低优先级offer直接过滤不展示:
- 当用户符合免费试用资格时,接口会返回Offer2和Offer3,二者同属
base_plan:p6m分组,Offer2优先级更高,Offer3会被自动过滤隐藏 - 当用户不符合免费试用资格(比如已经试用过、试用期内取消过订阅),Google Billing会自动过滤掉Offer2不返回,此时分组内仅存在Offer3,就正常展示6个月纯基础方案,完全符合预期
- 当用户符合免费试用资格时,接口会返回Offer2和Offer3,二者同属
- 不需要额外实现用户资格校验逻辑,Billing库本身已经完成了资格判断,不会给无资格用户返回不可用的优惠
三、兼容扩展
- 后续如果需要在某个基础方案下新增优惠类型,只需要在Play Console给新优惠打上对应基计划的关联标签,同时在端侧排序规则里补充新优惠类型的优先级即可,不需要修改核心分组过滤逻辑,完全支持远程管理优惠配置的需求
- 标签匹配时建议做大小写不敏感处理,避免因为Console端标签输入的大小写差异导致分组匹配失败
- 如果某个基础方案没有配置任何额外优惠,分组内仅存在纯基计划offer,会正常展示不会遗漏
内容的提问来源于stack exchange,提问作者Manuel
相关产品推荐
相关产品推荐

