标记管理器:如何加载二进制默认容器?

时间:2015-03-30 13:39:27

标签: android google-play-services google-tag-manager

我正在尝试按照Getting Started指南设置Google跟踪代码管理器。

添加default container时,文档会明确指出使用二进制默认容器文件(而不是JSON)。

  

虽然建议使用二进制文件,但是如果你的容器有   不包含规则或标记,您可以选择使用简单的JSON文件   代替。

我已下载并在res/raw下添加了二进制默认容器。但是使用loadContainerPreferNonDefault()初始化Tag Manager似乎失败了。

PendingResult<ContainerHolder> pending =
    tagManager.loadContainerPreferNonDefault(CONTAINER_ID,
    R.raw.gtm_default_container);

我在日志中收到此错误:

 W/GoogleTagManager﹕ Failed to extract the container from the resource file. 
 Resource is a UTF-8 encoded string but doesn't contain a JSON container

TagManager javadocs(最顶层的示例)暗示您可以传递一个布尔参数来指示资源是JSON还是二进制:

PendingResult pending = tagManager.loadContainerPreferNonDefault(
         myContainerId,    // container ID of the form "GTM-XXXX"
         R.raw.GTM-XXXX,   // the resource ID of the default container
         true);            // the default container is in JSON format (as opposed to binary)

事情是,{strong> loadContainerPreferNonDefault()中没有这样的参数! 您可以选择传递Handler但不传递布尔值。令人沮丧的是,TagManager javadoc在这里发生冲突。

无论如何,是否可以执行入门指南推荐的内容,并使用二进制默认容器?

使用'com.google.android.gms:play-services-analytics:7.0.0'

1 个答案:

答案 0 :(得分:3)

对不起,迟到了。有一些与Tag Manager的斗争并设法解决我的问题。希望这会有所帮助:

是的,可以使用二进制默认容器。该文档与以前版本的跟踪代码管理器相冲突。我相信它与v3相冲突。 (撰写此答案时的当前版本是v4)。

要加载二进制容器,您需要使用其他方法。

您需要使用TagManager.loadContainerDefaultOnly()此方法专门用于测试目的,这样即使没有发布容器,您也可以测试容器是否正在发送匹配。

另一方面,TagManager.loadContainerPreferNonDefault()将加载它的二进制容器,然后检查网络中是否有当前发布的版本。如果找到发布的版本,无论您使用的是哪个二进制容器,它都将使用该版本。例如:

您添加二进制容器版本15。但是你发布了版本14。此方法将默认为14,因为该版本已发布。

如果您想测试版本15,则必须使用TagManager.loadContainerDefaultOnly()