用途
revenuecat-identify-user 用于把 RevenueCat 的身份体系接入应用自身的认证系统。当用户希望调用 RevenueCat SDK 的 logIn / logOut,让应用用户与 RevenueCat 订阅者一一对应时使用本技能。
本技能不覆盖以下内容:初始 SDK 配置(见 integrate-revenuecat)、购买流程(revenuecat-purchase-flow)、权益门控(revenuecat-entitlements-gate)。
主要能力
- 检测项目平台,并读取对应的平台实现文档。
- 说明跨平台共享的身份概念,包括匿名 ID、appUserID 选择、logIn 调用时机、logOut 限制、恢复购买与登录的区别、账号切换顺序等。
- 提供各平台将 logIn / logOut 接入典型认证状态监听的实现指引。
- 给出身份同步的验证清单。
使用方式
1. 检测平台
检查工作目录,从上到下取第一个匹配项:
- React Native:package.json 中有 react-native-purchases 条目,或依赖 react-native → 读取 platforms/react-native.md。若同时依赖 expo,标记为 Expo 项目。
- Flutter:项目根目录存在 pubspec.yaml → 读取 platforms/flutter.md。
- Kotlin Multiplatform:build.gradle.kts 包含 kotlin { … } 多平台 source sets 块,或依赖 com.revenuecat.purchases:purchases-kmp* → 读取 platforms/kmp.md。
- Android(原生):build.gradle(.kts) 应用了 com.android.application(且不是 KMP)→ 读取 platforms/android.md。
- iOS(原生):项目根目录有 Package.swift、.xcodeproj、.xcworkspace 或 Podfile → 读取 platforms/ios.md。
若多项匹配(例如 Flutter 项目内还有 ios/ 目录),选择最外层、拥有构建的项目。若仍不明确,询问用户要配置哪个平台。
2. 共享概念(所有平台)
- 默认匿名:调用 logIn 之前,RevenueCat 会分配一个以 $RCAnonymousID: 为前缀的稳定匿名 ID。匿名期间产生的购买会在首次以真实 appUserID 调用 logIn 时被别名到该 ID 上,因此让用户在登录前购买不存在“丢失购买”的风险。
- 不要使用邮箱、电话号码或顺序数据库 ID 作为 appUserID。应使用稳定的不透明值,例如后端的用户 UUID 或用户 ID 的哈希。RevenueCat 将该 ID 视为不透明字符串,且之后难以更改。
- 在认证系统确认会话后再调用 logIn,不要推测性调用。典型触发点是认证状态监听器以已登录用户触发。logIn 返回用户当前的 CustomerInfo 和一个 created: Boolean,用于判断是否为全新的 RevenueCat 客户。
- logOut 仅对已识别用户有效。在 SDK 处于匿名 ID 时调用 logOut,所有 SDK 都会抛错(PurchasesErrorCode.LogOutWithAnonymousUserError 或 iOS 等价错误)。应将其置于自己的“已登录”标志之后。
- 恢复购买不是登录。restorePurchases() 向商店请求当前收据并附加到当前 RevenueCat 用户,不会切换身份。若用户在新设备登录,应先调用 logIn(appUserID),仅当用户还期望从当前商店账号拉取收据时再调用 restorePurchases()。
- 账号切换是 logOut 再 logIn。若应用允许用户登出后以他人身份登录,应先调用 logOut(),等待完成,再 logIn(newId)。不要直接用第二次 logIn 替换,否则会把两个 ID 别名在一起。
- 先配置。logIn / logOut 之前必须已运行 Purchases.configure(…),否则 SDK 会抛错。
3. 实现
读取与检测结果匹配的平台文件:
- platforms/ios.md
- platforms/android.md
- platforms/kmp.md
- platforms/flutter.md
- platforms/react-native.md
每个平台文件展示将 logIn 和 logOut 接入典型认证状态观察者的调用方式。
4. 验证
在满足以下条件前,不要声称身份同步已生效:
- 在 RevenueCat 仪表盘中,测试用户的 Customer 页面显示的 appUserID 与后端使用的一致,而不是 $RCAnonymousID: 占位符。
- 登出后 ID 清回新的匿名用户;以不同账号登录后切换到该账号的购买(若为新账号则显示无购买)。
- 匿名期间完成的购买,在随后 logIn 后仍附加到已登录用户(被别名,而非丢失)。
- 在已匿名时调用 logOut 能被妥善处理,而不是崩溃或静默成功。
适用场景
- 应用已有自己的登录/注册体系,需要让 RevenueCat 订阅者与账号对应。
- 需要在用户登录、登出、切换账号时同步 RevenueCat 身份。
- 需要处理匿名购买在登录后的归属问题。
限制
- 不覆盖初始 SDK 配置、购买流程和权益门控。
- 平台检测依赖项目文件特征,若项目结构不典型可能需要用户确认平台。
- 具体代码示例需读取对应平台文件,本技能本身不提供跨平台统一代码。