Google Play Billing 3.0.3 检测用户是否用过introductory price
Google Play Billing 3.0.3 判断用户是否已使用订阅 introductory price 的实现方法
接口特性说明
BillingClient 3.0.3 中的 SkuDetails.getIntroductoryPrice() 方法,仅返回商品在Play控制台配置的静态优惠参数,不会关联当前登录用户的优惠使用资格,这是该版本的设计特性,并非接口异常。
可落地的判断逻辑
- 通过历史购买记录接口校验用户优惠使用状态
调用queryPurchaseHistoryAsync()拉取当前用户全部历史订阅类购买记录,遍历返回的记录做匹配判断:- 只要某条历史记录属于当前展示订阅所属的商品组,且曾经关联过 introductory price 权益,即可判定用户已经使用过对应优惠,无需再展示优惠信息
禁止使用
queryPurchasesAsync()做资格判断,该接口仅返回当前处于生效状态的订阅,不包含已过期、已自动取消的历史优惠订阅记录,会导致判断遗漏 - 本地缓存做性能优化
首次完成用户优惠资格校验后,将“订阅商品组ID + 本地用户标识”的对应关系持久化到本地存储,后续进入订阅展示页时先读取缓存结果,再定期和服务端拉取的购买记录做数据对账,减少不必要的Billing接口调用 - 资格边界规则对齐
判定时需要和Play侧的优惠规则保持一致,避免逻辑偏差:- 同一个订阅商品组下的所有档位,用户只要在任意档位享受过一次 introductory price,就永久失去同组所有档位的首单优惠资格
- 优惠资格是和Google登录账号强绑定的,跨设备、跨账号的使用记录不需要做额外校验
展示层处理规则
基于上述判断结果做前端展示控制:只有当用户校验通过、确属未使用过优惠的状态时,才渲染 getIntroductoryPrice() 返回的优惠价格文案、相关权益说明;校验不通过的用户直接展示订阅的常规价格,避免重复展示已使用过的优惠权益。
内容的提问来源于stack exchange,提问作者Fran
相关产品推荐
相关产品推荐

