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来获取用户的订阅及试用历史,无需处理原生细节:
实现步骤
- 确保已正确集成
purchases_flutter并完成初始化(配置API密钥、用户ID等)。 - 调用
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
相关产品推荐
相关产品推荐

