在 Kotlin Multiplatform SDK 中识别用户

如果您有自己的身份验证系统,本指南适合您。在这里,您将学习如何在 Adapty 中管理用户画像,以确保其与您现有的身份验证系统保持一致。

您如何管理用户的购买取决于您的应用的身份验证模型:

核心概念

  • 用户画像 是 SDK 运行所需的实体。Adapty 会自动创建它们。
  • 它们可以是匿名的(不含客户用户 ID)或已识别的(含客户用户 ID)。
  • 您提供客户用户 ID 是为了将 Adapty 中的用户画像与您内部的身份验证系统进行交叉引用。

以下是匿名用户和已识别用户的区别:

匿名用户已识别用户
购买管理商店级别的购买恢复通过客户用户 ID 跨设备维护购买历史
用户画像管理每次重新安装时创建新用户画像跨会话和设备使用同一用户画像
数据持久性匿名用户的数据与应用安装绑定已识别用户的数据在应用安装间持久保存

匿名用户

如果您没有后端身份验证,您无需在应用代码中处理身份验证

  1. 当 SDK 在应用首次启动时被激活,Adapty 会为用户创建一个新的用户画像
  2. 当用户在应用中购买任何内容时,该购买将与其 Adapty 用户画像及其商店账户相关联
  3. 当用户重新安装应用或从新设备安装时,Adapty 会在激活时创建一个新的匿名用户画像
  4. 如果用户之前在您的应用中进行过购买,默认情况下,其购买记录会在 SDK 激活时自动从 App Store 同步。

因此,对于匿名用户,每次安装都会创建新的用户画像,但这不是问题,因为在 Adapty 分析中,您可以配置哪些情况将被视为新安装

对于匿名用户,您需要按设备 ID 统计安装次数。在这种情况下,设备上的每次应用安装都计为一次安装,包括重新安装。

备份恢复与重新安装的行为不同。默认情况下,当用户从备份中恢复时,SDK 会保留缓存数据,不会创建新的用户画像。您可以使用 withAppleClearDataOnBackup 设置来配置此行为。了解更多

已识别用户

您有两种方式在应用中识别用户:

  • 在登录/注册时: 如果用户在应用启动后才登录,请在他们进行身份验证时调用 identify() 并传入客户用户 ID。

  • 在 SDK 激活时: 如果在应用启动时您已有存储的客户用户 ID,请在调用 activate() 时传入。

默认情况下,当 Adapty 收到来自某个客户用户 ID 的购买,而该 ID 当前与另一个客户用户 ID 关联时,访问等级将被共享,因此两个用户画像都具有付费访问权限。您可以配置此设置,将付费访问从一个用户画像转移到另一个用户画像,或完全禁用共享。详情请参阅相关文章

identify-diagram.webp

在登录/注册时

如果您在应用启动后识别用户(例如,在他们登录或注册后),请使用 identify 方法设置其客户用户 ID。

  • 如果您之前未使用过此客户用户 ID,Adapty 将自动将其关联到当前用户画像。
  • 如果您之前已使用此客户用户 ID 识别过该用户,Adapty 将切换到与该客户用户 ID 关联的用户画像。

客户用户 ID 对每个用户必须是唯一的。如果您硬编码该参数值,所有用户将被视为同一个人。

Adapty.identify("YOUR_USER_ID") // 每个用户唯一
    .onSuccess {
        // 识别成功
    }
    .onError { error ->
        // 处理错误
    }

在 SDK 激活时

如果您在激活 SDK 时已知道客户用户 ID,可以在 activate 方法中直接传入,而无需单独调用 identify

如果您知道客户用户 ID 但仅在激活后才设置,则意味着在激活时,Adapty 会先创建一个新的匿名用户画像,只有在您调用 identify 后才切换到现有用户画像。

您可以传入已有的客户用户 ID(之前使用过的)或新的客户用户 ID。如果传入新的,激活时创建的新用户画像将自动与该客户用户 ID 关联。

默认情况下,创建匿名用户画像不会影响分析看板,因为安装次数是基于设备 ID 统计的。

设备 ID 代表应用从商店在设备上的单次安装,仅在应用重新安装后才会重新生成。
它不依赖于这是首次还是重复安装,也不依赖于是否使用了现有的客户用户 ID。

创建用户画像(在 SDK 激活或退出登录时)、登录或在不重新安装应用的情况下升级应用,不会产生额外的安装事件。

如果您希望按唯一用户而非设备统计安装次数,请前往 App settings 并配置 Installs definition for analytics

AdaptyConfig.Builder("PUBLIC_SDK_KEY")
    .withCustomerUserId("user123") // 客户用户 ID 对每个用户必须是唯一的。如果您硬编码该参数值,所有用户将被视为同一个人。
    .build()

用户退出登录

如果您的应用有用户退出登录的按钮,请使用 logout 方法。

用户退出登录会为该用户创建一个新的匿名用户画像。

Adapty.logout()
    .onSuccess {
        // 退出登录成功
    }
    .onError { error ->
        // 处理错误
    }

要让用户重新登录应用,请使用 identify 方法。

允许未登录用户进行购买

如果您的用户在登录前后都可以进行购买,您需要确保他们在登录后仍能保留访问权限:

  1. 当未登录用户进行购买时,Adapty 会将其与该用户的匿名用户画像 ID 关联。
  2. 当用户登录其账户时,Adapty 会切换到其已识别的用户画像。
    • 如果这是一个新的客户用户 ID(例如,购买发生在注册之前),Adapty 会将该客户用户 ID 分配给当前用户画像,从而保留所有购买历史。
    • 如果这是一个已有的客户用户 ID(该客户用户 ID 已与某个用户画像关联),您需要在用户画像切换后获取实际的访问等级。您可以在识别完成后立即调用 getProfile,或者监听用户画像更新,使数据自动同步。

下一步

恭喜!您已在应用中实现了应用内支付逻辑!祝您的应用变现一切顺利!

要从 Adapty 中获得更多价值,您可以探索以下主题:

  • 测试:确保一切按预期运行
  • 集成:只需一行代码即可与营销归因和分析服务集成
  • 设置自定义用户画像属性:为用户画像添加自定义属性并创建市场细分,以便您可以针对不同用户启动 A/B 测试或展示不同的付费墙