[更新日志][1]? [1]: https://blog.growingio.com/posts/iOS_changelog## 1. 選擇 SDK 安裝方式 請確保您的 XCode 版本為 7.3 或者其后的版本。 GrowingIO 支持兩種 iOS SDK 安裝方式: A. 使用 CocoaPods 管理依賴? 1. 添加 `pod 'GrowingIO'` 到 Podfile 中;? 2. 執(zhí)行 `pod update`,**不要用`--no-repo-update`選項**;? 3. 直接進入**安裝文檔的第五步**;B. 手動安裝依賴? 1. 點擊[![][2]][3]下載 iOS SDK? 2. 進行安裝文檔的第二步? [2]: https://growing.ufilesec.ucloud.cn/sdk/download-icon-ios.svg? [3]: http://growing.ufile.ucloud.cn/sdk/GrowingIO-iOS-SDK.zip## 2. 導(dǎo)入 SDK 按照以下步驟將SDK導(dǎo)入到您的項目中。? 1. 解壓 iOS SDK 壓縮文件;? 2. 添加 Growing.h 和 libGrowing.a 添加到您的 iOS 工程中;提醒:? * 記得勾選 "Copy items if needed"## 3. 添加依賴 在您的工程項目中添加依賴 庫名稱說明Foundation.framework 基礎(chǔ)依賴庫 Security.framework 用于APP連接圈選頁面SSL連接 CoreTelephony.framework 用于讀取運營商名稱 SystemConfiguration.framework 用于判斷網(wǎng)絡(luò)狀態(tài) libicucore.tbd 用于APP連接圈選頁面解析 libsqlite3.tbd 存儲日志 CoreLocation.framework 用于讀取地理位置信息(如果您的app有權(quán)限) 提醒:? * 添加項目依賴庫的位置在 項目設(shè)置target -> 選項卡General -> Linked Frameworks and Libraries## 4. 添加編譯參數(shù) 在您的工程項目中添加編譯參數(shù)? 1. 找到 Linking 設(shè)置? 2. 在 Other Linker Flags 中添加 -ObjC 參數(shù),請注意大小寫提醒:? * Linking 設(shè)置位于 項目設(shè)置 target -> 選項卡 Build Settings,左上角選擇 All。## 5. 添加初始化函數(shù) 在 AppDelegate 中引入`#import "Growing.h"`并添加啟動方法? ? ? ? - (BOOL)application:(UIApplication *)application? ? ? ? didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {? ? ? ? ? ...? ? ? ? ? // 啟動GrowingIO? ? ? ? ? ? ? [Growing startWithAccountId:@"0a1b4118dd954ec3bcc69da5138bdb96"];? ? ? ? ? // 其他配置? ? ? ? ? // 開啟Growing調(diào)試日志 可以開啟日志? ? ? ? ? // [Growing setEnableLog:YES];? ? ? }請確保將代碼添加在上面描述的位置,添加到其他函數(shù)中或者異步 block 中可能導(dǎo)致數(shù)據(jù)不準確。## 6. 添加URL Scheme 把 URL Scheme 添加到您的項目,以便我們喚醒您的程序,進行圈選。 URL Scheme 獲取方式有兩種 1. 添加新產(chǎn)品:登錄官網(wǎng) -> 點擊新建,選擇添加新產(chǎn)品 -> 選擇添加 iOS 應(yīng)用 -> 在第二段“添加 URL Scheme ”中標(biāo)黃字體。 2. 現(xiàn)有產(chǎn)品:登錄官網(wǎng) -> 右上角點擊用戶頭像 -> 點擊“項目管理” -> 點擊左側(cè)的“應(yīng)用管理” -> 找到對應(yīng)產(chǎn)品的 URL Scheme。 URL Scheme 的格式是 growing.xxxxxxxxxxxxxxxx。? 1. 添加您的 URL Scheme(growing.xxxxxxxxxxxxxxxx)到項目中,URL Scheme 位于項目設(shè)置 target -> 選項卡 Info -> URL Types;? 2. 在 AppDelegate 中調(diào)用函數(shù) [Growing handleUrl:] 來接收 URL? ? ? ? - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation? ? {? ? ? ? if ([Growing handleUrl:url])? ? ? ? {? ? ? ? ? ? return YES;? ? ? ? }? ? ? ? ...? ? ? ? return NO;? ? }提醒:? * 如果您的 AppDelegate 中,實現(xiàn)了其中一個或者多個方法,請在已實現(xiàn)的函數(shù)中,調(diào)用 `[Growing handleUrl:]`:? ? ? ? - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(nullable NSString *)sourceApplication annotation:(id)annotation? ? - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url? ? - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary*)options
* 如果以上所有函數(shù)都未實現(xiàn),則請實現(xiàn)以下方法并調(diào)用 `[Growing handleUrl:]`:
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(nullable NSString *)sourceApplication annotation:(id)annotation
* 實際情況可能很復(fù)雜,請在調(diào)試時確保函數(shù) `[Growing handleUrl:]` 會被執(zhí)行到
### 下方各個配置項將影響統(tǒng)計的準確性,請務(wù)必仔細閱讀,判斷是否需要
## 7. 重要配置項
### 設(shè)置界面元素ID
當(dāng)您的應(yīng)用界面改版時,可能會導(dǎo)致無法準確地統(tǒng)計已經(jīng)圈選的元素。
因此,對于應(yīng)用中的主要流程涉及到的界面元素,建議您對它們設(shè)置固定的唯一ID,以保證數(shù)據(jù)的一致性。
具體要求
1. 主要流程指的是登錄、注冊、購買、發(fā)帖等操作步驟。
2. 設(shè)置ID的對象是界面的重要按鈕等元素,如“注冊”、“結(jié)算”、“發(fā)布”按鈕。
3. 設(shè)置ID的方法如下:
(1)接口
@interface UIView(GrowingAttributes)
@property (nonatomic, copy)? NSString* growingAttributesUniqueTag;
@end
(2)代碼寫法:請加在viewWillAppear或者時機更早的函數(shù)里。
-(void)viewWillAppear
{
UIView * MyView;
…
MyView.growingAttributesUniqueTag = @"my_view”;
}
(3)ID只能設(shè)置為字母、數(shù)字和下劃線的組合。
(4)對于已經(jīng)集成過舊版SDK并圈選過的應(yīng)用,對某個元素設(shè)置ID后再圈選它,指標(biāo)數(shù)值會從零開始計算,類似初次集成SDK后發(fā)版的效果,但不影響之前圈選的其它指標(biāo)數(shù)據(jù)。如果不希望出現(xiàn)這種情況,請不要使用這個方法。
### 采集廣告Banner數(shù)據(jù)
很多應(yīng)用上方都有橫向滾動的Banner廣告。
對于這樣的廣告,如果要收集數(shù)據(jù),請在響應(yīng)點擊的控件上添加如下代碼
UIView *view;
…
view.growingAttributesValue = 廣告的唯一ID;
其中view是您的廣告元素,請確保兩點:
1. 對不同廣告圖,廣告的唯一ID也不相同。
2. 響應(yīng)點擊的控件,與設(shè)置ID的控件是同一個
例如,當(dāng)您的橫向滾動廣告共有3張廣告圖時,您可以在3個響應(yīng)點擊的View上分別設(shè)置不同的廣告唯一ID,類似如下效果:
view1.growingAttributesValue = @“ad1”;
view2.growingAttributesValue = @“ad2”;
view3.growingAttributesValue = @“ad3”;
此外,當(dāng)您想采集一些可能沒有文字的控件(比如UIImageView,UIView)時,也可以給屬性growingAttributesValue賦值作為文字,用來在圈選的時候區(qū)分不同的內(nèi)容。
### 頁面別名
對于iOS應(yīng)用,頁面指的是`UIViewController`。
有些時候,對于完成某個功能的頁面,統(tǒng)計時可能需要進一步細分。 比如,對于展示商品列表的頁面,需要區(qū)分衣物類商品,以及食品類商品的兩種列表的訪問量。
為處理這種場景,我們提供了取別名的方法來區(qū)分這兩種情況下的頁面,接口如下:
@interface UIViewController(GrowingAttributes)
@property (nonatomic, copy)? NSString* growingAttributesPageName;
@end
**我們舉例來具體說明它的用法。**
1. 某個應(yīng)用的商品列表頁是用`ListViewController`實現(xiàn)的,所以默認的頁面名稱都是`ListViewController`。
2. 如果想?yún)^(qū)分衣物類商品列表和食品類商品列表,分別看它們的瀏覽量,可以這樣做:
//ListViewController類的實現(xiàn)文件
-(void)viewWillAppear
{
if (展示衣物類商品)
{
self.growingAttributesPageName = @"衣物商品列表";
}
else if (展示食品類商品)
{
self.growingAttributesPageName = @"食品商品列表";
}
}
請注意
1. 必須在該 UIViewController 的 viewWillAppear 或者更早時機的函數(shù)中完成該屬性的賦值操作。
2. 頁面別名只能設(shè)置為字母、數(shù)字和下劃線的組合。
3. 為查看數(shù)據(jù)方便,請盡量對iOS和安卓的同功能頁面取不同的名稱。
### 采集輸入框數(shù)據(jù)
如果您需要采集應(yīng)用內(nèi)某個輸入框內(nèi)的文字(例如搜索框),請調(diào)用如下接口進行設(shè)置
`UIView * view; // view可以是UITextField, UITextView, UISearchBar ... view.growingAttributesDonotTrackValue = NO;`
其中,view代表要被采集的輸入框。 當(dāng)這個輸入框失去焦點(包括應(yīng)用退到后臺),且輸入框內(nèi)容跟獲取焦點前相比發(fā)生變化時,輸入框內(nèi)文字會被發(fā)送回GrowingIO。 請注意:對于密碼輸入框,即便標(biāo)記為需要采集,SDK也會忽略,不采集它的數(shù)據(jù)。
### Facebook廣告SDK
如果使用了Facebook廣告SDK,請務(wù)必添加以下代碼來避免沖突,否則可能造成無法創(chuàng)建項目或者統(tǒng)計準確性問題。
請在main函數(shù)第一行調(diào)用下方函數(shù)。APP啟動后,將不允許修改采集模式。
`[Growing setAspectMode:GrowingAspectModeDynamicSwizzling]`
### 采集H5頁面數(shù)據(jù)
會自動采集H5頁面的數(shù)據(jù),不需要特殊配置。
### 采集GPS數(shù)據(jù)
如果您的應(yīng)用有相應(yīng)權(quán)限,我們將自動采集您的GPS數(shù)據(jù)。
## 8. 其他配置項
### 自定義維度
GrowingIO的數(shù)據(jù)分析工具提供了例如“應(yīng)用版本”,“渠道”,“城市”,“設(shè)備型號”等等這些通用維度。但在使用過程中,有時無法滿足用戶對特定數(shù)據(jù)維度的分析要求。
為了能夠讓數(shù)據(jù)分析變得更加的靈活,我們提供了自定義維度的接口,使用者可以對各種對象設(shè)置屬性。
**這些屬性在作圖時,將表現(xiàn)為維度。**
#### 用戶屬性
用戶屬性只能用來表示登錄用戶本身的屬性,至少包括用戶ID。
根據(jù)需求,可以用來指定用戶的各種屬性 1. 自然屬性,比如性別、出生年月等。 2. 賬戶屬性,比如等級、類型標(biāo)簽等。 3. 行為特征,比如是否有過購買記錄之類。
用戶屬性被稱為CS字段,最多支持十個,從CS1到CS10。
**我們舉例說明它的用法。**
總計上傳5個用戶屬性,分別是
CS1: user_id:100324
CS2: company_id:943123
CS3: user_name:張溪夢
CS4: company_name:GrowingIO
CS5: sales_name:銷售員小王
用戶可以填入自定義的數(shù)據(jù),該數(shù)據(jù)不會持久化,在數(shù)據(jù)變化的時候填入即可
-(void)someMethod
{
…
[Growing setCS1Value:@"100324" forKey:@"user_id"];
[Growing setCS2Value:@"943123" forKey:@"company_id"];
[Growing setCS3Value:@"張溪夢" forKey:@"user_name"];
[Growing setCS4Value:@"GrowingIO" forKey:@"company_name"];
[Growing setCS5Value:@"銷售員小王" forKey:@"sales_name"];
…
}
**CS字段設(shè)置條件和限制**
1. CS 字段不能是和用戶沒有直接關(guān)系的屬性,比如不能是訂單 ID,商品 ID 等。
2. CS1 字段:在 GrowingIO 系統(tǒng)中用于識別注冊用戶的身份,因此 CS1 的 value 必須填寫用戶的唯一身份標(biāo)示 ID。
3. CS2 字段:在 GrowingIO 系統(tǒng)中用于識別 SaaS 客戶的租戶,因此所有的 SaaS 用戶必須填寫租戶的唯一身份標(biāo)示 ID,非 SaaS 用戶不做限定。
4. 對于未登錄用戶,不要設(shè)置任何CS字段。
5. 如果沒有用到所有的CS字段,剩下的可以不設(shè)置。
6. 同一個CS字段,必須保持在各個平臺意義相同。
##### 對于CS1字段設(shè)置時機的說明
基本原則
1. 當(dāng)App使用者的登錄狀態(tài)改變時設(shè)置CS1字段的值
2. 設(shè)置后,在下一次任意`viewDidAppear`被調(diào)用時,新的CS1字段的值才會被發(fā)送
3. 在CS1字段的值被發(fā)送前,重復(fù)設(shè)值會導(dǎo)致新的值取代舊的,舊值會被丟棄
用戶手動登錄 1. 如果有多個登錄入口,在每一個入口登錄成功后,都需要調(diào)用`[Growing setCS1Value:forKey:]`來設(shè)置用戶的唯一標(biāo)識。 2. 如果有第三方登錄,成功登錄后需要調(diào)用`[Growing setCS1Value:forKey:]`方法。
自動登錄:App啟動時,自動登錄或者用戶默認是登錄狀態(tài),也需要調(diào)用`[Growing setCS1Value:forKey:]`方法
注冊:有的App注冊成功后,默認登錄,這種情況下也需要調(diào)用`[Growing setCS1Value:forKey:]`方法。
退出:退出登錄時,需要把CS1字段置空,傳`””`或者`nil`都可以。
**其他CS字段遵循相似的設(shè)置方法**
**在上傳成功兩小時后,您需要在「項目管理-項目配置-CS 配置中」進行字段配置和激活,配置成功后便可開始使用 CS 字段進行分析。配置過程請參考 [屬性數(shù)據(jù)(CS)上傳配置文檔][4]。**
[4]: https://docs.growingio.com/attribution-data.html
#### 頁面屬性
在iOS應(yīng)用中,頁面指的是`UIViewController`。
對于完成多個功能的`UIViewController`(比如商品詳情頁),您可以給不同功能分別設(shè)置不同的`growingAttributesPageGroup`,用來輔助區(qū)分頁面。
頁面屬性被稱為PS字段,每個PageGroup最多支持10個PS字段,從PS1到PS10,接口如下:
@interface UIViewController(GrowingAttributes)
@property (nonatomic, copy) NSString* growingAttributesPageGroup;
@property (nonatomic, copy) NSString* growingAttributesPS1;
@property (nonatomic, copy) NSString* growingAttributesPS2;
@property (nonatomic, copy) NSString* growingAttributesPS3;
@property (nonatomic, copy) NSString* growingAttributesPS4;
@property (nonatomic, copy) NSString* growingAttributesPS5;
@property (nonatomic, copy) NSString* growingAttributesPS6;
@end
創(chuàng)建`growingAttributesPageGroup`的個數(shù)不限。
**我們以商品詳情頁為例詳細說明它的用法。**
您可以將商品的類別,尺碼、顏色、生產(chǎn)廠商等信息設(shè)置為PS字段,從而更加靈活的分析用戶行為。
如,定義產(chǎn)品詳情頁“Clothing”為一個`growingAttributesPageGroup`,并上傳4個頁面屬性,分別是:
PS1:商品ID:1234567
PS2:商品名稱:運動T-shirt
PS3:商品尺碼:M
PS4:商品顏色:藍色
// UIViewController 的子類實現(xiàn)文件中
-(void)viewWillAppear
{
[super viewWillAppear];
…
self.growingAttributesPageGroup = @"Clothing";
…
}
...
// 數(shù)據(jù)請求完畢之后將數(shù)據(jù)設(shè)置到PS屬性中
- (void)xxxxxxxxxxxxxxx
{
…
self.growingAttributesPS1 = @"1234567";
self.growingAttributesPS2 = @"運動 T-shirt";
self.growingAttributesPS3 = @"M";
self.growingAttributesPS4 = @"藍色";
…
}
**PS字段設(shè)置條件和限制**
1. `setGrowingAttributesPageGroup`接口必須在`UIViewController`的`viewWillAppear`方法中調(diào)用
2. `growingAttributesPageGroup`只能設(shè)置為字母、數(shù)字和下劃線的組合。
3. 請務(wù)必設(shè)置`growingAttributesPageGroup`后再設(shè)置各個PS字段
4. 如果沒有用到所有的PS字段,剩下的可以不設(shè)置。
5. 如果對同一頁面的同一PS字段連續(xù)設(shè)置多次,則只保留最后一次設(shè)置的值
6. 除了頁面本身外,在商品詳情頁上面所有的界面元素的行為,包括瀏覽和點擊等,都會和這些頁面屬性建立關(guān)聯(lián)。
**在上傳成功之后,請聯(lián)系在線客服,我們會為您配置并且激活相應(yīng)的屬性字段。**
### 設(shè)置元素對象
如果元素自身的內(nèi)容并不能代表具體的意義,可以使用元素對象來標(biāo)識。
例如“加入購物車”按鈕,可以設(shè)置成加入購物車的具體商品名稱或ID。
UIView * view;
...
view.growingAttributesInfo = "The New iPad";
### 忽略某元素
UIView * view;
...
view.growingAttributesDonotTrack = YES;
其中,view是您需要忽略的元素。
### 自定義數(shù)據(jù)接收服務(wù)器
GrowingIO SDK 支持自定義行為數(shù)據(jù)接收服務(wù)器,用戶可以選擇數(shù)據(jù)先采集到自己的服務(wù)器做一些處理(比如審計)然后轉(zhuǎn)發(fā)到 GrowingIO 服務(wù)器。詳情參見 [CustomTrackerHost][5]
[5]: ../Features/CustomTrackerHost.html
* * *
至此,您的SDK安裝就成功了。您登錄 GrowingIO 進入產(chǎn)品安裝頁面執(zhí)行“數(shù)據(jù)檢測”幾分鐘后就可以看到數(shù)據(jù)了。
您可以在您的App中激活GrowingIO的SDK,并且進行數(shù)據(jù)定義。具體的激活以及數(shù)據(jù)定義的方法,請查看 [3.3.2移動端直接定義][6]
[6]: https://docs.growingio.com/Features/circle/appcirclingapp_new.html