6.X集成文档
集成流程示意图

补充知识
发送策略
设置发送策略说明
发送策略设定了用户产生的数据发送回友盟+服务器的频率,此发送策略的数据都是离线计算。
iOS平台数据发送策略包括BATCH(启动时发送)和SEND_INTERVAL(按间隔发送)两种,友盟+默认使用退出时发送(更省流量)
组件化SDK不同以以前非组件化的SDK,用户现在不需要在SDK端显式的设置发送策略。 组件化SDK默认使用BATCH(启动时发送),减少用户的网络发送请求。 同时在用户做前后台切换的时候,组件化SDK也会触发网络请求,批量的把数据发送出去,以节约网络请求的流量。
- 启动时发送:新增、活跃、启动次数、使用时长、自定义事件等数据在APP本次启动或退出时即刻发送,错误统计产生的消息数据会在下次启动应用时发送。如果应用程序启动时处在不联网状态,那么消息将会缓存在本地,下次再尝试发送。
- 按间隔发送:按特定间隔发送数据,间隔时长介于90秒与1天之间。新增、活跃、启动次数等数据在APP本次打开时即刻发送,使用时长、自定义事件、错误统计等在使用过程中产生的所有数据都按间隔发送,如果应用程序启动时处在不联网状态,那么消息将会缓存在本地,下次再尝试发送。
发送策略设置方法
在后台 统计分析->设置->发送策略 页面自定义发送间隔。具体如下图:
点击发送策略之后,可以看到设置页面:

注意:
(1)在没有获取到在线配置时,默认使用启动时发送的策略;
(2)在打开debug调试模式或者使用集成测试时,不受发送策略控制。
(3)在iOS应用中,可以通过代码设置发送策略,也可以在后台进行设置,后台配置的优先级高于本地配置(即代码中的配置)
IDFA说明
从组件化产品开始,【友盟+】SDK默认采集idfa标识,用来更准确的分析核对数据。对于应用本身没有获取idfa的情况,建议将应用提交至AppStore时按如下方式配置:(以避免被苹果以“应用不含广告功能,但获取了广告标示符IDFA”的而拒绝其上架。)
创建应用,获取Appkey
集成【友盟+】SDK之前,您首先需要到 【友盟+】官网注册并且添加新应用,获得AppKey。
特别提醒 :我们建议开发者在注册账号时使用企业邮箱,避免使用个人邮箱注册,防止由于个人离职带来的问题,建议使用的账号形式:umeng@企业域名、apps@企业域名、dev@企业域名。

常见问题
问题1 :应用的安卓版和iOS版能否共用一个AppKey。
答案:不同平台的应用禁止使用相同的AppKey,需要分开注册。
问题2 :注册应用时,提示应用名称已存在。
答案 :【友盟+】后台的应用名与实际应用名和包名无关,建议命名为应用名+平台(iOS/Android)。更多集成问题可点我进入[常见问题]
Cocoapods集成(推荐)
更新Pod环境
在终端执行pod setup命令,拉取最新pod库时间较长。
$ pod setup
集成组件化各业务SDK
Cocoapods集成友盟+可灵活配置所需SDK,如工程target名为UMPlusDemo,可选添下面的SDK,如在项目根目录的Podfile的格式:
target 'UMPlusDemo' dopod ‘<友盟+SDK名>'end
升级说明:如果现有项目已经通过 Pod 集成过友盟相关SDK,需要检查替换相关 Pod 名,参考页面最后一节「较早Cocoapods集成版本升级说明」进行相应 Pod 替换。
由于 pod search 命令对新增项目可能出现无法找到的情况,建议直接使用 pod update 命令进行直接更新。
pod search的解决方案请在本页最后[常见问题]中查看
统计 SDK
依赖库
pod 'UMCCommon'
统计 SDK
pod 'UMCAnalytics'
可在项目中加入 “基础库-日志库” 中的 UMCCommonLog 进行开发调试。
日志库(调试)
开发阶段进行调试SDK及相关功能使用,可在发布 App 前移除
pod 'UMCCommonLog'
手动集成
依赖库
CoreTelephony.framework 获取运营商标识libz.tbd 数据压缩libsqlite.tbd 数据缓存SystemConfiguration.framework 判断网络状态
工程配置
集成步骤如下:
选择SDK功能组件并下载,解压.zip文件得到相应组件包(例如:UMCommon.framework,UMAnalytics.framework, UMPush.framework等)。
Xcode
File—>Add Files to "Your Project",在弹出Panel选中所下载组件包->Add。(注:选中“Copy items if needed”)

