在 Flutter SDK 中识别用户
本指南适用于拥有自有认证系统的开发者。你将在此了解如何在 Adapty 中管理用户画像,使其与现有认证系统保持一致。
如何管理用户购买行为取决于你的应用认证模式:
- 如果你的应用不使用后端认证且不存储用户数据,请参阅匿名用户部分。
- 如果你的应用已有(或将有)后端认证,请参阅已识别用户部分。 核心概念:
- 用户画像是 SDK 正常运行所必需的实体,由 Adapty 自动创建。
- 用户画像可以是匿名的**(不含 customer user ID),也可以是已识别的(含 customer user ID)**。
- 你提供 customer user ID 是为了将 Adapty 中的用户画像与你内部的身份验证系统进行关联对照。
以下是匿名用户与已识别用户的区别:
| 匿名用户 | 已识别用户 | |
|---|---|---|
| 购买管理 | 商店级购买恢复 | 通过客户用户 ID 跨设备保留购买历史记录 |
| 用户画像管理 | 每次重装生成新的用户画像 | 跨会话和设备使用同一用户画像 |
| 数据持久性 | 匿名用户的数据与应用安装绑定 | 已识别用户的数据在应用重装后仍然保留 |
匿名用户
如果你没有后端身份验证,则无需在应用代码中处理身份验证:
- 当 SDK 在应用首次启动时被激活,Adapty 会为该用户创建一个新的用户画像。
- 当用户在应用内完成任何购买后,该购买记录会与其 Adapty 用户画像及应用商店账户关联。
- 当用户重新安装应用或在新设备上安装时,Adapty 会在激活时创建一个新的匿名用户画像。
- 如果用户之前已在您的应用中完成过购买,默认情况下,其购买记录会在 SDK 激活时自动从 App Store 同步。 对于匿名用户,每次安装都会创建新的用户画像,但这不是问题——在 Adapty 看板的分析设置中,你可以配置什么将被视为新安装。
对于匿名用户,你需要按设备 ID 统计安装量。在这种情况下,设备上的每次应用安装(包括重新安装)都会被计为一次安装。
已识别用户
在应用中识别用户有两种方式:
-
登录/注册时: 如果用户在应用启动后才登录,请在用户完成身份验证时调用
identify(),并传入 customer user ID。 -
SDK 激活时: 如果应用启动时已有存储的 customer user ID,可在调用
activate()时直接传入。
默认情况下,当 Adapty 收到来自某个 Customer User ID 的购买请求,而该 ID 当前与另一个 Customer User ID 关联时,访问等级将被共享,因此两个用户画像都拥有付费访问权限。你可以配置此设置,将付费访问权限从一个用户画像转移到另一个,或完全禁用共享功能。详情请参阅这篇文章。
登录/注册时
如果您是在应用启动后才识别用户身份(例如在用户登录或注册之后),请使用 identify 方法来设置其 customer user ID。
- 如果您之前从未使用过该 customer user ID,Adapty 会自动将其与当前用户画像关联。
- 如果您之前已使用该 customer user ID 识别过用户,Adapty 将切换至与该 customer user ID 关联的用户画像。
客户用户 ID 对每个用户必须唯一。如果将参数值硬编码,所有用户将被视为同一个人。
调用其他 SDK 方法之前,请务必 await identify。并发调用会产生 #3006 profileWasChanged 错误或落到匿名用户画像上。详见 Flutter SDK 的调用顺序。
try {
await Adapty().identify(customerUserId); // 每个用户唯一
} on AdaptyError catch (adaptyError) {
// handle the error
} catch (e) {
}
在 SDK 激活期间
如果在激活 SDK 时已知道用户的 customer user ID,可以直接在 activate 方法中传入,无需单独调用 identify。
如果已知 customer user ID,但在激活之后才进行设置,则意味着在激活时 Adapty 会创建一个新的匿名用户画像,并仅在你调用 identify 后才切换到已有的用户画像。
您可以传入已有的 customer user ID(之前使用过的),也可以传入一个全新的。如果传入新的,激活时创建的新用户画像将自动与该 customer user ID 关联。
默认情况下,创建匿名用户画像不会影响分析看板,因为安装量是基于设备 ID 统计的。 设备 ID 代表应用在设备上的一次安装实例,仅在应用重新安装后才会重新生成。 无论是首次安装还是重复安装,也无论是否使用了已有的客户用户 ID,设备 ID 均不受影响。
创建用户画像(在 SDK 激活或退出登录时)、登录,或在不重新安装应用的情况下升级应用,均不会产生新的安装事件。 如果您希望按唯一用户而非设备来统计安装量,请前往 App settings 并配置 Installs definition for analytics。
try {
await Adapty().activate(
configuration: AdaptyConfiguration(apiKey: 'YOUR_API_KEY')
..withCustomerUserId(YOUR_CUSTOMER_USER_ID) // Customer user IDs must be unique for each user. If you hardcode the parameter value, all users will be considered as one.
);
} catch (e) {
// handle the error
}
退出用户登录
如果您有供用户退出登录的按钮,请使用 logout 方法。
退出用户登录会为该用户创建新的匿名用户画像。
try {
await Adapty().logout();
} on AdaptyError catch (adaptyError) {
// handle the error
} catch (e) {
// handle unknown error
}
要将用户重新登录到应用,请使用 identify 方法。
允许未登录状态下购买
如果你的用户在登录前和登录后都可以进行购买,你需要确保他们登录后仍能保留访问权限:
- 当未登录用户完成购买时,Adapty 会将该购买绑定到其匿名用户画像 ID。
- 当用户登录账号后,Adapty 会切换到其已识别的用户画像。
- 如果是新的 customer user ID(例如购买发生在注册之前),Adapty 会将该 customer user ID 分配给当前用户画像,所有购买记录均得以保留。
- 如果是已存在的 customer user ID(该 customer user ID 已关联某个用户画像),则需要在切换用户画像后获取实际的访问等级。你可以在识别完成后立即调用
getProfile,也可以监听用户画像更新以实现数据自动同步。
下一步
恭喜!您已经在应用中完成了应用内支付逻辑的接入!祝您的应用变现一切顺利! 要充分发挥 Adapty 的价值,可以探索以下主题:
- 测试:确保一切正常运行
- 用户引导:通过用户引导吸引用户并提升留存率
- 集成:只需一行代码,即可与营销归因和分析服务集成
- 设置自定义用户画像属性:为用户画像添加自定义属性并创建市场细分,以便针对不同用户启动 A/B 测试或展示不同的付费墙