概述
跟踪代码管理器是一个代码管理系统,可以轻松地更新移动应用上的代码和代码段被触发的时机,在有预先埋点的情况下,完成对第三方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
创建触发器
-
触发器openScreen: 在管理界面Event中数据层变量event值等于openScreen时触发
-
触发器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.