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時,可以做到項目代碼不改變(在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ù)層就是維持了一個事件隊列嘹叫,開發(fā)者通過push一個包含key-value的map對象來添加到隊列中婆殿,當(dāng)push接受到一個key=event的是對象時,將把隊列中的事件內(nèi)容提取出來罩扇,并匹配容器中觸發(fā)器規(guī)則條件婆芦,兩者相符合的即觸發(fā)相應(yīng)代碼邏輯。因此數(shù)據(jù)層包含了接收開發(fā)者push過來的事件map對象喂饥,包含了容器中配置的數(shù)據(jù)層變量信息等消约。

Google TagManager實(shí)際示例

先在項目代碼中通過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兆沙,命名必須跟項目代碼中保持一致性诚些,注意上面的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)計方法時傳入的參數(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,這個過程并未在項目代碼中顯式的調(diào)用GA統(tǒng)計的代碼虽缕,但是數(shù)據(jù)還是會傳輸?shù)紾A.


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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末始藕,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子氮趋,更是在濱河造成了極大的恐慌伍派,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件剩胁,死亡現(xiàn)場離奇詭異诉植,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)昵观,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進(jìn)店門倍踪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人索昂,你說我怎么就攤上這事建车。” “怎么了椒惨?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵缤至,是天一觀的道長。 經(jīng)常有香客問我康谆,道長领斥,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任沃暗,我火速辦了婚禮月洛,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘孽锥。我一直安慰自己嚼黔,他們只是感情好细层,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著唬涧,像睡著了一般疫赎。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上碎节,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天捧搞,我揣著相機(jī)與錄音,去河邊找鬼狮荔。 笑死胎撇,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的殖氏。 我是一名探鬼主播晚树,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼受葛!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起偎谁,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤总滩,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后巡雨,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體闰渔,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年铐望,在試婚紗的時候發(fā)現(xiàn)自己被綠了冈涧。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡正蛙,死狀恐怖督弓,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情乒验,我是刑警寧澤愚隧,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站锻全,受9級特大地震影響狂塘,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜鳄厌,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一荞胡、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧了嚎,春花似錦泪漂、人聲如沸廊营。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽赘风。三九已至,卻和暖如春纵刘,著一層夾襖步出監(jiān)牢的瞬間邀窃,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工假哎, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留瞬捕,地道東北人。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓舵抹,卻偏偏與公主長得像肪虎,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子惧蛹,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評論 2 355

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

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