这是 Google 跟踪代码管理器 (GTM) 的移动应用实现方式。用法示例:
Container container = TagManager.getInstance(context).openContainer(myContainerId); String value = container.getString("myKey"); DataLayer dataLayer = TagManager.getInstance(context).getDataLayer(); dataLayer.push(DataLayer.mapOf("event", "openScreen", "screenName", "Main Page"));容器是宏、代码和规则的集合。它是在 GTM 应用中创建的,并被分配了容器 ID。 此容器 ID 就是此 API 中使用的容器 ID。
Container
类提供了用于检索给定键的值的方法。getBoolean(String)
、getDouble(String)
、getLong(String)
和 getString(String)
例程会返回值集合宏的键的当前值,具体取决于与容器关联的规则。
例如,如果您的容器包含一个值集合宏,该宏的键为 speed
,其值为 32,启用规则为 Language
;另一个值集合宏的键为 speed
,其值为 45,启用规则为 Language
不是“en”,则进行以下调用:
container.getLong("speed")会在设备的当前语言为英语时返回 32,否则返回 45。
数据层是包含有关应用的一般信息的地图。DataLayer
类提供了从数据层推送和检索数据的方法。将 event
键推送到数据层会导致触发与此事件匹配的代码。
容器的初始版本与应用捆绑在一起。它应作为名称为 tagmanager/containerId 的素材资源放置,其中 containerId 与您将在此 API 中使用的容器 ID 相同。当您调用 openContainer(String, Container.Callback)
时,将返回容器以及这些捆绑的规则/宏。您将在界面中创建容器,然后使用“下载”按钮下载该容器。
您可以在界面中修改容器并发布新版本。在这种情况下,移动应用下次(目前为每 12 小时)从网络中刷新容器时,就会获得新版本。当您调用其中一个 get... 例程时,将使用最新的规则计算该值。
下载的容器保存在本地;当您调用 openContainer(String, Container.Callback)
时,它会首先加载默认容器,然后再异步加载任何已保存的容器。如果未找到任何文件,或者已超过 12 小时,它会尝试从网络中检索较新版本。您可以通过将 Container.Callback
传递给 openContainer(String, Container.Callback)
来查找这些异步加载的状态。
有时,您可能希望阻塞,直到非默认容器可用或最近的新容器可用为止。ContainerOpener
是一个实用程序类,可以提供帮助。
创建完容器后,请调用 close()
。
嵌套类摘要
接口 | TagManager.Logger | 用于记录错误/警告/信息/调试/详细日志记录的简单接口。 | |
枚举 | TagManager.RefreshMode | 用于刷新容器的模式。 |
公共方法摘要
容器 |
getContainer(String containerId)
|
上下文 | |
DataLayer | |
静态 TagManager |
getInstance(Context context)
|
日志记录器 | |
TagManager.RefreshMode | |
容器 | |
void | |
void |
公共方法
public Context getContext ()
返回与此对象关联的已保存上下文。
public 容器 openContainer (String containerId, Container.Callback containerId)
返回一个容器。当容器发生各种情况时,系统将调用回调。openContainer 至少会尝试加载容器的已保存版本。如果没有保存的版本,或者保存的版本已过期,系统会尝试从网络加载。
通常情况下,返回的容器是空的,但加载将在单独的线程上进行,因此返回的容器可能会在返回之前或返回后刷新,也可能永远不会刷新(例如,在容器的生命周期内没有网络连接)。
如果您针对指定的 containerId
再次调用 openContainer
,则会抛出异常。
参数
containerId | 要打开的容器的 ID |
callback | 一个对象,其各种方法会在加载过程的某些部分被调用。请注意,这些方法可能会从不同的线程调用。此外,它们可能会在 openContainer 返回之前调用。
|