iOS SDK

iOS SDK 适用于 iOS 原生 App,集成前请先下载 SDK

iOS SDK 使用说明

circle-info

SDK Releases包下载: Github地址(推荐):https://github.com/analysys/ans-ios-sdk/releasesarrow-up-right Gitee地址:https://gitee.com/Analysys/ans-ios-sdk/releasesarrow-up-right Releases中含有更新说明请您阅读,接口使用请参考本文档。

framework

功能描述

是否必选

服务端版本

AnalysysAgent.bundle

配置文件

必选

全部

AnalysysAgent.framework

基础模块

必选

全部

AnalysysVisual.framework

可视化热图模块

可选

热图模块适用方舟V4.3.0及以上

AnalysysPush.framework

推送模块

可选

全部

AnalysysEncrypt.framework

加密模块

可选

全部

circle-info

请您根据自身业务需求来引用相关的SDK。

快速集成

如果您是第一次使用易观方舟产品,可以通过阅读本文快速了解此产品

1. 选择集成方式

  • Cocoapods

  • 手动引入

2. 配置 Xcode

若使用手动集成方式,需引入部分类库

3. 设置初始化接口

通过初始化接口配置您的AppKey,配置Channel

4. 设置上传地址

通过setUploadURL:接口设置您上传数据的地址。

5. 设置采集页面或事件

通过手动埋点,设置需要采集的页面或事件。

6. 打开Debug模式查看日志

通过设置Debug模式,开/关 log 查看日志。

通过以上6步您即可验证SDK是否已经集成成功。更多接口说明请您查看API文档。

集成配置

Cocoapods集成

  1. 安装CocoaPods

  2. 工程目录下创建Podfile文件,并添加pod 'AnalysysAgent',示例如下:

3. 关闭Xcode,在工程目录下执行pod installpod install --verbose --no-repo-update,完成后打开xxx.xcworkspace工程

手动导入集成

  1. 选择 工程 - 右键 - Add Files to "ProjectName"

  2. 选择 AnalysysAgent.framework文件

  3. 勾选 Copy items if neededCreate groups- Add 完成添加类库

  4. 添加AnalysysAgent.bundle资源文件:Targets->ProjectName -> Build Phases -> Copy Bundle Resources -> 添加文件

  • 若使用手动集成,请添加如下依赖框架:

    选择工程 - Targets - “项目名称” - Build Phase - Link Binary With Libraries 依赖库如下:

类库

用途

AdSupport.framework

广告标识

CoreTelephony.framework

运营商信息

SystemConfiguration.framework

网络状态

libz.tbd

数据压缩(Xcode7以下:libz.dylib)

libicucore.tbd

websocket可视化连接

libsqlite3.tbd

数据存储

  • 为支持SDK中category,请在Targets - “项目名称” - Build Settings - Other Linker Flags,添加-ObjC选项(注意大小写)

基础模块介绍

以下接口生效依赖于基础SDK模块,需集成基础SDK相关AnalysysAgent.framework文件,请正确集成。

初始化接口

  • Objective-C 代码示例

  • 请确保初始化SDK在 (BOOL)application:(UIApplication )application didFinishLaunchingWithOptions:(NSDictionary )launchOptions中主线程初始化

在Xcode工程文件~AppDelegate.m 中导入头文件"#import <AnalysysAgent/AnalysysAgent.h>"。接口如下:

AnalysysAgentConfig 类为配置信息类。参数如下:

  • appKey:在网站获取的 AppKey

  • channel:应用下发渠道

  • autoProfile:设置是否追踪新用户的首次属性。默认:YES

  • autoInstallation:是否开启渠道追踪功能。默认值:NO

  • autoTrackDeviceId:是否上报设备标识。默认值:NO

  • encryptType:设置数据上传时的加密方式,目前只支持 AES 加密,AES 加密分为AnalysysEncryptAES(128位密钥,ECB 加密模式)和 AnalysysEncryptAESCBC128(128位密钥,CBC 加密模式);如不设置此参数,数据上传不加密。

  • allowTimeCheck:是否允许时间校准,默认值:NO

  • autoTrackCrash:是否允许崩溃追踪,默认值:NO

  • maxDiffTimeInterval:最大允许时间误差,单位:秒,默认值:30秒

  • autoPageViewDuration:是否自动采集页面时长