- 添加依赖库,在项目设置
target-> 选项卡General->Linked Frameworks and Libraries如下:

初始化
1.说明和用途
组件化SDK用来聚合(移动统计 SDK,消息推送 SDK,社会化分享 SDK等)业务的初始化接口,方便对各个业务的初始化统一调用。
2.接口函数
接口:
/** 初始化友盟所有组件产品@param appKey 开发者在友盟官网申请的appkey.@param channel 渠道标识,可设置nil表示"App Store".*/+ (void)initWithAppkey:(NSString *)appKey channel:(NSString *)channel;
参数:
| 参数 | 类型 | 描述 | 备注 |
|---|---|---|---|
| appKey | NSString | 在 App Analytics 创建应用后,进入数据报表页中, 在“统计分析->设置->应用信息” 页面查看。 | AppKey为必需,为了根据您的AppKey查看后台的实时和离线统计数据,帮助您了解目前您的产品的详细情况。 |
| channel | NSString | channel为您应用的推广渠道。channel为nil或@””时,默认会被当作@”App Store”渠道 | 渠道命名规范:可以由英文字母、阿拉伯数字、下划线、中划线、空格、括号组成,可以含汉字以及其他明文字符,但是不建议使用中文命名,会出现乱码。 首尾字符不可以为空格 最多256个字符 “App Store” 及其各种大小写形式,作为友盟保留的字段,不可以作为渠道名。 |
提示每台设备仅记录首次安装激活的渠道,如果该设备再次安装其他渠道包,则数据仍会被记录在初始的安装渠道上。 所以在测试不同的渠道时,请使用不同的设备来分别测试。也可使用集成测试功能进行测试,了解更多集成测试请点击这里。
3.示例代码
#import <UMCommon/UMCommon.h>- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {[UMConfigure initWithAppkey:@"Your appkey" channel:@"App Store"];}
AppKey填写
将[UMConfigure initWithAppkey:@”Your appkey” channel:@”App Store”]; 中的”Your AppKey”替换为您在【友盟+】后台申请的应用Appkey(Appkey可在统计后台的 “统计分析->设置->应用信息” 页面查看)。
Channel填写
将[UMConfigure initWithAppkey:@”Your appkey” channel:@”App Store”] 中的App Store 替换为您应用的推广渠道。channelId为nil或@””时,默认会被当作@”App Store”渠道。
渠道命名规范:
可以由英文字母、阿拉伯数字、下划线、中划线、空格、括号组成,可以含汉字以及其他明文字符,但是不建议使用中文命名,会出现乱码。首尾字符不可以为空格最多256个字符“App Store” 及其各种大小写形式,作为友盟保留的字段,不可以作为渠道名。
提示:每台设备仅记录首次安装激活的渠道,如果该设备再次安装其他渠道包,则数据仍会被记录在初始的安装渠道上。 所以在测试不同的渠道时,请使用不同的设备来分别测试。也可使用集成测试功能进行测试,了解更多集成测试[请点击这里]
IDFA说明
从组件化产品开始,【友盟+】SDK默认采集idfa标识,用来更准确的分析核对数据。对于应用本身没有获取idfa的情况,建议将应用提交至AppStore时按如下方式配置:(以避免被苹果以“应用不含广告功能,但获取了广告标示符IDFA”的而拒绝其上架。)
场景设置
1.说明和用途
组件化统计SDK用户不同业务场景设置(目前支持普通统计场景和游戏场景)
游戏场景需设置,否则调用相对应的统计api无法使用
2.接口函数
接口:
/** 设置 统计场景类型,默认为普通应用统计:E_UM_NORMAL@param 游戏统计设置为:E_UM_GAME*/+ (void)setScenarioType:(eScenarioType)eSType;
参数:
| 参数 | 类型 | 描述 | 备注 |
|---|---|---|---|
| eSType | eScenarioType | 设置适用场景 | 默认为普通应用场景,目前还支持游戏统计场景 |
注意:如需要支持多个场景,则以 | 分隔,例如:
[MobClick setScenarioType:E_UM_NORMAL];//支持普通场景
3.示例代码
[MobClick setScenarioType:E_UM_GAME];//支持游戏场景
4.常见问题
设置日志
1.说明和用途
设置是否在console输出sdk的log信息。详细集成
2.接口函数
接口:
/** 设置是否在console输出SDK的log信息.@param bFlag 默认NO(不输出log); 设置为YES, 输出可供调试参考的log信息. 发布产品时必须设置为NO.*/+ (void)setLogEnabled:(BOOL)bFlag;
日志格式如下:
举例:如果用户传入的AppKey为空的话,打印日志如下图:

