注意
- SensorsAnalyticsSDK 从 v3.0.3 开始支持 macOS
- SensorsAnalyticsSDK 从 v4.6.0 开始支持 tvOS
- 在 macOS 和 tvOS,只支持基础的代码埋点,不支持全埋点、可视化全埋点、曝光等高级功能
用户关联
用户关联是为了对用户进行唯一标识,提高用户行为分析的准确性。目前神策提供了简易用户关联和全域用户关联分为用于支撑不同的业务场景。
注意
macOS & tvOS 的用户关联部分的使用 API 参照 iOS SDK 即可,其它功能使用,参照本文档即可
用户属性设置
保留初次属性
对于需要保证只有首次设置时有效的属性,如用户首次充值金额、首次设置的昵称等,可以使用 - setOnce: 或 - setOnce:to: 接口进行记录。与 - set: 方法不同的是,如果被设置的用户属性已存在,则这条记录会被忽略而不会覆盖已有数据,如果属性不存在则会自动创建:
Objective-C
Swift
数值属性累加
针对一些数值型属性,如消费总额、用户积分等属性,我们可以使用 - increment: 或 - increment:by: 对原值进行累加,神策会自动计算并保存累加之后的值:
Objective-C
Swift
列表属性追加
对于列表类型用户属性,如用户喜爱的电影、用户点评过的餐厅等属性,可以调用 - append:by: 接口进行追加一些新值:
Objective-C
Swift
注意
列表型属性中的元素必须为 NSString 类型,关于列表型限制请见数据格式。
属性取消
如果需要取消已设置的某个用户属性,可以调用 - unset: 进行取消:
Objective-C
Swift
获取用户 ID
Objective-C 简版用户关联
神策中每个事件都会关联到一个 ID 上,用于标识该事件所对应的用户或设备信息,我们称之为 distinct_id,您也可以通过 - distinctId 接口获取该 ID:
Swift 简版用户关联
神策中每个事件都会关联到一个 ID 上,用于标识该事件所对应的用户或设备信息,我们称之为 distinct_id,您也可以通过 - distinctId 接口获取该 ID:
Objective-C 全域用户关联
SDK 版本需要 >=4.3.0
获取全域用户关联的 ID
Swift 全域用户关联
SDK 版本需要 >=4.3.0
获取全域用户关联的 ID
默认情况下,用户登录前,distinct_id 是 SDK 根据设备生成的一个匿名 ID,一般为 SerialNumber(序列号)或 UUID。
您也可以通过 - anonymousId 接口获取当前的匿名 ID:
Objective-C
Swift
统计事件时长
v3.0.3+ 版本 SDK 支持代码埋点来统计事件的时长,只需要在行为开始时调用 - trackTimerStart:,在行为结束时调用 - trackTimerEnd:withProperties: 接口,SDK 会自动计算时长,并以秒(浮点数)为单位存在事件的 $event_duration 属性中:
Objective-C
Swift
同名事件交叉的时长统计
默认情况下,时长的统计以事件名作为标识,相同的事件名会自动匹配 start-end,如果两个同名事件在时间上有交叉部分,会造成错误匹配。为了解决此问题,神策 SDK 支持同名事件交叉的时长统计,开发者需要保存 - trackTimerStart: 的返回值,以便后续针对性地进行暂停、恢复或停止:
Objective-C
Swift
注意
- 只有调用 - trackTimerEnd: 时,SDK 才会真正记录事件
- 多次调用 - trackTimerStart:,以最后一次调用作为计时起点
- 默认情况下,统计的时长不包括用户 App 在后台的时长
获取预置属性
前端 SDK 在记录事件时会添加设备相关的预置属性,为了保证前后端事件属性的一致性,某些情况下可能需要在前端获取 SDK 预置属性,在 SDK 可以使用 - getPresetProperties 方法获取事件预置属性,然后通过业务接口传到服务端,由服务端添加到事件属性中:
Objective-C
Swift
事件动态公共属性
动态公共属性和公共属性的区别是:前者适合标记年龄,后者适合标记性别。
对于一些值会变化的公共属性,如当前游戏等级、最新金币余额等,v3.0.3+ 版本 SDK 提供了- registerDynamicSuperProperties: 接口来设置动态公共属性:
Objective-C
Swift
注意
- 事件属性的优先级为:track 事件时传入的属性 > 动态公共属性 > 公共属性> 预置属性
- 动态公共属性的约束和事件属性相同,详情参考数据格式
物品元数据上报
在神策推荐项目中,客户需要将物品元数据上报,以展开后续推荐业务的开发与维护。macOS SDK 提供了设置与删除物品元数据的方法。
item_id(物品 ID) 与 item_type(物品所属类型)共同组成了一个物品的唯一标识。所有的 item 系列方法都必须同时指定物品 ID 及物品所属类型这两个参数,来完成对物品的操作。
设置物品属性
直接设置一个物品,如果已存在则覆盖。除物品 ID 与物品所属类型外,其他物品属性需在 properties 中定义。物品属性中,属性名称与属性值的约束条件与事件属性相同,详细说明请参考 数据格式。
Objective-C
Swift
删除物品属性
如果物品不可被推荐需要下线,删除该物品即可,如不存在则忽略。除物品 ID 与 物品所属类型外,不解析其他物品属性。
Objective-C
Swift
自定义上报策略
为了减少性能和电量损耗,macOS 中事件触发后不会立即上报,而是先将事件缓存在本地,然后定时、批量进行上报。
上报条件
macOS & tvOS SDK 每次触发事件时会检查如下条件,以判断是否向服务器上传数据:
1. 当前网络是否符合 flushNetworkPolicy (默认 WiFi)
2. 与上次发送的时间间隔是否大于 flushInterval (默认 15 秒)
3. 本地缓存的事件条目数是否大于 flushBulkSize (默认 100 条)
只有1、2 或1、3 满足时,SDK 才会进行发送数据。以上参数支持自定义,可以通过修改相应参数值来达到控制事件上报的频率:
Objective-C
Swift
强制上报
如果特定事件需要立即上报,可以在事件触发后调用 - flush 接口强制进行上报:
Objective-C
Swift
缓存上限
如果事件触发后一直不满足上报条件,本地缓存的数据条数会越来越多,当缓存事件量达到 maxCacheSize 时,每次再触新的事件,SDK 会依次丢弃老数据,保留最新的数据。maxCacheSize 默认为 10000 条,支持客户自定义:
Objective-C
Swift
清空本地缓存事件
为了适应 GDPR 要求,v3.0.3+ 版本 SDK 增加了 - deleteAll 方法用于清空本地缓存的所有事件:
Objective-C
Swift
入库前修改事件信息
v3.0.3+ 版本 SDK 支持在事件入库前进行修改属性、删除事件,可以使用 - trackEventCallback: 中 block 参数进行设置:
- block 中 eventName 参数为当前事件名。
- block 中 properties 参数为当前事件属性,该参数为 NSMutableDictionary 类型,可直接修改此参数达到修改事件属性的目的。
- block 返回值标志事件是否需要继续入库和上报: YES 事件会继续入库,NO 将删除此条事件。
警告
- 严禁在 block 中调用 - track: 、- trackInstallation:、 - login: 等触发事件的接口,会因循环调用而导致应用崩溃
- block 返回 NO 时 SDK 将删除此条事件,所以请确保判断逻辑,以免造成误删除事件
Objective-C
Swift
自定义匿名 ID
默认情况下,SDK 会生成匿名 ID 并可以保证该 ID 的唯一性,如果需要替换神策默认分配的匿名 ID ,可以在初始化 SDK 之后立即调用 - identify: 方法进行替换。
代码示例: