1. 事件触发后会立即上报吗?

为了减少性能和电量损耗,Android SDK 和 iOS SDK 中事件触发后不会立即上报,而是先将事件缓存在本地,然后定时、批量进行上报。iOS SDK 每次触发事件时会检查如下条件,以判断是否向服务器上传数据:

  1. 当前网络是否符合 flushNetworkPolicy (默认 3G、4G、5G、WiFi);
  2. 与上次发送的时间间隔是否大于 flushInterval (默认 15 秒);
  3. 本地缓存的事件条目数是否大于 flushBulkSize (默认 100 条)。

只有 1、2 或 1、3 满足时,SDK 才会进行发送数据。以上参数支持自定义,可以通过修改相应参数值来达到控制事件上报的频率。

2. SDK 是否使用了 IDFA?

  • 神策 SDK 不会主动开启 IDFA,只有您 App 中主动开启了 IDFA(引入 AdSupport 库或显式调用 - advertisingIdentifier), SDK 才会尝试获取 IDFA 作为匿名 ID 和用于渠道追踪。
  • 如果需要使用神策分析中精准渠道匹配功能,则需要您 App 主动开启 IDFA 功能,否则不能成功匹配。
  • App 如果主动开启了 IDFA,Apple 审核时可以参考如下策略:
  • 您应用中集成了广告,可选择1、2、3、4选项;
  • 您应用中没有集成广告,为渠道追踪功能开启的 IDFA,可选择2、3、4选项。
    )

3. SDK 匿名 ID 生成规则是怎样的?

SDK 生成匿名 ID 的优先顺序为:IDFA > IDFV > UUID,不过 1.10.18 之前 SDK,只有配置了IDFA subspec,SDK 才会尝试去获取 IDFA。
另外,为了解决 App 卸载重装后匿名 ID 变化问题,1.9.10 之后的 SDK,默认将匿名 ID 保存在 Keychain 中,卸载重装后,匿名 ID 不会变化。

通过 anonymousId 方法可获取 SDK 当前的匿名 ID:

NSString *anonymousId = [[SensorsAnalyticsSDK sharedInstance] anonymousId];
CODE

4. 应用版本属性为什么没包含 build 信息?

由于各个公司对 build 定义的不同,SDK 中只获取 CFBundleShortVersionString 作为 $app_version (应用版本)属性。如果您这边有特殊要求,可以通过注册公共属性方式覆盖 SDK 采集的 $app_version 属性。

5. 属性中 YES/NO 和 true/false 有什么区别?

在 iOS SDK 中:
YES/NO 对应的数据类型为BOOL
true/false 对应的数据类型为NUMBER

NSMutableDictionary *dict = [[NSMutableDictionary alloc]init];
[dict setObject:@YES forKey:@"isFirst"];
[dict setObject:@true forKey:@"isStart"];
CODE


其中:
isFirst 对应的数据类型为 BOOL 类型
isStart 对应的数据类型为 NUMBER 类型

6. 如何使用 .a 静态库的方式集成 SDK ?  

选中对应的 target ,build settings -> other linker flag 设置为 -ObjC.

7. App 被动启动($AppStartPassively) 是什么事件?

对于 iOS 设备,除了用户主动启动 App。设备中某些条件触发时(如收到通知、用户位置信息变化等),系统可能会唤醒 App,使程序在后台运行,当程序在后台启动并运行时,SDK 触发 $AppStartPassively(App 被动启动) 事件。
关于 iOS 设备后台启动和运行的更多信息,可参考 Apple 文档 About the Background Execution Sequence