示例:

  • Swift代码示例

在桥接文件中导入类库 #import <AnalysysAgent/AnalysysAgent.h>,并在 ~AppDelegate.m 中配置。

示例:

circle-exclamation

设置上传地址

自定义上传地址,接口设置后,所有事件信息将上传到该地址。接口如下:

  • uploadURL:数据上传地址,格式为 scheme://host + :port(不包含 / 后的内容)。scheme 必须以 http://https:// 开头,host 只支持域名和 IP,取值长度为1-255个字符,port 端口号必须携带

示例:

Swift示例:

Debug 接口

Debug 接口主要用于开发者测试。可以开/关日志,查看tag为[analysys]的Log日志。接口如下:

  • debugMode:debug 模式,默认关闭状态。注意:发布版本时 debugMode 模式设置为 AnalysysDebugOff

    • AnalysysDebugOff:表示关闭

    • AnalysysDebugOnly:表示打开 Debug 模式,但该模式下发送的数据仅用于调试,不计入平台数据统计

    • AnalysysDebugButTrack:表示打开 Debug 模式,该模式下发送的数据可计入平台数据统计

示例:

Swift代码示例:

App启动来源监测

此接口需在SDK初始化前进行设置

  • delegate:遵循UIApplicationDelegate的对象,iOS默认为AppDelegate类

  • launchOptions:启动参数

参数

说明

icon

点击图标启动

msg

点击通知

url

URL唤醒

3D

3D touch

0(默认)

其他,如home键切换、后台热启动

示例:

Swift代码示例:

统计页面接口

页面跟踪,SDK 默认设置跟踪所有页面(继承自UIViewController的控制器),支持自定义页面信息。接口如下:

  • pageName:页面标识,为字符串,取值长度 1 - 255 字符

  • properties:页面信息,K-V键值对。最多包含100条,且key是以字母开头的字符串,必须由字母、数字、下划线组成,字母不区分大小写,不支持乱码、中文、空格等,长度范围1-99字符;value 支持类型:NSString/NSNumber/NSArray<NSString *>/NSSet<NSString *>/NSDate/NSURL,若为字符串,取值长度为1-255个字符。

示例1:

示例2:

Swift代码示例:

打开/关闭自动采集页面

自动采集页面信息开关,打开时自动记录用户访问的页面。默认为打开状态。接口如下:

  • isAuto:开关值,默认为YES打开,设置NO为关闭

示例:

Swift代码示例:

必须使用 包名.类名

忽略部分页面自动采集

开发者可以设置某些页面不被自动采集,设置后自动采集时将会忽略这些页面。接口如下:

  • controllers:需要忽略的控制器名称,字符串数组。

示例:

Swift代码示例:

必须使用 包名.类名

页面自动采集添加自定义信息

若用户开启页面自动采集功能,可将自定义页面信息添加至$pageview事件中。SDK对外提供一个协议<ANSAutoPageTracker>供继承至UIViewController的类使用,若类遵循该协议,则须实现registerPageProperties方法,并将自定义参数返回,SDK会将此部分信息添加至$pageview事件的自定义参数中,且自定义参数优先级高于自动采集参数(即:相同key情况下,用户key会覆盖自动采集key)。

circle-info
  • 前提:页面自动采集功能未手动关闭

  • 自定义参数只能获取页面生命周期viewDidAppear:及之前的参数,之后参数无法获取到。如:需要添加页面标题,但标题是通过网络请求获取,但响应时间较长,晚于页面生命周期viewDidAppear:才返回标题信息,则该信息无法添加至自动采集的页面属性中。

示例:

Swift代码示例:

统计事件接口

用户行为追踪,可以设置自定义属性。接口如下:

  • event:自定义事件ID标识,以字母开头的字符串,必须由字母、数字、下划线组成,$ 开头为预置事件/属性,不支持乱码、中文、空格等,长度范围1-99字符。

  • properties:自定义属性,K-V键值对,用于对事件描述。最多包含100条,且key是以字母开头的字符串,必须由字母、数字、下划线组成,字母不区分大小写,不支持乱码、中文、空格等,长度范围1-99字符;value 支持类型:NSString/NSNumber/NSArray<NSString *>/NSSet<NSString *>/NSDate/NSURL,若为字符串,取值长度为1-255个字符。

