You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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数组中新增多个条目。

火山引擎 最新活动