2018-02-08 20:19:44: 指当前的打印的时间;
UMengCommon: 指组件化SDK(UMCommon.framework)的名字;
<1.4.3>: 指组件化SDK(UMCommon.framework)的版本号;
(Error): 指日志等级是Error的日志;
[CIE10001]: 指日志的FAQ的代号,也可通过FAQ文档找到对应的解决方法;
用户传入的AppKey不合法,请到官网申请AppKey,以免影响自己App的统计数据。: 指提示开发者的错误信息,帮助开发者找到错误原因。
3.示例代码
#import <UMCommonLog/UMCommonLogHeaders.h>- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {// Override point for customization after application launch.//开发者需要显式的调用此函数,日志系统才能工作[UMCommonLogManager setUpUMCommonLogManager];}
账号统计
1.说明和用途
用于用户进行账户统计
2.接口函数
+ (void)profileSignInWithPUID:(NSString *)puid;+ (void)profileSignInWithPUID:(NSString *)puid provider:(NSString *)provider;+ (void)profileSignOff;
参数:
| 参数 | 类型 | 描述 | 备注 |
|---|---|---|---|
| puid | NSString | 用户ID | |
| provider | NSString | 账号来源 | 不能以下划线”_”开头,使用大写字母和数字标识; 如果是上市公司,建议使用股票代码。 |
3.示例代码
友盟+在统计用户时以设备为标准,若需要统计应用自身的账号,下述两种API任选其一接口:
// PUID:用户账号ID.长度小于64字节// Provider:账号来源。不能以下划线"_"开头,使用大写字母和数字标识,长度小于32 字节 ;[MobClick profileSignInWithPUID:@"UserID"];[MobClick profileSignInWithPUID:@"UserID" provider:@"WB"];
Signoff调用后,不再发送账号内容。
[MobClick profileSignOff];
常见问题
[账号统计问题]
页面统计
页面统计两种方式对比

