官方文檔:http://dev.umeng.com/analytics/ios-doc/integration
1. 集成準(zhǔn)備
1.1 獲得Appkey
集成友盟SDK之前,您首先需要到友盟官網(wǎng)(http://dev.umeng.com/analytics/ios-doc/www.umeng.com)注冊并且添加新應(yīng)用,獲得Appkey
特別提醒:我們建議開發(fā)者在注冊賬號時(shí)使用企業(yè)郵箱,避免使用個(gè)人郵箱注冊,防止由于個(gè)人離職帶來的問題,建議使用的賬號形式 :umeng@企業(yè)域名、apps@企業(yè)域名、dev@企業(yè)域名。
1.1.1 FAQ
Q :應(yīng)用的安卓版和IOS版能否共用一個(gè)appkey
A :不同平臺的應(yīng)用禁止使用相同的Appkey,需要分開注冊。
Q :注冊應(yīng)用時(shí),提示“應(yīng)用名稱已存在”
A :友盟后臺的應(yīng)用名與實(shí)際應(yīng)用名和包名無關(guān),建議命名為“應(yīng)用名+平臺(IOS/Android)”。
1.2 下載SDK
下載地址:http://dev.umeng.com/analytics/ios-doc/sdk-download
1.3 導(dǎo)入SDK
1.3.1 下載SDK并集成
請?jiān)谀愕墓こ棠夸浗Y(jié)構(gòu)中,添加友盟統(tǒng)計(jì)框架,在選項(xiàng)TARGETS--> Build Phases-->Link Binary With Libraries-->Add Other,選擇文件UMMobClick.framework文件并選擇確認(rèn);添加系統(tǒng)依賴框架(Framework)和編譯器選項(xiàng) TARGETS-->Build Phases-->Link Binary With Libraries--> + -->CoreTelephony.framework libz.tbd libsqlite.tbd.
如果使用UTDID,則下載UTDID.framework文件,并在工程配置的other linker flag中添加-force load和UTDID框架(Taobao提供的一個(gè)設(shè)備標(biāo)識生成庫)的路徑,如下圖
另外需要加入系統(tǒng)庫Security.framework的引用。
如果你需要在Cocoapods中使用友盟統(tǒng)計(jì)SDK,請參考下面的流程。
1.3.2 使用 Cocoapods 安裝 SDK
1.Cocoapods 安裝完成后,在你的項(xiàng)目根目錄創(chuàng)建一個(gè) Podfile 文件,添加如下內(nèi)容:
pod 'UMengAnalytics'//標(biāo)準(zhǔn)SDK,含IDFA
pod 'UMengAnalytics-NO-IDFA'//無IDFA版SDK(請根據(jù)需要選擇其中一個(gè))
2.在terminal下運(yùn)行命令如下:
pod install
命令執(zhí)行完成后即可完成統(tǒng)計(jì)SDK的下載安裝。
2. 基本功能集成
2.1 配置 AppDelegate.m (代表你的工程名字)
導(dǎo)入頭文件#import "UMMobClick/MobClick.h"
*AppDelegate.m 的配置主要包括填寫Appkey,設(shè)置發(fā)送策略和填寫渠道id三部分,代碼示例如下:
#import "UMMobClick/MobClick.h"
...
- (BOOL])application:(UIApplication] *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
UMConfigInstance.appKey = @"xxxxxxxxxxxxxx...";
UMConfigInstance.ChannelId = @"App Store";
UMConfigInstance.eSType = E_UM_GAME; //僅適用于游戲場景,應(yīng)用統(tǒng)計(jì)不用設(shè)置
…
[MobClick startWithConfigure:UMConfigInstance];//配置以上參數(shù)后調(diào)用此方法初始化SDK!
}
UMConfigInstance為SDK參數(shù)配置的實(shí)例類,只需要將其成員中標(biāo)注為required的參數(shù)賦值,optional的為可選項(xiàng)。
appKey為開發(fā)者在友盟后臺申請的應(yīng)用Appkey(Appkey可在統(tǒng)計(jì)后臺的 “統(tǒng)計(jì)分析->設(shè)置->應(yīng)用信息” 頁面查看);
ChannelId的值為應(yīng)用的渠道標(biāo)識。默認(rèn)為 @"App Store"。
2.1.1 appkey填寫
將UMConfigInstance.appkey:@"xxxxxxxxxxxxxxx"中的xxxxxxxxxxxxxxx替換為您在友盟后臺申請的應(yīng)用Appkey(Appkey可在統(tǒng)計(jì)后臺的 “統(tǒng)計(jì)分析->設(shè)置->應(yīng)用信息” 頁面查看)。
2.1.2 channel填寫
將UMConfigInstance.ChannelId:@"Web" 中的Web 替換為您應(yīng)用的推廣渠道。channelId為nil或@""時(shí),默認(rèn)會(huì)被當(dāng)作@"App Store"渠道。
渠道命名規(guī)范:
可以由英文字母、阿拉伯?dāng)?shù)字、下劃線、中劃線、空格、括號組成,可以含漢字以及其他明文字符,但是不建議使用中文命名,會(huì)出現(xiàn)亂碼。
首尾字符不可以為空格
最多256個(gè)字符
"App Store" 及其各種大小寫形式,作為友盟保留的字段,不可以作為渠道名。
在您查看數(shù)據(jù)時(shí),渠道會(huì)作為一個(gè)數(shù)據(jù)細(xì)分的維度。
非常重要:每臺設(shè)備僅記錄首次安裝激活的渠道,如果該設(shè)備再次安裝其他渠道包,則數(shù)據(jù)仍會(huì)被記錄在初始的安裝渠道上。 所以在測試不同的渠道時(shí),請使用不同的設(shè)備來分別測試。也可使用集成測試功能進(jìn)行測試,了解更多集成測試(http://dev.umeng.com/analytics/functions/testmode)
2.1.3 FAQ
Q :如何添加渠道?
A :一個(gè)包中只能添加一個(gè)渠道,多個(gè)渠道需要打多個(gè)包。開發(fā)者新增渠道需要在工程manifest中或者activity中調(diào)用接口添加我們的渠道信息,友盟后臺沒有添加渠道的地方。您也可以使用多渠道打包工具,點(diǎn)擊這里:http://bbs.umeng.com/thread-8199-1-1.html。
Q :如何刪除不需要的渠道
A :沒有刪除的功能,但是可以隱藏,在 設(shè)置--渠道里可以隱藏渠道
2.1.4 設(shè)置發(fā)送策略
發(fā)送策略設(shè)定了用戶產(chǎn)生的數(shù)據(jù)發(fā)送回友盟服務(wù)器的頻率。
iOS平臺數(shù)據(jù)發(fā)送策略包括BATCH(啟動(dòng)時(shí)發(fā)送)和SEND_INTERVAL(按間隔發(fā)送)兩種,友盟默認(rèn)使用啟動(dòng)時(shí)發(fā)送(更省流量),您可以在代碼reportPolicy:BATCH中更改發(fā)送策略。
啟動(dòng)時(shí)發(fā)送:新增、活躍、啟動(dòng)次數(shù)等數(shù)據(jù)在APP本次打開時(shí)即刻發(fā)送,使用時(shí)長、自定義事件、錯(cuò)誤統(tǒng)計(jì)等在使用過程中產(chǎn)生的所有消息數(shù)據(jù)都在下次啟動(dòng)應(yīng)用時(shí)發(fā)送。如果應(yīng)用程序啟動(dòng)時(shí)處在不聯(lián)網(wǎng)狀態(tài),那么消息將會(huì)緩存在本地,下次再嘗試發(fā)送。
按間隔發(fā)送:按特定間隔發(fā)送數(shù)據(jù),間隔時(shí)長介于90秒與1天之間。新增、活躍、啟動(dòng)次數(shù)等數(shù)據(jù)在APP本次打開時(shí)即刻發(fā)送,使用時(shí)長、自定義事件、錯(cuò)誤統(tǒng)計(jì)等在使用過程中產(chǎn)生的所有數(shù)據(jù)都按間隔發(fā)送,如果應(yīng)用程序啟動(dòng)時(shí)處在不聯(lián)網(wǎng)狀態(tài),那么消息將會(huì)緩存在本地,下次再嘗試發(fā)送。
2.1.5 發(fā)送策略設(shè)置方法
在后臺 統(tǒng)計(jì)分析->設(shè)置->發(fā)送策略 頁面自定義發(fā)送間隔。具體如下圖:
點(diǎn)擊發(fā)送策略之后,可以看到設(shè)置頁面
注意 :
(1)在沒有獲取到在線配置時(shí),默認(rèn)使用啟動(dòng)時(shí)發(fā)送的策略;
(2)在打開debug調(diào)試模式或者使用集成測試時(shí),不受發(fā)送策略控制。
(3)在iOS應(yīng)用中,可以通過代碼設(shè)置發(fā)送策略,也可以在后臺進(jìn)行設(shè)置,后臺配置的優(yōu)先級高于本地配置(即代碼中的配置)。
2.1.6 version標(biāo)識
以App打包時(shí)的Build號作為應(yīng)用程序的版本標(biāo)識,不能通過友盟SDK或友盟后臺配置。
友盟SDK為了兼容Xcode3的工程,默認(rèn)取的是Build號,如果需要取Xcode4及以上版本的Version,可以在StartWithAppkey之前調(diào)用下面的方法:
NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
[MobClick setAppVersion:version];
2.1.7 FAQ
Q :在版本分布中沒有看到應(yīng)用相應(yīng)的版本
A :請查看設(shè)置--版本--已隱藏版本列表,是否隱藏了該版本。
2.2 賬號的統(tǒng)計(jì)
友盟在統(tǒng)計(jì)用戶時(shí)以設(shè)備為標(biāo)準(zhǔn),如果需要統(tǒng)計(jì)應(yīng)用自身的賬號,請使用以下接口(需使用3.6.4及以上版本SDK):
+ (void)profileSignInWithPUID:(NSString *)puid;
+ (void)profileSignInWithPUID:(NSString *)puid provider:(NSString *)provider;
PUID:用戶賬號ID.長度小于64字節(jié)
Provider:賬號來源。如果用戶通過第三方賬號登陸,可以調(diào)用此接口進(jìn)行統(tǒng)計(jì)。不能以下劃線"_"開頭,使用大寫字母和數(shù)字標(biāo)識,長度小于32 字節(jié) ; 如果是上市公司,建議使用股票代碼。
+(void)profileSignOff;
賬號登出時(shí)需調(diào)用此接口,調(diào)用之后不再發(fā)送賬號相關(guān)內(nèi)容。
2.2.1 示例:
當(dāng)用戶使用自有賬號登錄時(shí),可以這樣統(tǒng)計(jì):
[MobClick profileSignInWithPUID:@"playerID"];
當(dāng)用戶使用第三方賬號(如新浪微博)登錄時(shí),可以這樣統(tǒng)計(jì):
[MobClick profileSignInWithPUID:@"playerID" provider:@"WB"];
2.2.2 啟動(dòng)賬號統(tǒng)計(jì)
集成賬號統(tǒng)計(jì)功能后,請到我的產(chǎn)品-設(shè)置-應(yīng)用信息,選擇啟動(dòng)使用賬號統(tǒng)計(jì)報(bào)表,如下圖
如果您集成了新版SDK的賬號接口,可以通過啟動(dòng)賬號統(tǒng)計(jì)開關(guān),來開啟賬號報(bào)表的展現(xiàn)。賬號統(tǒng)計(jì)報(bào)表開關(guān)僅作用于報(bào)表的展現(xiàn),不影響數(shù)據(jù)的計(jì)算。您可以根據(jù)實(shí)際的需要來啟動(dòng)或者暫停該功能。集成此功能的第二天才能在后臺報(bào)表看見賬號的數(shù)據(jù)。可在下圖所示位置查看
3. 頁面的統(tǒng)計(jì)
實(shí)現(xiàn)頁面的統(tǒng)計(jì)需要在每個(gè)View中配對調(diào)用如下方法:
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[MobClick beginLogPageView:@"PageOne"];//("PageOne"為頁面名稱,可自定義)
}
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
[MobClick endLogPageView:@"PageOne"];
}
注意: 頁面統(tǒng)計(jì)集成正確,才能夠獲取正確的頁面訪問路徑、訪問深度(PV)的數(shù)據(jù)。
3.1 日志加密設(shè)置
您可以通過如下代碼來設(shè)置加密模式。
/** 設(shè)置是否對日志信息進(jìn)行加密, 默認(rèn)NO(不加密). */
+ (void)setEncryptEnabled:(BOOL)value;
如果@param value為YES,SDK會(huì)對日志進(jìn)行加密。加密模式可以有效防止網(wǎng)絡(luò)攻擊,提高數(shù)據(jù)安全性。
如果@param value為NO,SDK將按照非加密的方式來傳輸日志。
如果您沒有設(shè)置加密模式,SDK的加密模式為NO(不加密)。
3.2 后臺模式設(shè)置
您可以設(shè)置在應(yīng)用切入后臺時(shí),是否進(jìn)入background模式。 對于支持backgound模式的APP,SDK可以確保在進(jìn)入后臺時(shí),完成對日志的持久化工作,保證數(shù)據(jù)的完整性。您可以通過以下方法對后臺模式進(jìn)行設(shè)置:
/** 設(shè)置是否開啟background模式, 默認(rèn)YES. */
+ (void)setBackgroundTaskEnabled:(BOOL)value;
后臺模式默認(rèn)為開啟狀態(tài),對于已支持background模式和一般app不會(huì)有影響。您也可以將@param value設(shè)置為NO,來關(guān)閉掉background模式。
到此,基本統(tǒng)計(jì)功能集成已經(jīng)完成。
4. 自定義事件的統(tǒng)計(jì)
自定義事件可以實(shí)現(xiàn)在應(yīng)用程序中埋點(diǎn)來統(tǒng)計(jì)用戶的點(diǎn)擊行為。自定義事件目前包括“計(jì)數(shù)事件”和“計(jì)算事件”
4.1 使用自定義事件的依賴條件
使用自定義事件功能請先登陸友盟官網(wǎng),在“統(tǒng)計(jì)分析->設(shè)置->事件”(子賬戶由于權(quán)限限制可能無法看到“設(shè)置”選項(xiàng),請聯(lián)系主帳號開通權(quán)限。)頁面中添加相應(yīng)的事件id(事件id可用英文或數(shù)字,不要使用中文和特殊字符且不能使用英文句號“.”您可以使用下劃線“_”),然后服務(wù)器才會(huì)對相應(yīng)的事件請求進(jìn)行處理。
4.2 計(jì)數(shù)事件
使用計(jì)數(shù)事件需要在后臺添加事件時(shí)選擇“計(jì)數(shù)事件”。
4.2.1 統(tǒng)計(jì)發(fā)生次數(shù)
在您希望跟蹤的代碼部分,調(diào)用如下方法:
[MobClick event:(NSString *)eventId];
eventId 為當(dāng)前統(tǒng)計(jì)的事件ID。
示例:統(tǒng)計(jì)微博應(yīng)用中"轉(zhuǎn)發(fā)"事件發(fā)生的次數(shù),那么在轉(zhuǎn)發(fā)的函數(shù)里調(diào)用:
[MobClick event:@"Forward"];
4.2.2 統(tǒng)計(jì)點(diǎn)擊行為各屬性被觸發(fā)的次數(shù)
考慮事件在不同屬性上的取值,可以調(diào)用如下方法:
[MobClick event:(NSString *)eventId attributes:(NSDictionary *)attributes];
attributes 為當(dāng)前事件的屬性和取值(鍵值對),不能為空。
示例:統(tǒng)計(jì)電商應(yīng)用中“購買”事件發(fā)生的次數(shù),以及購買的商品類型及數(shù)量,那么在購買的函數(shù)里調(diào)用:
NSDictionary *dict = @{@"type" : @"book", @"quantity" : @"3"};
[MobClick event:@"purchase" attributes:dict];
4.3 計(jì)算事件
使用計(jì)算事件需要在后臺添加事件時(shí)選擇“計(jì)算事件”。
4.3.1 統(tǒng)計(jì)數(shù)值型變量的值的分布
統(tǒng)計(jì)一個(gè)數(shù)值類型的連續(xù)變量(該變量必須為整數(shù)),用戶每次觸發(fā)的數(shù)值的分布情況,如事件持續(xù)時(shí)間、每次付款金額等,可以調(diào)用如下方法:
+[MobClick event:(NSString *)eventId attributes:(NSDictionary *)attributes counter:(int)number];
示例:購買《Swift Fundamentals》這本書,花了110元
[MobClick event:@"pay" attributes:@{@"book" : @"Swift Fundamentals"} counter:110];
如果您使用的是V3.1.2以下版本的SDK,請使用下面的方法:
-(void)umengEvent:(NSString *)eventId attributes:(NSDictionary *)attributes number:(NSNumber *)number{
NSString *numberKey = @"__ct__";
NSMutableDictionary *mutableDictionary = [NSMutableDictionary dictionaryWithDictionary:attributes];
[mutableDictionary setObject:[number stringValue] forKey:numberKey];
[MobClick event:eventId attributes:mutableDictionary];
}
示例:購買《Swift Fundamentals》這本書,花了110元
[self umengEvent:@"pay" attributes:@{@"book" : @"Swift Fundamentals"} number:@(110)];
4.3.2 統(tǒng)計(jì)點(diǎn)擊次數(shù)及各屬性觸發(fā)次數(shù)
計(jì)算事件除能夠統(tǒng)計(jì)數(shù)值型的參數(shù)外還具有計(jì)數(shù)事件的所有功能。
5. 錯(cuò)誤分析
友盟iOS統(tǒng)計(jì)SDK默認(rèn)自帶錯(cuò)誤分析功能,不需要開發(fā)者手動(dòng)調(diào)用。如果開發(fā)者自己做了錯(cuò)誤捕捉,可以調(diào)用下面方法關(guān)閉友盟的錯(cuò)誤統(tǒng)計(jì):
[MobClick setCrashReportEnabled:NO];