如何通过RevenueCat API检查用户是否存在且不创建新用户?
针对RevenueCat未知用户ID查询的最佳解决方案
问题背景
我需要从自有数据库中获取每位用户的订阅信息,但部分数据库用户并非RevenueCat的订阅用户。RevenueCat仅提供一个同时支持GET和POST的/v1/subscribers/{app_user_id}端点:
- 当请求的
app_user_id不在RevenueCat系统中时,该端点会自动创建一个「免费订阅」用户 - 我无法通过检查新创建用户的属性来删除它,因为这会误删系统中真实存在的无订阅(免费)用户
- RevenueCat目前没有推出全量获取客户列表的API计划
以下方案对当前场景无效,需明确排除:
- 通过API检查用户订阅是否活跃
- 在Flutter中检查用户是否有过购买记录
最佳可行方案
方案1:利用Webhooks同步有效用户ID
配置RevenueCat的用户变更Webhook,当用户首次在RevenueCat中创建(包括真实订阅用户和主动创建的免费用户)时,将对应的app_user_id同步到自有数据库的「RevenueCat用户白名单」中。后续查询订阅信息时,仅对白名单内的app_user_id调用API,从根源上避免触发无意义的自动创建操作。
方案2:带标识查询+即时清理临时用户
首次调用/v1/subscribers/{app_user_id}时,在请求体中添加自定义属性(比如custom_fields: {temp_check: "true"})。获取返回结果后执行以下校验:
- 检查用户的创建时间是否与当前请求时间差极小(比如1分钟内)
- 确认用户无任何订阅历史(包括过期、免费的订阅记录)
如果同时满足以上两个条件,立即调用RevenueCat的删除用户API移除该自动创建的临时用户;真实存在的免费用户会有更早的创建时间或其他历史痕迹,不会被误删。
方案3:批量处理+结果过滤清理
如果需要批量查询数据库用户的订阅信息,可将app_user_id分批次调用API,然后对返回结果做二次过滤:
- 仅保留有过订阅记录(含过期订阅)的用户数据
- 对从未有过订阅且创建时间极近的用户,调用删除接口清理
关键注意事项
- 删除用户API需配合严格的校验逻辑,避免误删真实用户
- Webhook方案是长期最优解,能减少无效API调用和临时用户的清理成本
内容的提问来源于stack exchange,提问作者Fellipe Tavares
相关产品推荐
相关产品推荐

