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

Flutter集成RevenueCat:promo code免费试用跨设备状态无法同步求助

解决多设备登录后无法识别RevenueCat促销试用状态的问题

核心问题根源

换设备后拿不到试用状态,本质是RevenueCat没把新设备的用户身份和之前兑换促销码的用户绑定,或是没主动同步购买记录。以下是具体解决步骤:

  • 绑定统一用户ID
    RevenueCat靠用户ID关联订阅状态,换设备登录时必须调用Purchases.logIn()绑定你的应用内用户唯一ID,不能用默认的匿名ID。示例代码:
// 用户登录你的应用后,立即关联RevenueCat身份
final logInResult = await Purchases.logIn("你的应用用户唯一标识ID");
// 关联完成后重新拉取订阅状态
await updatePurchaseStatus();

如果之前用的是匿名ID,登录时会自动把匿名数据合并到绑定的用户ID下,确保权益跨设备同步。

  • 主动触发购买恢复
    就算绑定了用户ID,新设备也可能不会自动同步所有权益,需要主动调用恢复方法:
// 登录成功后调用,同步Google Play的所有购买/促销记录
await Purchases.restorePurchases();
// 恢复完成后更新订阅状态
await updatePurchaseStatus();

这个方法会向Google Play请求该用户的全部订单(包括促销码兑换的试用),同步到RevenueCat后台。

  • 检查权益配置匹配性
    确认Google Play促销码对应的订阅计划,已经在RevenueCat控制台里正确关联了你代码中判断的premium权益。如果没关联,哪怕用户兑换了促销码,entitlements.active里也不会包含该权益。

  • 优化状态判断代码(增加排查日志)
    添加日志方便定位问题,确保逻辑覆盖所有场景:

Future updatePurchaseStatus() async {
  try {
    final purchaserInfo = await Purchases.getCustomerInfo();
    // 打印当前激活的权益,排查是否包含促销试用权益
    print("当前激活权益列表: ${purchaserInfo.entitlements.active}");
    
    final entitlements = purchaserInfo.entitlements.active.values.toList();
    _entitlement = entitlements.isEmpty ? Entitlement.free : Entitlement.premium;
    
    if (entitlements.isNotEmpty) {
      _entitlementInfo = entitlements.last;
    }
    notifyListeners();
  } catch (e) {
    print("获取订阅状态失败: $e");
  }
}

内容的提问来源于stack exchange,提问作者a.snss

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 14:46:00