我正在尝试按照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'
答案 0 :(得分:3)
对不起,迟到了。有一些与Tag Manager的斗争并设法解决我的问题。希望这会有所帮助:
是的,可以使用二进制默认容器。该文档与以前版本的跟踪代码管理器相冲突。我相信它与v3相冲突。 (撰写此答案时的当前版本是v4)。
要加载二进制容器,您需要使用其他方法。
您需要使用TagManager.loadContainerDefaultOnly()
此方法专门用于测试目的,这样即使没有发布容器,您也可以测试容器是否正在发送匹配。
另一方面,TagManager.loadContainerPreferNonDefault()
将加载它的二进制容器,然后检查网络中是否有当前发布的版本。如果找到发布的版本,无论您使用的是哪个二进制容器,它都将使用该版本。例如:
您添加二进制容器版本15。但是你发布了版本14。此方法将默认为14,因为该版本已发布。
如果您想测试版本15,则必须使用TagManager.loadContainerDefaultOnly()
。