Android应用内订阅promo code验证及首单折扣实现咨询
Google Play订阅首周期折扣+后续原价续订实现方案
一、验证并应用优惠码调整订阅价格
官方推荐方案(基于Google Play Billing Library)
Google Play内置订阅促销功能,可直接实现首周期折扣,步骤如下:
在Play Console配置促销活动
- 进入应用后台 → 变现 → 订阅 → 选择目标订阅ID
- 创建新促销,设置类型为「折扣」,折扣力度50%,应用范围限定为「第一个计费周期」
- 生成促销代码,可设置使用次数、有效期等限制
客户端实现优惠码验证与应用
使用BillingClient的verifyPromoCode接口验证用户输入的优惠码,通过后获取对应优惠Offer的token,发起订阅时传入该token即可享受折扣:
// 初始化BillingClient(已集成可跳过) private val billingClient = BillingClient.newBuilder(context) .setListener { _, purchaseResult -> /* 处理购买结果逻辑 */ } .enablePendingPurchases() .build() // 验证用户输入的优惠码 fun validatePromoCode(subscriptionSku: String, promoCode: String) { val verifyParams = VerifyPromoCodeParams.newBuilder() .setSku(subscriptionSku) .setPromoCode(promoCode) .build() billingClient.verifyPromoCode(verifyParams) { result -> when (result.responseCode) { BillingClient.BillingResponseCode.OK -> { // 获取有效优惠Offer result.subscriptionOfferDetails?.firstOrNull()?.let { offer -> val offerToken = offer.offerToken // 更新UI显示折扣价(取首周期定价) val firstPhasePrice = offer.pricingPhases.pricingPhaseList.first().formattedPrice updateSubscriptionPriceDisplay(firstPhasePrice) // 发起带折扣的订阅请求 launchDiscountedSubscription(subscriptionSku, offerToken) } ?: showError("该优惠码不适用于此订阅") } else -> showError("优惠码无效或已过期") } } } // 发起带折扣的订阅请求 fun launchDiscountedSubscription(sku: String, offerToken: String) { val skuParams = SkuDetailsParams.newBuilder() .setSkusList(listOf(sku)) .setType(BillingClient.SkuType.SUBS) .build() billingClient.querySkuDetailsAsync(skuParams) { _, skuDetailsList -> skuDetailsList.firstOrNull()?.let { skuDetails -> val billingParams = BillingFlowParams.newBuilder() .setSkuDetails(skuDetails) .setOfferToken(offerToken) // 指定优惠token .build() billingClient.launchBillingFlow(activity, billingParams) } } }
二、确保折扣周期结束后按原价续订
此逻辑无需额外开发,Google Play会自动处理:
- 在Play Console配置促销活动时,确认选择「折扣应用范围」为「第一个计费周期」
- 用户完成首周期折扣订阅后,后续自动续订将按照订阅的默认原价($200)计费
- 可通过
queryPurchasesAsync接口或实时开发者通知,监听订阅状态更新以确认续订价格
三、非Google Play内购的替代方案
若不想依赖Google Play促销系统,可采用「自有服务器+双SKU」方案:
创建两个订阅SKU
- 折扣SKU:
sub_200_50off,首周期定价$100(临时SKU) - 原价SKU:
sub_200,长期续订定价$200
- 折扣SKU:
服务器管理优惠码
- 服务器维护优惠码数据库,记录有效性、使用次数、绑定用户ID等信息
- 用户输入优惠码后,客户端请求服务器验证,验证通过后返回购买折扣SKU的权限
订阅切换逻辑
- 用户购买折扣SKU后,服务器监听订阅到期时间
- 在折扣订阅到期前,推送通知引导用户升级到原价SKU;或通过Google Play订阅升级API自动完成切换(需用户确认)
注意:此方案需额外维护服务器逻辑和订阅状态同步,复杂度高于官方方案,仅在特殊场景下使用
内容的提问来源于stack exchange,提问作者Abhi Patel
相关产品推荐
相关产品推荐