示例:

Swift代码示例:

匿名ID与用户关联

用户关联的主要作用是打通用户登录前后的行为,以及多屏登录后的行为。做过用户关联的用户在登录前后的行为在方舟系统里面会被认为是一个用户。方舟系统目前支持 一台设备只能绑定一个用户 ID,一个用户 ID 只能绑定一台设备。设备和用户 ID 绑定后,就无法再和其他用户或者设备进行绑定。例如一个用户的设备 ID 是 ABC 用户的登录 ID 是 123,绑定成功后会对应同一个 ID,这样在统计或者分析时会被认为是一个用户。在用户注册成功或者登录成功后客户端需要调用 alias 接口,建议埋点时观看下 方舟 SDK 接入视频arrow-up-right 接口描述如下:

用户 id 关联接口。将需要绑定的用户ID 和匿名ID进行关联,计算时会认为是一个用户的行为。接口如下:

  • aliasId:需要关联的用户ID。 取值长度为1-255个字符

示例:

Swift代码示例:

匿名ID设置

唯一匿名ID标识设置,接口如下:

  • distinctId:自定义设备身份标识,取值长度 1 - 255 字符

示例:

Swift代码示例:

匿名ID获取

获取用户通过identify接口设置或自动生成的id,优先级如下: 用户设置的id > 代码自动生成的id,接口如下:

示例:

Swift代码示例:

用户属性设置

用户属性是一个标准的 K-V 结构,K 和 V 均有相应的约束条件,如不符合则丢弃该次操作。

约束条件如下:

  • 属性名称

    以字母开头的字符串,必须由字母、数字、下划线组成,字母不区分大小写,$ 开头为预置事件/属性,不支持乱码、中文、空格等,长度范围1-99字符。

  • 属性值

    支持部分类型:NSString/NSNumber/NSArray<NSString *>/NSSet<NSString *>/NSDate/NSURL; 若为字符串,取值长度为1-255个字符; 若为数组或集合,则最多包含 100条,且 key 约束条件与属性名称一致,value 取值长度为1-255个字符

设置用户属性

给用户设置单个或多个属性,如果之前不存在,则新建,否则覆盖。接口如下:

示例1:

Swift代码示例:

设置用户固有属性

设置用户的固有属性,只在首次设置时有效的属性。 如:应用的激活时间、首次登录时间等。如果被设置的用户属性已存在,则这条记录会被忽略而不会覆盖已有数据,如果属性不存在则会自动创建。接口如下:

示例1:统计用户的出生日期

示例2:

Swift代码示例:

设置用户属性相对变化值

设置用户属性的相对变化值(相对增加,减少),只能对数值型属性进行操作,如果这个 Profile 之前不存在,则初始值为 0。接口如下:

示例1:

示例2:

Swift代码示例:

增加列表类型的属性

用户列表属性增加元素。接口如下:

示例1:

示例2:

Swift代码示例:

删除设置的属性值

删除已设置的用户属性值。接口如下:

示例1:

示例2:

Swift代码示例:

通用属性

通用属性是每次上传事件信息都会带有的属性,通用属性是一个标准的 K-V 结构,K 和 V 均有相应的约束条件,如不符合则丢弃该次操作。

约束条件如下:

  • 属性名称

    以字母开头的字符串,必须由字母、数字、下划线组成,字母不区分大小写,$ 开头为预置事件/属性,不支持乱码、中文、空格等,长度范围1-99字符。

  • 属性值

    支持部分类型:NSString/NSNumber/NSArray<NSString *>/NSSet<NSString *>/NSDate/NSURL; 若为字符串,取值长度为1-255个字符; 若为数组或集合,则最多包含 100条,且 key 约束条件与属性名称一致,value 取值长度为1-255个字符

注册通用属性

某一个体,在固定范围内,持续拥有的属性,每次数据上传都会携带。接口如下:

示例:

成功设置事件通用属性后,事件通用属性会被添加进每个事件中,例如:

