如何从in-app-billing响应中识别base plans及关联offers
核心原因
Google Play Billing库从5.0版本开始,不会在queryProductDetailsAsync接口响应中明文返回你在Play Console配置的base plan ID、offer ID字符串,所有订阅配置的匹配都需要通过offerTags字段结合定价规则完成。
识别规则
你可以按照以下逻辑从响应中区分base plan和其下挂载的offer:
subscriptionOfferDetails数组的每一项,对应一个用户可直接购买的订阅选项,既包含无折扣的base plan本身,也包含base plan下配置的所有带优惠的offer- 同一base plan下的所有订阅选项,会共享你给该base plan配置的专属offer标签
- 无折扣的base plan对应的条目,
offerTags数组里仅包含base plan自身的标签,没有额外标签 - 优惠offer对应的条目,
offerTags数组会同时包含所属base plan的标签 + 该offer自身的标签 - 可以通过
pricingPhases交叉校验:同一base plan下的所有offer,最后一个续费阶段的价格、计费周期和base plan本身完全一致
对应你返回结果的匹配结果
你配置的2个base plan、各挂载2个offer的结构,和返回内容完全对应:
月付base plan(标签为baseplan)
- base plan本体:对应数组最后1项,
offerTags为["baseplan"],定价为每月₹460.00,无首购优惠,按月自动续费 - 关联offer1:对应数组第5项,
offerTags为["baseplan", "offer1"],规则为前12个月每月付费₹414.00,到期后恢复每月₹460.00续费 - 关联offer2:对应数组第4项,
offerTags为["baseplan", "offer2"],规则为前6个月每月付费₹368.00,到期后恢复每月₹460.00续费
半年付base plan(标签为baseplan6m)
- base plan本体:对应数组第3项,
offerTags为["baseplan6m"],定价为每6个月₹700.00,无首购优惠,每半年自动续费 - 关联offer3:对应数组第1项,
offerTags为["baseplan6m", "offer3"],规则为前2个计费周期(共12个月)每6个月付费₹630.00,到期后恢复每6个月₹700.00续费 - 关联offer4:对应数组第2项,
offerTags为["baseplan6m", "offer4"],规则为前3个计费周期(共18个月)每6个月付费₹665.00,到期后恢复每6个月₹700.00续费
开发提示
- 发起订阅购买时,直接传入对应订阅选项的
offerIdToken即可,不需要使用控制台配置的明文ID - 建议你在Play Console创建base plan、offer时,给每个资源配置全局唯一的
offerTag,后续端上直接通过标签匹配对应商品即可,不要依赖接口返回明文ID的逻辑
内容的提问来源于stack exchange,提问作者VIISHRUT MAVANII
相关产品推荐
相关产品推荐