集成方式
手动集成
1.接口函数
+ (void)logPageView:(NSString *)pageName seconds:(int)seconds;+ (void)beginLogPageView:(NSString *)pageName;+ (void)endLogPageView:(NSString *)pageName;
参数:
| 参数 | 类型 | 描述 | 备注 |
|---|---|---|---|
| pageName | NSString | 统计的页面名称 | |
| seconds | int | 时长 | 单位为秒 |
注意:
必须配对调用beginLogPageView:和endLogPageView:两个函数来完成自动统计,若只调用某一个函数不会生成有效数据;
在该页面展示时调用beginLogPageView:,当退出该页面时调用endLogPageView。
2.示例代码
在ViewController类的viewWillAppear: 和 viewWillDisappear:中配对调用如下方法:
- (void)viewWillAppear:(BOOL)animated{[super viewWillAppear:animated];[MobClick beginLogPageView:@"Pagename"]; //("Pagename"为页面名称,可自定义)}
- (void)viewWillDisappear:(BOOL)animated{[super viewWillDisappear:animated];[MobClick endLogPageView:@"Pagename"];}
自动采集
1.接口函数
+ (void)setAutoPageEnabled:(BOOL)value;
2.示例代码
//设置为自动采集页面[MobClick setAutoPageEnabled:YES];
常见问题
[页面统计问题]
事件统计
如何理解自定义事件
字段说明
event id:自定义事件id。
key:自定义事件下的参数。
value:自定义事件参数下的参数值。
注意事项
- 根据您使用事件的不同选择注册不同的事件类型,计数事件请选择“多参数类型事件”类型,计数事件选择“计数事件”类型
- event id或者key请使用(英文、数字、下划线、中划线、小数点及加号)进行定义,使用其中一种或者几种都可以,为保证数据计算的准确性,非这些“合法”以外的字符无法添加
- event id长度不能超过128个字节,key不能超过128个字节,value不能超过256个字节
- id、ts、du是保留字段,不能作为event id 及key的名称
- 每个应用至多添加500个event,一个event下支持100个key同时计算,若超过100个,需要开发者手动指定哪些参数需要计算
- 一个key下支持可传1000个value,value不建议使用特殊字符定义(建议使用标准ASCII码中可见字符部分进行定义)
- 为方便使用者理解及使用,可通过显示名称进行重命名(支持中文),进入【应用设置-事件-编辑】进行操作;
-
使用自定义事件的依赖条件和限制
使用自定义事件功能请先登陆 【友盟+】官网 ,在 【统计分析】->【设置】->【事件】 (子账户由于权限限制可能无法看到”设置”选项,请联系主帐号开通权限。)页面中添加相应的事件id,然后服务器才会对相应的事件请求进行处理。
- 请在sdk初始化之后调用事件统计接口。
事件的类型分为计算事件和计数事件两种
如何理解计算事件和计数事件:计算事件在计数事件的基础上增加数值型参数的统计(计数事件只支持字符型参数的统计),如果您统计的范围不涉及到数值型参数,建议直接使用计数型事件
计数事件
在您希望跟踪的代码部分,调用如下方法:
复制代码到剪切板
+ (void)event:(NSString *)eventId;+ (void)event:(NSString *)eventId label:(NSString *)label;+ (void)event:(NSString *)eventId attributes:(NSDictionary *)attributes;+ (void)event:(NSString *)eventId attributes:(NSDictionary *)attributes counter:(int)number;
| 参数 | 类型 | 描述 | 备注 |
|---|---|---|---|
| eventId | NSString | 网站上注册的事件Id | |
| label | NSString | 分类标签 | 不同的标签会分别进行统计,方便同一事件的不同标签的对比,为nil或空字符串时后台会生成和eventId同名的标签。 |
| attributes | NSDictionary | 自定义属性 | 属性中的key-value必须为String类型, 每个应用至多添加500个自定义事件,key不能超过100个。 |
| counter | int | 自定义数值 |
示例1:
统计微博应用中”转发”事件发生的次数,那么在转发的函数里调用:
复制代码到剪切板
[MobClick event:@"Forward"];
示例2:
统计电商应用中“购买”事件发生的次数,以及购买的商品类型及数量,那么在购买的函数里调用:
复制代码到剪切板
NSDictionary *dict = @{@"type" : @"book", @"quantity" : @"3"};[MobClick event:@"purchase" attributes:dict];
计算事件
统计一个数值类型的连续变量(该变量必须为整数),用户每次触发的数值的分布情况,如事件持续时间、每次付款金额等,可以调用如下方法:
复制代码到剪切板
字符串型:
+ (void)beginEvent:(NSString *)eventId;+ (void)endEvent:(NSString *)eventId;+ (void)beginEvent:(NSString *)eventId label:(NSString *)label;+ (void)endEvent:(NSString *)eventId label:(NSString *)label;+ (void)beginEvent:(NSString *)eventId primarykey :(NSString *)keyName attributes:(NSDictionary *)attributes;+ (void)endEvent:(NSString *)eventId primarykey:(NSString *)keyName;+ (void)event:(NSString *)eventId durations:(int)millisecond;+ (void)event:(NSString *)eventId label:(NSString *)label durations:(int)millisecond;+ (void)event:(NSString *)eventId attributes:(NSDictionary *)attributes durations:(int)millisecond;
数值型:
+ (void)event:(NSString *)eventId attributes:(NSDictionary *)attributes counter:(int)number;
| 参数 | 类型 | 描述 | 备注 |
|---|---|---|---|
| eventId | NSString | 网站上注册的事件Id | |
| label | NSString | 分类标签 | 不同的标签会分别进行统计,方便同一事件的不同标签的对比,为nil或空字符串时后台会生成和eventId同名的标签。 |
| attributes | NSDictionary | 自定义属性 | 属性中的key-value必须为String类型, 每个应用至多添加500个自定义事件,key不能超过100个 。 |
| primarykey | NSString | 唯一标识 | 这个参数用于和event_id一起标示一个唯一事件,并不会被统计;对于同一个事件在beginEvent和endEvent 中要传递相同的eventId 和 primarykey。 |
| durations | int | 时长 | 传入自己统计的时长(单位:毫秒)。 |
注意:
beginEvent需要和endEvent配对使用,需要传入相同的eventId。
示例:
购买《Swift Fundamentals》这本书,花了110元
复制代码到剪切板
[MobClick event:@"pay" attributes:@{@"book" : @"Swift Fundamentals"} counter:110]
FAQ
错误统计
1.说明和用途
收集app适用过程中产生的Crash信息,统计SDK默认是开启Crash收集机制的
2.接口函数
** 开启CrashReport收集, 默认YES(开启状态).@param value 设置为NO,可关闭友盟CrashReport收集功能.@return void.*/+ (void)setCrashReportEnabled:(BOOL)value;
3.示例代码
```[MobClick setCrashReportEnabled:NO]; // 关闭Crash收集```**注意:**此函数需在common sdk初始化前适用,默认是开启状态
常见问题
[如何设置错误分析]
设置加密
1.说明和用途
设置是否对要发送的统计信息进行加密 详细文档
2.接口函数
接口:
/** 设置是否对统计信息进行加密传输, 默认NO(不加密).@param value 设置为YES, umeng SDK 会将日志信息做加密处理*/+ (void)setEncryptEnabled:(BOOL)value;
3.示例代码
#import <UMCommon/UMCommon.h>- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {[UMConfigure setEncryptEnabled:YES];//打开加密传输[UMConfigure setLogEnabled:YES];//设置打开日志[UMConfigure initWith:@"Your AppKey" channel:@"App Store"];}
友盟+SDK升级说明
为了更好的SDK接入体验和性能、结构优化,以及兼容系统升级的变化,SDK 在迭代升级的过程中进行的不同程度的重构及接口的增删改,使得可能原接入过 SDK 的开发者需要有部分修改。下面将几项业务 SDK 的接口和接入方式的变动进行说明,开发者需要对说明中的版本对比项目中 SDK 的版本查看是否要进行调整。
升级到组件化SDK特别说明
老版本升级到新版本后组件化SDK的升级后,会多一个库UMCommon.framework,此库为UMeng所有业务库必须依赖的基础功能库,为每个业务模块提供初始化功能,数据传输等功能,把老版的每个业务的初始化APPKey的函数统一到UMCommon.framework库中,用户只需要调用UMCommon的初始化接口即可初始化对应APPKey。
UMCommon.framework
新增接口
/** 初始化友盟所有组件产品@param appKey 开发者在友盟官网申请的appkey.@param channel 渠道标识,可设置nil表示"App Store".*/+ (void)initWithAppkey:(NSString *)appKey channel:(NSString *)channel;/** 设置是否在console输出sdk的log信息.@param bFlag 默认NO(不输出log); 设置为YES, 输出可供调试参考的log信息. 发布产品时必须设置为NO.*/+ (void)setLogEnabled:(BOOL)bFlag;/** 设置是否对日志信息进行加密, 默认NO(不加密).@param value 设置为YES, umeng SDK 会将日志信息做加密处理@return void.*/+ (void)setEncryptEnabled:(BOOL)value;/** 获得umid*/+ (NSString *)umidString;/**集成测试需要device_id*/+ (NSString*)deviceIDForIntegration;
统计 SDK
主要以 4.2.4s 版本升级到组件化版本(5.0以上)的接口变化
新增接口
+ (void)onDeepLinkReceived:(NSURL *)link;//仅5.4.1版本新增DeepLink功能+ (void)setScenarioType:(eScenarioType)eSType;//设置场景
删除接口
+ (void)setAppVersion:(NSString *)appVersion;//设置版本+ (void)setEncryptEnabled:(BOOL)value;//设置加密//此接口已经在转移到UMCommon.framework组件里面,请查看UMConfigure.h头文件+ (void)setLogSendInterval:(double)second;//设置间隔发送时间+ (void)startSession:(NSNotification *)notification;//模块启动
初始化变动
原 4.2.4 初始化形式为:
UMConfigInstance.appKey = @"appkey";UMConfigInstance.channelId=@"App Store";UMConfigInstance.eSType=E_UM_NORMAL;UMConfigInstance.ePolicy=SEND_INTERVAL;[MobClick startWithConfigure:UMConfigInstance];
升级到组件化更新为:
[UMConfigure initWithAppkey:@"appkey" channel:@"App Store"];// 以及接口+ (void)setScenarioType:(eScenarioType)eSType;//设置场景
注:组件化已没有代码设置发送策略(间隔发送) UMConfigInstance.ePolicy=SEND_INTERVAL;
更改到核心库UMCommon中
+ (void)setLogEnabled:(BOOL)value;//打印log