Google TagManager概念梳理(Android)

概述

跟蹤代碼管理器是一個代碼管理系統(tǒng),可以輕松地更新移動應(yīng)用上的代碼和代碼段被觸發(fā)的時機(jī),在有預(yù)先埋點(diǎn)的情況下,完成對第三方sdk代碼或自定義代碼邏輯的“動態(tài)”管理。

例如通過tagmanager添加和更新Google Analytics等第三方sdk代碼或自定義代碼,而無需修改應(yīng)用代碼。這樣既減少了錯誤,也免除了配置代碼時向開發(fā)者求助的麻煩。

基本概念

TagManager必須了解的一些基本概念,比如容器,代碼,數(shù)據(jù)層、觸發(fā)器和變量等。

簡單的說,一個公司注冊一個賬號,可以創(chuàng)建多個容器,比如一個android應(yīng)用對應(yīng)一個容器,容器里面主要包含了代碼(tags)、觸發(fā)器(triggers),宏變量(variables)等。

容器

對于android端而言,容器就是提供給sdk的一份二進(jìn)制配置文件(有導(dǎo)出的json文件),sdk可以更具容器配置文件來進(jìn)行處理。sdk也可以從服務(wù)器獲取最新的配置文件來替換當(dāng)前本地的文件。

通過獲取容器,開發(fā)者可以獲取動態(tài)獲取集合值類型的宏變量值,要處理替換部分預(yù)設(shè)宏變量的參數(shù),比如app id等,也可以獲取容器相關(guān)的信息等。

代碼

代碼指的是向第三方sdk發(fā)送信息的代碼段。如果不使用諸如跟蹤代碼管理器這樣的代碼管理解決方案,則需要將這些代碼段直接添加到移動應(yīng)用的文件中。而使用tagmanager,就無需再在源代碼文件中維護(hù)每個代碼段,而只需在跟蹤代碼管理器界面中指定希望觸發(fā)的代碼,以及希望的觸發(fā)時間。

對于android端而言,代碼就是指定了調(diào)用第三方sdk的信息,比如說可以設(shè)置tag產(chǎn)品為Google Analytics時,指定該第三方sdk需要配置的的Tracking ID(追蹤id)、追蹤類型(相當(dāng)于sdk觸發(fā)的事件類型,比如說指定為app view事件)等信息。

代碼效果相當(dāng)于就是把我們需要在嵌入第三方sdk后要做的事件,轉(zhuǎn)由tagmanager完成觸發(fā),不需要再顯式地調(diào)用第三方sdk的代碼。這樣做的好處有下面幾點(diǎn):

  • 只需tagmanager實(shí)現(xiàn)一次觸發(fā)動作,減少調(diào)用多個sdk的代碼實(shí)現(xiàn),相當(dāng)于代碼統(tǒng)一管理,避免重復(fù)多個sdk調(diào)用代碼。
  • 后臺可以動態(tài)配置代碼,客戶端獲取到新的容器配置后,會解析配置文件后根據(jù)新的代碼和規(guī)則,改變觸動動作的時機(jī)以及調(diào)用第三方sdk的方法具體參數(shù),實(shí)現(xiàn)“動態(tài)”配置(在必須先埋好點(diǎn)的基礎(chǔ)上)。
  • 方便后期替換支持的第三方sdk時,可以做到項(xiàng)目代碼不改變(在tagmanager支持的第三方sdk,不需要再顯式調(diào)用第三方sdk觸發(fā)代碼),當(dāng)然所有的前提的都是要埋點(diǎn)。

觸發(fā)器

首先需要再次明確一點(diǎn):tagmanager并不是減少了埋點(diǎn)的數(shù)量,該埋的位置照樣還是要埋,只不過是將原來調(diào)用第三方sdk觸發(fā)事件的方法轉(zhuǎn)由tagmanager來完成,相當(dāng)于tagmanaager作為第三方sdk的代理者(其實(shí)是后面的數(shù)據(jù)層實(shí)現(xiàn)了數(shù)據(jù)映射)。

