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

Jon*_*nik 11 android google-play-services google-tag-manager

我正在尝试按照" 入门指南"设置Google跟踪代码管理器.

添加默认容器时,文档会明确建议使用二进制默认容器文件(而不是JSON).

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

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

PendingResult<ContainerHolder> pending =
    tagManager.loadContainerPreferNonDefault(CONTAINER_ID,
    R.raw.gtm_default_container);
Run Code Online (Sandbox Code Playgroud)

我在日志中收到此错误:

 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
Run Code Online (Sandbox Code Playgroud)

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)
Run Code Online (Sandbox Code Playgroud)

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

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

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

VM4*_*VM4 3

抱歉回复晚了。在使用标签管理器时遇到了一些困难,并设法解决了我的问题。希望这可以帮助:

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

要加载二进制容器,您需要使用不同的方法。

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

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

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

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