如何在移动端从Purchases中获取base plan id或offer id
移动端获取订阅具体Base Plan/Offer的解决方案
不用拆分多个产品,直接通过Billing Library v6提供的API就能拿到用户购买的具体方案信息,步骤如下:
- 调用
queryPurchasesAsync拿到Purchase列表后,对每个订阅类型的Purchase对象,调用getSubscriptionContents()方法,获取SubscriptionContents实例 - 从
SubscriptionContents中提取关键信息:- 调用
getBasePlanId():拿到用户实际购买的base plan ID(比如你设置的monthly/6 months/annual) - 调用
getAppliedOfferDetails():如果用户使用了优惠(比如免费试用),这里会返回OfferDetails列表,从中可以拿到offer的ID或描述信息
- 调用
- 在本地代码中维护一个映射表,把base plan ID和对应的展示名称(比如“月度Pro会员”“半年Pro会员”“年度Pro会员”)、offer ID和对应的优惠说明(比如“3天免费试用”)一一对应,把API返回的ID转换成用户能看懂的文字展示在个人主页
举个简单的伪代码示例:
// 假设拿到了某个订阅Purchase对象 val purchase: Purchase = ... val subscriptionContents = purchase.subscriptionContents val basePlanId = subscriptionContents.basePlanId val appliedOffer = subscriptionContents.appliedOfferDetails.firstOrNull() // 本地映射表 val basePlanMap = mapOf( "monthly" to "月度Pro会员", "6 months" to "半年Pro会员", "annual" to "年度Pro会员" ) val offerMap = mapOf( "monthly-trial" to "(7天免费试用)", "6months-trial" to "(14天免费试用)", "annual-trial" to "(30天免费试用)" ) // 组合展示文本 val displayText = "${basePlanMap[basePlanId] ?: "未知会员方案"}${appliedOffer?.let { offerMap[it.offerId] } ?: ""}"
这样就能在不拆分产品、不依赖后端API的前提下,准确展示用户购买的具体订阅方案,完全符合新版计费结构的设计。
内容的提问来源于stack exchange,提问作者psydj1
相关产品推荐
相关产品推荐

