Flutter中如何实现Google Play开发者自定义订阅优惠的条件化展示?
Flutter 订阅自定义资格优惠实现方案
针对你需要给特定用户(如运动爱好者)展示专属订阅折扣的场景,以下是基于in_app_purchase和in_app_purchase_android的具体实现步骤:
1. 依赖配置
先确保pubspec里的依赖是最新稳定版,旧版本可能存在API兼容问题:
dependencies: in_app_purchase: ^3.1.10 in_app_purchase_android: ^0.3.0+18
执行flutter pub get完成依赖安装。
2. 正确获取Android订阅优惠详情
跨平台的ProductDetails不会直接暴露订阅优惠,必须先将其转为Android专属的AndroidProductDetails,才能拿到SubscriptionOfferDetails:
import 'package:in_app_purchase/in_app_purchase.dart'; import 'package:in_app_purchase_android/in_app_purchase_android.dart'; // 处理商品详情回调 void processProductDetails(List<ProductDetails> products) { for (final product in products) { // 仅处理Android平台的订阅商品 if (product is AndroidProductDetails && product.productType == ProductType.subscription) { // 获取该订阅的所有优惠方案 final subscriptionOffers = product.subscriptionOfferDetails; if (subscriptionOffers != null) { for (final offer in subscriptionOffers) { // 这里可以获取优惠ID、折扣价、周期等核心信息 print('优惠ID: ${offer.offerId}'); print('首次折扣价: ${offer.pricingPhases.pricingPhaseList.first.formattedPrice}'); print('优惠周期: ${offer.pricingPhases.pricingPhaseList.first.billingPeriod}'); } } } } }
3. 自定义资格判断与定价展示
根据你的业务条件(比如用户是否标记为运动爱好者),筛选并展示对应定价:
// 假设已通过用户系统获取到该标记 bool userIsSportsLover = true; // 筛选符合自定义资格的优惠(比如后台创建的优惠ID为"sports_10_percent_off") AndroidSubscriptionOfferDetails? getEligibleOffer(AndroidProductDetails product) { return product.subscriptionOfferDetails?.firstWhere( (offer) => offer.offerId == 'sports_10_percent_off', orElse: () => null, ); } // 展示对应定价 void displayPricing(AndroidProductDetails subscriptionProduct) { final eligibleOffer = getEligibleOffer(subscriptionProduct); if (userIsSportsLover && eligibleOffer != null) { // 展示专属优惠价 print('专属折扣价: ${eligibleOffer.pricingPhases.pricingPhaseList.first.formattedPrice}'); } else { // 展示原价 print('原价: ${subscriptionProduct.price}'); } }
4. 关键注意事项
- 后台配置校验:确保Google Play后台已创建开发者自定义资格的优惠,且优惠ID与代码中完全一致;优惠状态需为已激活。
- 测试环境配置:测试账号必须加入Google Play的许可测试列表,否则无法看到优惠。
- 平台区分:上述代码仅针对Android,iOS平台需使用
SKProductDiscount(通过in_app_purchase_ios包实现)。 - 依赖版本:如果仍无法获取优惠,检查依赖是否为最新版,旧版
AndroidProductDetails可能未开放subscriptionOfferDetails字段。
内容的提问来源于stack exchange,提问作者Sahil Singh
相关产品推荐
相关产品推荐

