You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter应用中Google促销码能否兑换?免费订阅方案困境求助

Google Play免费无扣费订阅方案及现有问题修复

一、核心需求匹配:无扣费风险的订阅促销码

你之前使用的订阅促销码属于「延长免费试用」类型,会触发后续自动扣费,不符合需求。Google Play提供纯免费订阅促销码,完全满足无扣费风险的要求:

  • 创建步骤:Google Play控制台 → 应用 → 订阅 → 选中目标订阅 → 「促销活动」 → 新建促销
  • 促销类型选择**「免费订阅」**(而非「免费试用」):
    • 设置免费订阅的时长(如1个月、3个月,或按订阅周期数设置),到期后不会自动扣费,用户需主动操作才能续期
    • 生成的促销码供用户兑换后,直接获得对应时长的免费订阅,无后续扣费风险

二、产品类促销码问题的修复

若你仍选择用解锁类内购产品+促销码的方式,针对遇到的问题给出修复方案:

1. Google Play端兑换后无通知&无法查询

  • 后端无通知问题:促销码兑换的产品不会触发play_billing Pub/Sub实时通知,需主动通过Google Play Developer API调用purchases.products.get接口查询用户购买状态,或在应用端主动拉取历史购买记录。
  • Flutter端查询已购产品:官方in_app_purchase插件的queryPastPurchases方法可获取用户所有历史购买记录,包括促销码兑换的产品,以此解锁内容:
    final response = await InAppPurchase.instance.queryPastPurchases();
    for (final purchase in response.pastPurchases) {
      if (purchase.productID == "你的解锁产品ID" && purchase.status == PurchaseStatus.purchased) {
        // 执行解锁付费内容逻辑
        unlockPremiumFeatures();
        break;
      }
    }
    
  • 「已拥有该商品」提示处理:此为正常状态,无需让用户重复购买,通过上述查询逻辑自动解锁即可。

2. 应用内支持促销码兑换

官方in_app_purchase插件未内置Google Play促销码兑换入口,可通过原生Intent实现:

  • 在Flutter中通过MethodChannel调用Android原生逻辑,打开Google Play兑换界面:
    原生Kotlin代码:
    val redeemIntent = Intent(Intent.ACTION_VIEW).apply {
        data = Uri.parse("market://redeem")
        setPackage("com.android.vending")
    }
    startActivity(redeemIntent)
    
  • 测试注意:必须使用许可测试账号(Google Play控制台→测试→许可测试添加),禁止使用真实信用卡测试,避免不必要扣费。

三、推荐方案

优先选择免费订阅促销码方案,这是Google官方针对订阅场景提供的无风险促销方式,流程规范,无需额外开发解锁类产品逻辑,用户体验更统一。

内容的提问来源于stack exchange,提问作者Adrien Sala

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 19:05:12