觸發(fā)器,簡單的說就是一組行為觸發(fā)的條件規(guī)則,滿足條件的行為才會被觸發(fā)。這也是tagmanager的“動態(tài)”性表現(xiàn)之一。也就是用戶行為要觸發(fā)代碼前,需要達(dá)到觸發(fā)器設(shè)置的條件規(guī)則才能執(zhí)行,這個觸發(fā)器配置內(nèi)容包含在從后端獲取的容器配置文件中。

“觸發(fā)器”是指在運(yùn)行時求值結(jié)果為“true”或“false”的條件。求值方法是對比“變量”的值與在定義觸發(fā)器時指定的值,附加到代碼的觸發(fā)器用于控制該代碼在何時觸發(fā)或不觸發(fā)。

“tagmanager變量”是指經(jīng)過配置的“名稱-值”對,其中的值在運(yùn)行時填充。tagmanager有許多內(nèi)置變量,還可以配置自定義變量。

例如,預(yù)定義的變量“url”始終包含當(dāng)前加載的網(wǎng)頁的網(wǎng)址。如果希望僅針對網(wǎng)頁 example.com/purchase/receipt.html觸發(fā)代碼,那么需要定義這樣的規(guī)則:
事件:網(wǎng)頁瀏覽
觸發(fā)器類型:網(wǎng)頁瀏覽
觸發(fā)條件:某些網(wǎng)頁瀏覽
當(dāng)以下條件的結(jié)果為“true”時觸發(fā)代碼:
網(wǎng)址包含 example.com/purchase/receipt.html

可以根據(jù)自己的需要定義變量(多種宏類型變量),每個變量都包含需要在運(yùn)行時使用的某些信息。然后,可以在觸發(fā)器條件中使用這些變量,或者通過這些變量將信息傳遞給代碼。

常見的觸發(fā)條件:

條件
包含
開頭為
結(jié)尾為
匹配正則表達(dá)式
與正則表達(dá)式相匹配(忽略大小寫)
小于
小于或等于
大于
不等于
不包含
開頭不是
結(jié)尾不是
不匹配正則表達(dá)式
與正則表達(dá)式不匹配(忽略大小寫)

宏變量

