Google TagManager概念梳理(Android)

概述

跟踪代码管理器是一个代码管理系统,可以轻松地更新移动应用上的代码和代码段被触发的时机,在有预先埋点的情况下,完成对第三方sdk代码或自定义代码逻辑的“动态”管理。

例如通过tagmanager添加和更新Google Analytics等第三方sdk代码或自定义代码,而无需修改应用代码。这样既减少了错误,也免除了配置代码时向开发者求助的麻烦。

基本概念

TagManager必须了解的一些基本概念,比如容器,代码,数据层、触发器和变量等。

简单的说,一个公司注册一个账号,可以创建多个容器,比如一个android应用对应一个容器,容器里面主要包含了代码(tags)、触发器(triggers),宏变量(variables)等。

容器

对于android端而言,容器就是提供给sdk的一份二进制配置文件(有导出的json文件),sdk可以更具容器配置文件来进行处理。sdk也可以从服务器获取最新的配置文件来替换当前本地的文件。

通过获取容器,开发者可以获取动态获取集合值类型的宏变量值,要处理替换部分预设宏变量的参数,比如app id等,也可以获取容器相关的信息等。

代码

代码指的是向第三方sdk发送信息的代码段。如果不使用诸如跟踪代码管理器这样的代码管理解决方案,则需要将这些代码段直接添加到移动应用的文件中。而使用tagmanager,就无需再在源代码文件中维护每个代码段,而只需在跟踪代码管理器界面中指定希望触发的代码,以及希望的触发时间。

对于android端而言,代码就是指定了调用第三方sdk的信息,比如说可以设置tag产品为Google Analytics时,指定该第三方sdk需要配置的的Tracking ID(追踪id)、追踪类型(相当于sdk触发的事件类型,比如说指定为app view事件)等信息。

代码效果相当于就是把我们需要在嵌入第三方sdk后要做的事件,转由tagmanager完成触发,不需要再显式地调用第三方sdk的代码。这样做的好处有下面几点:

  • 只需tagmanager实现一次触发动作,减少调用多个sdk的代码实现,相当于代码统一管理,避免重复多个sdk调用代码。
  • 后台可以动态配置代码,客户端获取到新的容器配置后,会解析配置文件后根据新的代码和规则,改变触动动作的时机以及调用第三方sdk的方法具体参数,实现“动态”配置(在必须先埋好点的基础上)。
  • 方便后期替换支持的第三方sdk时,可以做到项目代码不改变(在tagmanager支持的第三方sdk,不需要再显式调用第三方sdk触发代码),当然所有的前提的都是要埋点。

触发器

首先需要再次明确一点:tagmanager并不是减少了埋点的数量,该埋的位置照样还是要埋,只不过是将原来调用第三方sdk触发事件的方法转由tagmanager来完成,相当于tagmanaager作为第三方sdk的代理者(其实是后面的数据层实现了数据映射)。

触发器,简单的说就是一组行为触发的条件规则,满足条件的行为才会被触发。这也是tagmanager的“动态”性表现之一。也就是用户行为要触发代码前,需要达到触发器设置的条件规则才能执行,这个触发器配置内容包含在从后端获取的容器配置文件中。

“触发器”是指在运行时求值结果为“true”或“false”的条件。求值方法是对比“变量”的值与在定义触发器时指定的值,附加到代码的触发器用于控制该代码在何时触发或不触发。

“tagmanager变量”是指经过配置的“名称-值”对,其中的值在运行时填充。tagmanager有许多内置变量,还可以配置自定义变量。

例如,预定义的变量“url”始终包含当前加载的网页的网址。如果希望仅针对网页 example.com/purchase/receipt.html触发代码,那么需要定义这样的规则:
事件:网页浏览
触发器类型:网页浏览
触发条件:某些网页浏览
当以下条件的结果为“true”时触发代码:
网址包含 example.com/purchase/receipt.html

可以根据自己的需要定义变量(多种宏类型变量),每个变量都包含需要在运行时使用的某些信息。然后,可以在触发器条件中使用这些变量,或者通过这些变量将信息传递给代码。

常见的触发条件:

条件
包含
开头为
结尾为
匹配正则表达式
与正则表达式相匹配(忽略大小写)
小于
小于或等于
大于
不等于
不包含
开头不是
结尾不是
不匹配正则表达式
与正则表达式不匹配(忽略大小写)

宏变量

