Android Billing Library中添加7天免费试用后的ProductDetails JSON结构咨询
Android Billing Library中添加7天免费试用后的ProductDetails JSON结构咨询
嗨,我来帮你理清楚这个问题~先直接说结论:你想的JSON1的结构逻辑是对的,但里面有几个细节需要修正,另外JSON2和JSON3的结构都是不符合Google Play Billing Library返回格式的。
核心逻辑说明
在Google Play的订阅模型里,一个包含试用的基础计划,是把试用阶段和后续的常规计费阶段放在同一个subscriptionOfferDetails条目的pricingPhases数组里,因为它们属于同一个优惠方案(同一个basePlan下的完整计费流程)。
修正后的正确JSON结构
{ "productId":"product_id_example", "type":"subs", "title":"title", "name":"name", "description":"product description", "localizedIn":[ "en-US" ], "skuDetailsToken":"sku_details_token_example", "subscriptionOfferDetails":[ { "offerIdToken":"offer_id_token_example", "basePlanId":"yearly", "pricingPhases":[ { "priceAmountMicros":0, "priceCurrencyCode":"EUR", "formattedPrice":"€0.00", "billingPeriod":"P1W", "recurrenceMode":2 }, { "priceAmountMicros":49990000, "priceCurrencyCode":"EUR", "formattedPrice":"€49.99", "billingPeriod":"P1Y", "recurrenceMode":1 } ], "offerTags":[ ] } ] }
关键细节修正与解释
- 货币字段不能空:即使是免费阶段,
priceCurrencyCode也需要和后续计费阶段保持一致(这里是EUR),formattedPrice会返回对应货币的0金额格式(部分地区可能显示“Free”,但Billing Library通常返回标准化的0金额字符串) - recurrenceMode的含义:
recurrenceMode=2:代表这个是一次性计费阶段(试用仅执行一次,且金额为0)recurrenceMode=1:代表这个是自动续费的循环计费阶段(每年自动扣费)
- 计费周期格式:
P1W是ISO 8601标准的7天周期写法,符合Google Play的要求
为什么JSON2和JSON3是错误的
- JSON2:在
subscriptionOfferDetails中添加两个相同basePlan的条目,相当于给同一个产品新增了一个独立的无试用优惠方案,但你的需求是给原有基础计划追加试用,完全不需要拆分出独立条目,不符合实际业务场景和返回格式。 - JSON3:把试用阶段和常规阶段拆成两个独立的
subscriptionOfferDetails条目,这是对订阅模型的误解——试用是常规订阅流程的前置环节,属于同一个优惠的组成部分,不能拆分。
如果后续你需要给同一个产品添加完全独立的优惠方案(比如一个带试用的年度计划、一个无试用的月度计划),才需要在subscriptionOfferDetails数组中新增多个条目。