在tagmanager中變量都是具有固定的類型匹配的.

  • 已啟用廣告跟蹤:對于 Android,如果啟用了廣告跟蹤,該變量返回 true,如果用戶選擇停用針對用戶興趣的廣告,則返回 false。在 Android 開發(fā)者中心中了解詳情。v4 以前的 SDK 版本將始終返回 false。移動應(yīng)用容器中會提供此類型的內(nèi)置變量,無需定義這一類型的新變量。
  • 應(yīng)用 ID:該值設(shè)置為程序包名稱 (Android) 或捆綁包 ID (iOS)。移動應(yīng)用容器中會提供此類型的內(nèi)置變量,無需定義這一類型的新變量。
  • 應(yīng)用名稱:該值設(shè)置為當(dāng)前正在運(yùn)行的應(yīng)用的名稱。移動應(yīng)用容器中會提供此類型的內(nèi)置變量,無需定義這一類型的新變量。
  • 應(yīng)用版本號:該值設(shè)置為當(dāng)前正在運(yùn)行的應(yīng)用的版本。移動應(yīng)用容器中會提供此類型的內(nèi)置變量,無需定義這一類型的新變量。
  • 常量:該值設(shè)置為提供的字符串。
  • 容器 ID:該值為該容器的公共 ID(如 GTM-ABC42)。移動應(yīng)用容器中會提供此類型的內(nèi)置變量,無需定義這一類型的新變量。
  • 容器版本號:當(dāng)容器處于預(yù)覽模式時,此變量值為容器的預(yù)覽版本號。在其他情況下,此變量值是容器的實(shí)際版本號。移動應(yīng)用容器中會提供此類型的內(nèi)置變量,無需定義這一類型的新變量。
  • 設(shè)備 ID:對于 Android,該值設(shè)置為設(shè)備 ID。移動應(yīng)用容器中會提供此類型的內(nèi)置變量,無需定義這一類型的新變量。
  • 設(shè)備名稱:該值設(shè)置為當(dāng)前正在運(yùn)行的應(yīng)用的設(shè)備名稱(如“Samsung Android”、“Android SDK built for x86”)。移動應(yīng)用容器中會提供此類型的內(nèi)置變量,無需定義這一類型的新變量。
  • 事件名稱:在應(yīng)用中執(zhí)行以下代碼時,該值設(shè)置為“eventNameXYZ”:
  • 事件參數(shù):該值設(shè)置為針對給定鍵記錄的 Firebase Analytics 事件參數(shù)值。
  • Firebase 用戶屬性:該值設(shè)置為給定鍵的 Firebase Analytics 用戶屬性值。
  • 函數(shù)調(diào)用:該值設(shè)置為調(diào)用預(yù)注冊的函數(shù)所返回的值。要了解詳情,請參閱 SDK 文檔(Android 或 iOS)。
  • 用于廣告的 ID:對于 Android,該值設(shè)置為廣告 ID。在 Android 開發(fā)者中心中了解詳情。v4 以前的 SDK 版本將始終返回 ''(空字符串)。
  • 語言:該值設(shè)置為兩個字母的語言代碼,用于表示用戶設(shè)置的設(shè)備語言。移動應(yīng)用容器中會提供此類型的預(yù)定義變量,無需定義這一類型的新變量。
  • 對照表:該值根據(jù)對照表中的說明進(jìn)行設(shè)置。對照表包含兩列(下表中不包含任何數(shù)據(jù),數(shù)據(jù)的使用方法在下文中介紹):
    操作系統(tǒng)版本:該值設(shè)置為安裝應(yīng)用的操作系統(tǒng)的版本。移動應(yīng)用容器中會提供此類型的內(nèi)置變量,無需定義這一類型的新變量。
  • 平臺:該值設(shè)置為當(dāng)前正在運(yùn)行的應(yīng)用所屬的平臺(如“Android”)。移動應(yīng)用容器中會提供此類型的內(nèi)置變量,無需定義這一類型的新變量。
  • 隨機(jī)數(shù)字:該值設(shè)置為介于 0 到 2147483647 之間的一個隨機(jī)數(shù)字。移動應(yīng)用容器中會提供此類型的內(nèi)置變量,無需定義這一類型的新變量。
  • 屏幕分辨率:該值設(shè)置為當(dāng)前正在運(yùn)行應(yīng)用的設(shè)備的屏幕分辨率。格式為“<寬>x<高>”,例如“1024x768”。移動應(yīng)用容器中會提供此類型的內(nèi)置變量,無需定義這一類型的新變量。
  • SDK 版本:該值設(shè)置為安裝應(yīng)用的操作系統(tǒng)的 SDK 版本。移動應(yīng)用容器中會提供此類型的內(nèi)置變量,無需定義這一類型的新變量。
  • 操作系統(tǒng)版本:該值設(shè)置為安裝應(yīng)用的操作系統(tǒng)的版本。
  • 平臺:該值設(shè)置為目前正在運(yùn)行應(yīng)用的平臺(“Android”或“iOS”其中之一)。移動應(yīng)用容器中會提供此類型的預(yù)定義變量,無需定義這一類型的新變量。
  • 隨機(jī)數(shù):該值設(shè)置為介于 0 到 2147483647 之間的一個隨機(jī)數(shù)。
  • 屏幕分辨率:該值設(shè)置為當(dāng)前正在運(yùn)行應(yīng)用的設(shè)備的屏幕分辨率。格式為“寬 x 高”,例如“1024x768”。移動應(yīng)用容器中會提供此類型的預(yù)定義變量,無需定義這一類型的新變量。
  • SDK 版本:該值設(shè)置為安裝應(yīng)用的操作系統(tǒng)的 SDK 版本。移動應(yīng)用容器中會提供此類型的預(yù)定義變量,無需定義這一類型的新變量。

數(shù)據(jù)層映射

數(shù)據(jù)層是一種對象,可配置希望傳遞到tagmanager的信息。這需要配置數(shù)據(jù)層變量,用來采集這些值以備日后使用。要使tagmanager評估數(shù)據(jù)層變量的值,系統(tǒng)還必須推送事件,使用push來完成這個操作。