在tagmanager中变量都是具有固定的类型匹配的.

  • 已启用广告跟踪:对于 Android,如果启用了广告跟踪,该变量返回 true,如果用户选择停用针对用户兴趣的广告,则返回 false。在 Android 开发者中心中了解详情。v4 以前的 SDK 版本将始终返回 false。移动应用容器中会提供此类型的内置变量,无需定义这一类型的新变量。
  • 应用 ID:该值设置为程序包名称 (Android) 或捆绑包 ID (iOS)。移动应用容器中会提供此类型的内置变量,无需定义这一类型的新变量。
  • 应用名称:该值设置为当前正在运行的应用的名称。移动应用容器中会提供此类型的内置变量,无需定义这一类型的新变量。
  • 应用版本号:该值设置为当前正在运行的应用的版本。移动应用容器中会提供此类型的内置变量,无需定义这一类型的新变量。
  • 常量:该值设置为提供的字符串。
  • 容器 ID:该值为该容器的公共 ID(如 GTM-ABC42)。移动应用容器中会提供此类型的内置变量,无需定义这一类型的新变量。
  • 容器版本号:当容器处于预览模式时,此变量值为容器的预览版本号。在其他情况下,此变量值是容器的实际版本号。移动应用容器中会提供此类型的内置变量,无需定义这一类型的新变量。
  • 设备 ID:对于 Android,该值设置为设备 ID。移动应用容器中会提供此类型的内置变量,无需定义这一类型的新变量。
  • 设备名称:该值设置为当前正在运行的应用的设备名称(如“Samsung Android”、“Android SDK built for x86”)。移动应用容器中会提供此类型的内置变量,无需定义这一类型的新变量。
  • 事件名称:在应用中执行以下代码时,该值设置为“eventNameXYZ”:
  • 事件参数:该值设置为针对给定键记录的 Firebase Analytics 事件参数值。
  • Firebase 用户属性:该值设置为给定键的 Firebase Analytics 用户属性值。
  • 函数调用:该值设置为调用预注册的函数所返回的值。要了解详情,请参阅 SDK 文档(Android 或 iOS)。
  • 用于广告的 ID:对于 Android,该值设置为广告 ID。在 Android 开发者中心中了解详情。v4 以前的 SDK 版本将始终返回 ''(空字符串)。
  • 语言:该值设置为两个字母的语言代码,用于表示用户设置的设备语言。移动应用容器中会提供此类型的预定义变量,无需定义这一类型的新变量。
  • 对照表:该值根据对照表中的说明进行设置。对照表包含两列(下表中不包含任何数据,数据的使用方法在下文中介绍):
    操作系统版本:该值设置为安装应用的操作系统的版本。移动应用容器中会提供此类型的内置变量,无需定义这一类型的新变量。
  • 平台:该值设置为当前正在运行的应用所属的平台(如“Android”)。移动应用容器中会提供此类型的内置变量,无需定义这一类型的新变量。
  • 随机数字:该值设置为介于 0 到 2147483647 之间的一个随机数字。移动应用容器中会提供此类型的内置变量,无需定义这一类型的新变量。
  • 屏幕分辨率:该值设置为当前正在运行应用的设备的屏幕分辨率。格式为“<宽>x<高>”,例如“1024x768”。移动应用容器中会提供此类型的内置变量,无需定义这一类型的新变量。
  • SDK 版本:该值设置为安装应用的操作系统的 SDK 版本。移动应用容器中会提供此类型的内置变量,无需定义这一类型的新变量。
  • 操作系统版本:该值设置为安装应用的操作系统的版本。
  • 平台:该值设置为目前正在运行应用的平台(“Android”或“iOS”其中之一)。移动应用容器中会提供此类型的预定义变量,无需定义这一类型的新变量。
  • 随机数:该值设置为介于 0 到 2147483647 之间的一个随机数。
  • 屏幕分辨率:该值设置为当前正在运行应用的设备的屏幕分辨率。格式为“宽 x 高”,例如“1024x768”。移动应用容器中会提供此类型的预定义变量,无需定义这一类型的新变量。
  • SDK 版本:该值设置为安装应用的操作系统的 SDK 版本。移动应用容器中会提供此类型的预定义变量,无需定义这一类型的新变量。

数据层映射

数据层是一种对象,可配置希望传递到tagmanager的信息。这需要配置数据层变量,用来采集这些值以备日后使用。要使tagmanager评估数据层变量的值,系统还必须推送事件,使用push来完成这个操作。

在android中,数据层就是维持了一个事件队列,开发者通过push一个包含key-value的map对象来添加到队列中,当push接受到一个key=event的是对象时,将把队列中的事件内容提取出来,并匹配容器中触发器规则条件,两者相符合的即触发相应代码逻辑。因此数据层包含了接收开发者push过来的事件map对象,包含了容器中配置的数据层变量信息等。

Google TagManager实际示例

先在项目代码中通过getDataLayer()获取数据层对象 可以使用push或pushEvent方法将数据传到数据层

如上图,使用pushEvent(object)相当于push("event",object),表示向数据层push了一个key = “event”,value = “openScreen”和一个key = “screen-name”,value = “test page”的map对象集。这些数据层变量会映射到Google Analytiecs中成为触发的参数。

下面来演示一下Google Tagmanager的具体操作步骤

创建变量

创建数据层变量screen-name,作为传入数据层map的key,命名必须跟项目代码中保持一致性,注意上面的screen name2只是用于管理界面操作的标示。

创建一个常量类型的变量,用于保存Google Analytiecs的tracking id

创建触发器

  1. 触发器openScreen: 在管理界面Event中数据层变量event值等于openScreen时触发


  2. 触发器TestScrenn: 管理界面变量screen name2中的数据层变量screen-name值等于test page时触发


创建代码Tag

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


选择管理代码的产品类型,这里选择Google Analytiecs,择好后再配置tag相关信息,比如GA所需的tracking id,触发的事件类型为App View,触发GA统计方法时传入的参数screenName会替换成数据层变量screen name2的值。就是数据层变量的值映射到GA的方法参数。

借助tagmanager中的自动事件跟踪功能,无需在调用ga的send("event", "category", "action", "label")硬编码每个点击操作,可以直接在TagManager界面中创建事件代码,然后基于预定义的变量或可以在TagManager界面中创建的自定义变量使用触发器触发这些代码。

配置代码触发器,选择之前配置的两个触发器就行。


全部配置完成后点击保存完成,点击publish生成新的版本发布。


整体的关系效果图

通过调用tagmanager配置的数据层变量和方法,最终数据映射到Google analytiecs,这个过程并未在项目代码中显式的调用GA统计的代码,但是数据还是会传输到GA.


在goole analytiecs查看数据

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,637评论 18 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,830评论 25 707
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,778评论 6 342
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,598评论 18 399
  • 阳光 温暖,干净 露珠 剔透,短暂 阳光 炽热 ,豪迈 露珠 微小,柔情 阳光爱了 挥洒了他的热情 露珠以忍耐回应...
    剑倚天下阅读 170评论 0 0