Flutter中RevenueCat的UpgradeInfo在Android端订阅升级失效问题
问题排查与解决步骤
1. 订阅配置检查
- 需切换的月付、年付两个订阅SKU,必须在Google Play Console中归属于同一个订阅组。不同订阅组的产品无法直接通过UpgradeInfo进行升降级操作,会触发Play Store底层报错。
2. 代码参数错误修正
- 你当前的代码逻辑存在参数传反的问题:
UpgradeInfo的第一个入参要求传入的是用户当前已生效的旧订阅SKU,而不是目标切换的SKU。你现有逻辑里当前是月卡时传入年卡SKU作为oldSku,完全不符合参数要求,会导致Play Billing识别旧订阅失败,触发报错。正确的代码写法参考:
// 先获取当前用户已激活的订阅SKU,作为oldSku参数传入 String currentActiveSKU = subscriptionTypeString == monthlySubscriptionString ? monthlySubscriptionSKU : yearlySubscriptionSKU; await Purchases.purchasePackage( myProductList[index], // 此处为要切换到的目标套餐对应的package对象 upgradeInfo: UpgradeInfo( currentActiveSKU, prorationMode: ProrationMode.immediateWithTimeProration, ), );
3. 测试环境校验
- 检查Android模拟器中内置的Play Store版本,需升级到最新版,旧版本Play Billing服务对订阅切换的兼容性很差,容易返回SERVICE_UNAVAILABLE错误。
- 确认你的测试账号已经添加到Google Play Console的「许可测试」列表中,且当前模拟器登录的就是该测试账号。
- 确认测试时网络可以正常连接Google Play服务,无代理、网络拦截类工具干扰。
- 不要在订阅刚购买成功后立刻进行切换操作,建议间隔2-3分钟等Play侧订阅状态同步完成后再测试。
- 若以上调整后问题仍然存在,建议使用搭载完整Google服务框架的真机测试,部分模拟器的Play服务组件存在功能阉割,无法正常支持订阅切换操作。
内容的提问来源于stack exchange,提问作者Zelf
相关产品推荐
相关产品推荐

