1 分析主體概述
在Quicktracking中,分析主體目前主要分為設備ID、賬號ID和實體ID(在分析中如下圖所示)。
設備ID:QuickTracking為每一臺設備生成的應用級別唯一ID
賬號ID:由您通過接口傳入的用戶賬號,用于定義您用戶的唯一ID
實體ID:Quick Tracking自主生成的用戶標識,通過ID-Mapping將設備ID和賬號ID進行關聯,實現賬號登錄前后行為的打通。
1.1 分析模型中分析主體的選擇
在事件分析中,分析主體的選擇在“預置指標”中:
在漏斗分析、留存分析、分布分析、間隔分析模型中,分析主體的選擇在“分析主體”中:
在session分析、路徑分析和歸因分析模型中,分析主體僅為設備ID。
在人群管理,新建人群時,分析主體僅為實體ID。
1.2 系統屬性和用戶屬性中分析主體的區別
屬性類別 | 分析主體 | 分析含義 |
系統屬性 | 設備ID | 存在于事件表中的設備ID值 |
賬號ID | 存在于事件表中的賬號ID值 | |
實體ID | 存在于事件表中的實體ID值 | |
用戶屬性 | 用戶賬號(賬號ID) | 存在于用戶表中的賬號ID |
常見問題:
什么是事件表?
埋點上報的日志將會存入事件表中,即事件表保存的為埋點上報時上報的實際值,以及通過賬號ID或設備ID生成的實體ID。如果上報日志存在賬號ID則該條日志就有賬號ID,如果上報日志沒有賬號ID則該條日志就沒有賬號ID。
什么是用戶表?
埋點上報的日志中若包含賬號ID,則會在日志存入事件表的基礎上,將賬號ID和實體ID存入用戶表。
埋點上報的日志中事件編碼為“$$_user_profile”,則會在日志存入事件表的基礎上,將該事件的事件屬性作為“用戶屬性”存入用戶表。
系統屬性中的賬號ID與用戶屬性中的用戶賬號有什么區別?
系統屬性中的賬號ID查詢的為事件表中的賬號ID
用戶屬性中的用戶賬號查詢的為用戶表中的賬號ID,是通過事件表中的實體ID在用戶表中關聯查詢到的。
2 設備ID
2.1 App設備ID
Android設備和iOS設備的默認設備ID為應用級別唯一的設備ID,由Quicktracking自動生成:
Android9及以下設備:SDK自動采集imei、wifimac、androidid、SN生成設備ID,生成后存入本地,只有刪除應用獲取刪除應用數據才會重新生成設備ID。
Android10級以上設備:SDK自動采集oaid、gaid、androidid、SN生成設備ID,生成后存入本地,只有刪除應用獲取刪除應用數據才會重新生成設備ID。
iOS設備:SDK自動采集openudid生成設備ID,生成后放入keychain中,只有恢復出廠設置才會重新生成。
使用手機的C端用戶同意采集idfa和oaid,QT SDK才會采集,只有app SDK可以采集到oaid、gaid、imei、wifimac、androidid、SN、idfa、idfv。
iOS C端客戶需要開啟下述配置,SDK才可以采集到idfa | |
android C端客戶需要開啟下述配置,SDK才可以采集到oaid |
具體可查看Android SDK集成文檔和iOS SDK集成文檔。
2.2 小程序設備ID
小程序設備ID需要通過開發者獲取上傳:
設備ID指各個小程序官方生成的唯一ID(例如微信的openid)
上傳方式為賦值給"_anony_id":
//如采集用戶ID是異步行為,需要先阻止SDK上報,設置BLOCK埋點
aplus.aplus_queue.push({
action: 'aplus.setMetaInfo',
arguments: ['_hold', 'BLOCK']
});
// 設置 _anony_id
aplus.aplus_queue.push({
action: "aplus.setMetaInfo",
arguments: ["_anony_id", "您獲取的openid"]
});
// 因為采集用戶ID是異步行為,故需要先設置BLOCK,再設置START
// 設置_hold=START后,事先被block住的日志會攜帶上用戶信息逐條發出
aplus.aplus_queue.push({
action: 'aplus.setMetaInfo',
arguments: ['_hold', 'START']
});
具體可查看小程序 SDK集成文檔。
2.3 Web/H5設備ID
Web/H5設備ID有Quicktracking自動生成和開發者手動上傳兩種方式:
自動生成:默認邏輯,Quicktracking SDK通過獲取到的瀏覽器cookie等參數生成設備ID,網站的設備ID只有瀏覽器發生變化或用戶主動清除cookie和緩存時,設備ID會重新生成,用戶的瀏覽器和IP地址不變的情況下,重新生成的設備ID不會發生變化。
手動上傳:上傳方式為賦值給"_dev_id"
//如采集用戶ID是異步行為,需要先阻止SDK上報,設置BLOCK埋點
aplus.aplus_queue.push({
action: 'aplus.setMetaInfo',
arguments: ['_hold', 'BLOCK']
});
// 設置 _dev_id
aplus.aplus_queue.push({
action: "aplus.setMetaInfo",
arguments: ["_dev_id", "自定義設備ID"]
});
// 因為采集用戶ID是異步行為,故需要先設置BLOCK,再設置START
// 設置_hold=START后,事先被block住的日志會攜帶上用戶信息逐條發出
aplus.aplus_queue.push({
action: 'aplus.setMetaInfo',
arguments: ['_hold', 'START']
});
具體可查看Web/H5 SDK集成文檔。
3 賬號ID
3.1 App賬號ID
App端調用固定的API即可上傳用戶賬號。
Android:
//登錄API
public static void onProfileSignIn(String ID);
//登出API
public static void onProfileSignOff();
//示例
MobclickAgent.onProfileSignIn("userID");
MobclickAgent.onProfileSignOff();
iOS:
//登錄API
+ (void)profileSignInWithPUID:(NSString *)puid;
//登出API
+ (void)profileSignOff;
//示例
[MobClick profileSignInWithPUID:@"UserID"];
[MobClick profileSignOff];
具體可查看Android SDK集成文檔和iOS SDK集成文檔。
3.2 小程序賬號ID
小程序用戶賬號上傳
用戶登錄時,和在登錄態進入時,都需要上傳
aplus_queue.push({
action: "aplus.setMetaInfo",
arguments: ["_user_id", "您獲取的用戶會員ID"]
});
具體可查看小程序 SDK集成文檔。
3.3 Web/H5 賬號ID
web用戶賬號上傳
用戶登錄時,和在登錄態進入時,都需要上傳
aplus_queue.push({
action: "aplus.setMetaInfo",
arguments: ["_user_id", "您獲取的用戶會員ID"]
});
具體可查看Web/H5 SDK集成文檔。
4 實體ID
實體ID是通過將賬號ID與設備ID進行關聯后的唯一ID(EID),通過EID可以將小程序、H5和App關聯至唯一用戶。具體例子如下:
App 設備A第一條日志進入數據庫時,為其生成唯一EID_1。之后用戶進行的瀏覽事件也會攜帶該EID。
App 設備A觸發了登錄事件,上傳了用戶賬號“188*”,QT將設備A、賬號188*與EID_1進行綁定,所以第一條日志和“瀏覽事件日志”可以與賬號188*關聯。
小程序設備B第一條日志進入數據庫時,為其生成唯一EID_2。用戶使用賬號“188*”登錄后,因為“188*”已經和“EID_1”綁定,所以設備B的EID_2變為EID_1,之后設備B、賬號188*與EID_1進行綁定。
5 字段流轉
代碼示例字段 | SDK上報日志字段 | ods層字段 | dwd字段 | |
App-設備ID | 無 | umid | utdid | utdid |
小程序-設備ID | _anony_id | umid | utdid | utdid |
web-設備ID | 無或_dev_id | umid | utdid | utdid |
App-用戶賬號 | puid | active_user:{puid:""} | active_user:{puid:""} | ll_userid |
小程序-用戶賬號 | _user_id | active_user:{puid:""} | active_user:{puid:""} | ll_userid |
web-用戶賬號 | _user_id | active_user:{puid:""} | active_user:{puid:""} | ll_userid |