在android中,數(shù)據(jù)層就是維持了一個事件隊(duì)列,開發(fā)者通過push一個包含key-value的map對象來添加到隊(duì)列中,當(dāng)push接受到一個key=event的是對象時,將把隊(duì)列中的事件內(nèi)容提取出來,并匹配容器中觸發(fā)器規(guī)則條件,兩者相符合的即觸發(fā)相應(yīng)代碼邏輯。因此數(shù)據(jù)層包含了接收開發(fā)者push過來的事件map對象,包含了容器中配置的數(shù)據(jù)層變量信息等。

Google TagManager實(shí)際示例

先在項(xiàng)目代碼中通過getDataLayer()獲取數(shù)據(jù)層對象 可以使用push或pushEvent方法將數(shù)據(jù)傳到數(shù)據(jù)層

如上圖,使用pushEvent(object)相當(dāng)于push("event",object),表示向數(shù)據(jù)層push了一個key = “event”,value = “openScreen”和一個key = “screen-name”,value = “test page”的map對象集。這些數(shù)據(jù)層變量會映射到Google Analytiecs中成為觸發(fā)的參數(shù)。

下面來演示一下Google Tagmanager的具體操作步驟

創(chuàng)建變量

創(chuàng)建數(shù)據(jù)層變量screen-name,作為傳入數(shù)據(jù)層map的key,命名必須跟項(xiàng)目代碼中保持一致性,注意上面的screen name2只是用于管理界面操作的標(biāo)示。

創(chuàng)建一個常量類型的變量,用于保存Google Analytiecs的tracking id

創(chuàng)建觸發(fā)器

  1. 觸發(fā)器openScreen: 在管理界面Event中數(shù)據(jù)層變量event值等于openScreen時觸發(fā)


  2. 觸發(fā)器TestScrenn: 管理界面變量screen name2中的數(shù)據(jù)層變量screen-name值等于test page時觸發(fā)


創(chuàng)建代碼Tag

先看看需要配置的的整體效果


選擇管理代碼的產(chǎn)品類型,這里選擇Google Analytiecs,擇好后再配置tag相關(guān)信息,比如GA所需的tracking id,觸發(fā)的事件類型為App View,觸發(fā)GA統(tǒng)計(jì)方法時傳入的參數(shù)screenName會替換成數(shù)據(jù)層變量screen name2的值。就是數(shù)據(jù)層變量的值映射到GA的方法參數(shù)。

借助tagmanager中的自動事件跟蹤功能,無需在調(diào)用ga的send("event", "category", "action", "label")硬編碼每個點(diǎn)擊操作,可以直接在TagManager界面中創(chuàng)建事件代碼,然后基于預(yù)定義的變量或可以在TagManager界面中創(chuàng)建的自定義變量使用觸發(fā)器觸發(fā)這些代碼。

配置代碼觸發(fā)器,選擇之前配置的兩個觸發(fā)器就行。


全部配置完成后點(diǎn)擊保存完成,點(diǎn)擊publish生成新的版本發(fā)布。


整體的關(guān)系效果圖

通過調(diào)用tagmanager配置的數(shù)據(jù)層變量和方法,最終數(shù)據(jù)映射到Google analytiecs,這個過程并未在項(xiàng)目代碼中顯式的調(diào)用GA統(tǒng)計(jì)的代碼,但是數(shù)據(jù)還是會傳輸?shù)紾A.


在goole analytiecs查看數(shù)據(jù)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,836評論 6 540
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,275評論 3 428
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,904評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,633評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,368評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,736評論 1 328
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,740評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,919評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,481評論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,235評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,427評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,968評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,656評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,055評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,348評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,160評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,380評論 2 379

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,818評論 18 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,712評論 25 708
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,914評論 6 342
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,733評論 18 399
  • 陽光 溫暖,干凈 露珠 剔透,短暫 陽光 熾熱 ,豪邁 露珠 微小,柔情 陽光愛了 揮灑了他的熱情 露珠以忍耐回應(yīng)...
    劍倚天下閱讀 173評論 0 0