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

Flutter中如何判断iOS/Android用户是否已使用免费试用(含RevenueCat方案)

判断Flutter中iOS/Android用户是否体验过免费试用及RevenueCat检测方案

一、原生平台直接检测(无第三方库)

如果不依赖第三方库,需要通过MethodChannel调用原生代码实现:

  • iOS:使用StoreKit查询用户交易记录,筛选带有试用属性的交易(比如结合SKPaymentTransaction的交易日期与产品试用周期判断,或检查SKProduct的introductoryPrice是否已被使用)。
  • Android:通过Google Play Billing Library查询用户购买历史,筛选Purchase对象中purchaseType为TRIAL的记录。

这种方式需要分别编写iOS和Android原生代码,逻辑繁琐且需处理平台差异,推荐使用第三方订阅管理库简化流程。

二、使用RevenueCat检测(推荐)

RevenueCat的purchases_flutter包提供了简洁的API来获取用户的订阅及试用历史,无需处理原生细节:

实现步骤

  1. 确保已正确集成purchases_flutter并完成初始化(配置API密钥、用户ID等)。
  2. 调用Purchases.getCustomerInfo()获取用户完整订阅信息,从中提取试用相关数据。

代码示例

import 'package:purchases_flutter/purchases_flutter.dart';

Future<bool> hasUsedFreeTrial() async {
  try {
    final customerInfo = await Purchases.getCustomerInfo();
    
    // 检查非订阅交易中的试用记录
    final hasTrialTransactions = customerInfo.nonSubscriptionTransactions.any(
      (transaction) => transaction.isTrialPeriod
    );

    // 检查订阅权益是否来自试用
    final hasTrialEntitlement = customerInfo.entitlements.all.values.any((entitlement) {
      final subscription = entitlement.subscription;
      return subscription != null && subscription.introductoryPrice != null;
    });

    return hasTrialTransactions || hasTrialEntitlement;
  } catch (e) {
    print('获取用户订阅信息失败: $e');
    return false;
  }
}

关键说明

  • transaction.isTrialPeriod:直接标记该交易是否为试用周期内的记录,是最可靠的判断依据;
  • introductoryPrice:如果订阅产品存在试用/入门价格,且用户已领取,该字段会存在;
  • 跨设备同步:只要用户使用同一Apple/Google账号登录,RevenueCat会自动同步其试用历史,无需额外处理;
  • 调用上述方法返回true时,即可停止向用户展示试用广告。

内容的提问来源于stack exchange,提问作者Evripides Kyriacou

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 01:17:13