在设置事件通用属性后,实际发送的事件中会被加入 'member' 属性,等价于如下代码:

Swift代码示例:

重复调用 registerSuperProperties: 会覆盖之前已设置的通用属性,通用属性会保存在 App 本地缓存中。

superProperties 通用属性和用户自定义属性的 Key 冲突时,用户自定义属性会覆盖 superProperties 通用属性。

删除通用属性

根据属性名称,删除已设置过的通用属性。接口如下:

示例1:

示例2:

Swift代码示例:

获取通用属性

查询获取通用属性。接口如下:

示例1:

示例2:查看所有已经设置的通用属性

Swift代码示例:

SDK 发送策略

设置上传间隔时间

上传间隔时间设置,在 debug 模式关闭后生效。当事件触发间隔时间大于等于设置时间,则上传数据;建议 SDK 上传时间隔为 15s,并需要与setMaxEventSize:接口配套使用。接口如下:

  • flushInterval:间隔时间,时间单位为 秒,且最小间隔为1秒

示例:如设置上传间隔时间为10秒

Swift代码示例:

设置事件最大上传条数

上传条数设置,在 debug 模式关闭后生效;当数据库内事件条数大于设置条数则上传数据,建议上传的条数为 10条。并需要与setIntervalTime:接口配套使用接口。接口如下:

  • size:上传条数,size 必须值大于等于 1

示例:设置上传条数为 20条:

Swift代码示例:

本地缓存上限值

SDK 本地默认缓存数据的上限值为 10000条,最小值为100条,当达到此阈值值将会删除最早 10条数据。可以通过 setMaxCacheSize 方法来设定缓存数据的上限值(参数单位/条)。接口如下:

  • size:本地最多数据缓存条数

示例:设置本地数据缓存上限值为 2000条

Swift代码示例:

手动上传

调用该接口立刻上传数据,接口如下:

示例:如需主动刷新本地数据,可直接调用

Swift代码示例:

清理本地缓存

将本地数据库缓存数据全部清除。请谨慎使用该接口。接口如下:

示例:

Swift代码示例:

数据网络上传策略

控制某种网络情况下上传数据,接口如下:

示例:仅WIFI下数据上传,可直接调用

Swift代码示例:

获取预置属性

获取SDK默认采集的一些预置属性信息,接口如下:

示例:

Swift代码示例:

清除本地设置

清除本地现有的设置(包括id和通用属性)重新开始统计。接口如下:

示例:清除本地现有的设置,包括id和通用属性

Swift代码示例:

可视化热图SDK接口介绍

以下接口生效依赖于可视化模块,需集成可视化相关AnalysysVisual.framework文件,请正确集成。

设置webSocket地址

设置服务器地址,用于可视化调试阶段连接 Websocket 服务器。接口如下:

接口如下:

  • visitorDebugURL:websocket服务器地址,格式为 scheme://host + :port(不包含 / 后的内容)。scheme 必须以 ws://wss:// 开头,host 只支持域名和 IP,取值长度为1-255个字符,port 端口号必须携带

示例:

Swift示例:

设置请求埋点配置地址

设置服务器地址,用于可视化请求埋点配置信息。接口如下:

  • configURL:请求埋点配置的服务器地址,格式:http://host:porthttps://host:port

示例:

Swift示例:

热图采集

热图采集生效依赖于基础SDK模块,展示依赖于可视化热图模块,需集依赖于AnalysysAgent.framework、AnalysysVisual.framework文件,请正确集成。

设置热图采集

控制是否采集用户点击热图信息。接口如下:

  • autoTrack:是否采集用户点击位置坐标,默认为NO

示例:

Swift示例:

设置热图页面黑名单

开发者可以设置某些页面不被热图事件自动采集,自动采集时将会忽略这些页面。接口如下:

  • controllers:需要忽略的控制器名称,字符串集合。

示例:

Swift代码示例:

必须使用 包名.类名

加密模块介绍

加密模块生效依赖于加密SDK模块,需集成加密SDK相关AnalysysEncrypt.framework文件,请正确集成。

在初始化SDK时需设置加密方式即可:

最后更新于

这有帮助吗?