本文档详细阐述了引力平台用户唯一标识符 ClientID 的定义、在各平台(Android, iOS, 小程序等)的生成规则、获取方式以及确保数据准确性的重要接入规范和注意事项。
ClientID 是引力平台用于标识用户唯一性的核心字段,是用户行为追踪和数据关联的基础。通常在初始化 SDK 时传入或 SDK 自动采集。
1. ClientID 的定义与生成规则
-
Android 平台
-
定义:在调用
initialize
方法时传入的USER_CLIENT_ID
参数即为 ClientID。 -
自动生成规则(5.0.9+版本):若传入空字符串,SDK 将按以下优先级自动采集设备 ID 作为 ClientID:OAID > Android ID > IMEI。若所有 ID 均无法获取,SDK 会生成一个随机且唯一的 16 位 ID 并持久化保存至本地缓存,以确保应用生命周期内该标识的稳定性。
-
-
iOS 平台
-
定义:在调用
initialize
方法时传入的USER_CLIENT_ID
参数即为 ClientID。 -
自动生成规则:若传入空字符串,SDK 默认会采集 IDFV 作为 ClientID。我们推荐您使用最佳实践方案,该方案已内置自动采集逻辑,可直接使用稳定的 IDFV 而无需手动处理。
-
-
小游戏/小程序平台
-
定义:初始化 SDK 时,通过 config 配置对象中的
clientId
字段传入。 -
建议:通常使用平台的用户唯一标识(如微信 OpenID)作为 ClientID,以确保用户在不同设备与小程序之间的身份一致性。
-
-
快应用/快游戏平台
-
定义:初始化 SDK 时,通过 config 配置对象中的
clientId
字段传入。
-
2. 如何获取 ClientID?
为确保获取到正确的值,请确保在 SDK 初始化完成后再调用此方法。
- Android 与 iOS 平台:调用
getCurrentClientId()
方法可获取当前用户的 ClientID。 - Unity 平台:调用
GetCurrentClientID()
方法可获取当前用户的 ClientID。
3. 关于 ClientID 初始化的重要说明
为了帮助您获得准确可靠的数据分析结果,请您务必了解 ClientID 的初始化机制及其对数据的影响。
3.1 初始化机制是如何工作的?
简单来说,每次您调用 initialize
方法并成功传入参数时,SDK 都会将这次传入的值记录下来并缓存到本地,作为这台设备的唯一标识。请注意,多次成功调用 initialize
方法,新的 ClientID 会覆盖之前存储的 ClientID,之后所有的事件都会与这个最新的标识符关联。
3.2 一个需要避免的常见做法
我们理解,您可能会希望在用户登录后,将其业务账号ID设置为ClientID以便于关联。然而,我们强烈不建议这样做。
如果您在应用的一次运行过程中,先后两次调用初始化方法并传入了两个不同的ID(例如:首次初始化后,在用户登录时又再次初始化并传入了用户的账号ID),这会产生一个您可能意想不到的结果:
-
平台会将这两个ID识别为两个完全独立的用户。
-
这会导致该设备在切换ID之前的行为数据(例如:广告点击、浏览记录)和切换ID之后的行为数据(例如:登录、付费)被割裂开来,无法归属于同一个人。
-
从而严重影响后续的广告效果归因、用户行为路径分析等数据的准确性。
3.3 我们的建议与最佳实践
为了确保数据的连续性和准确性,我们为您推荐以下做法:
-
保持标识符稳定
理想情况下,应在应用启动时初始化一次SDK,并在此后保持使用同一个ClientID。您可以将首次初始化得到的ClientID进行本地保存,后续需要时(如重试初始化)始终使用这个保存的值,以确保标识符的一致性。
-
如何正确关联用户信息
如果您需要在用户登录后关联其业务身份,请不要通过重新初始化SDK来实现。我们提供了更安全的方式:请使用 用户属性设置接口(例如
user_set()
方法)。这样,既能将用户ID与设备行为关联起来,又不会破坏设备标识符的稳定性。
-
安全地重试初始化
如果出于网络容错等原因需要多次调用初始化,请确保每次传入的都是同一个ClientID。只要传入的ID保持一致,多次初始化是完全安全的。
3.4 总结
请将初始化时传入的ClientID视为设备的“身份证”,一旦确定,应尽量避免更改。关联用户信息时,请使用专门的user_set
方法,而非重新初始化。