首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Android系统中实现Google标记管理器

在Android系统中实现Google标记管理器
EN

Stack Overflow用户
提问于 2015-05-22 13:04:48
回答 1查看 6.8K关注 0票数 10

我试图通过以下教程实现Google:https://developers.google.com/tag-manager/android/v4/

当我运行应用程序时,我在控制台中得到以下错误:

代码语言:javascript
复制
    05-22 12:27:44.490    V/GoogleTagManager﹕ Attempting to load a container from the resource ID 2131099650 (testconverteo.ismail.converteotag:raw/gtm_default_container)
    05-22 12:27:44.520    E/GoogleTagManager﹕ Invalid macro: _gtm.loadEventEnabled
    05-22 12:27:44.520    V/GoogleTagManager﹕ loadAfterDelay: containerId=GTM-XXXXX delay=29397190
    05-22 12:27:44.530    E/GoogleTagManager﹕ Invalid macro: _gtm.loadEventEnabled
    05-22 12:27:44.490    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

而且我在Google分析中没有实时的数据,甚至没有任何数据可以证明我的应用程序是被跟踪的。

如果有人有同样的问题,或者他采取了相同的步骤,并且知道如何解决这个问题,请在评论中做出解释。

我所做的步骤:

  • 我通过添加builde.gradle (模块: app)来设置Google服务SDK --代码的这一部分:compile 'com.google.android.gms:play-services:7.3.0'
  • 我将权限添加到AndroidManifest.xml文件中
  • 我下载并向应用程序添加默认的容器二进制文件。
  • 我创建一个启动屏幕活动,通过遵循本教程的模式初始化GTM
  • 我把一个事件推到了dataLayer里

我目前在启动屏幕活动中的内容如下:

代码语言:javascript
复制
public class SplashScreenActivity extends Activity {

    private static final String CONTAINER_ID = "GTM-XXXX";

    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_splashscreen);

        TagManager tagManager = TagManager.getInstance(this);
        tagManager.setVerboseLoggingEnabled(true);

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

        pending.setResultCallback(new ResultCallback<ContainerHolder>() {
            @Override
            public void onResult(ContainerHolder containerHolder) {
                ContainerHolderSingleton.setContainerHolder(containerHolder);
                Container container = containerHolder.getContainer();
                if (!containerHolder.getStatus().isSuccess()) {
                    Log.e("IL", "failure loading container");
                    return;
                }
                ContainerHolderSingleton.setContainerHolder(containerHolder);
            ContainerLoadedCallback.registerCallbacksForContainer(container);
            containerHolder.setContainerAvailableListener(new ContainerLoadedCallback());
                startMainActivity();
            }
        }, 2, TimeUnit.SECONDS);
    }

    private void startMainActivity() {
        Intent intent = new Intent(SplashScreenActivity.this, MainActivity.class);
        startActivity(intent);
    }

    private static class ContainerLoadedCallback implements ContainerHolder.ContainerAvailableListener {
        @Override
        public void onContainerAvailable(ContainerHolder containerHolder, String containerVersion) {
            // We load each container when it becomes available.
            Container container = containerHolder.getContainer();
            registerCallbacksForContainer(container);
        }

        public static void registerCallbacksForContainer(Container container) {
            // Register two custom function call macros to the container.
            container.registerFunctionCallMacroCallback("increment", new CustomMacroCallback());
            container.registerFunctionCallMacroCallback("mod", new CustomMacroCallback());
            // Register a custom function call tag to the container.
            container.registerFunctionCallTagCallback("custom_tag", new CustomTagCallback());
        }

    }

}

在主要活动中:

代码语言:javascript
复制
public void onStart() {
    super.onStart();
    DataLayer dataLayer = TagManager.getInstance(this).getDataLayer();
    dataLayer.pushEvent("Application ouverte", DataLayer.mapOf("login page","un de plus"));
}

我还创建了这个类:

代码语言:javascript
复制
public class ContainerHolderSingleton {

    private static ContainerHolder containerHolder;

    /**
     * Utility class; don't instantiate.
     */
    private ContainerHolderSingleton() {
    }

    public static ContainerHolder getContainerHolder() {
        return containerHolder;
    }

    public static void setContainerHolder(ContainerHolder c) {
        containerHolder = c;
    }
}

请注意,我隐藏了Google容器ID

如果有人想要更多的信息,请告诉我

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-04 13:28:35

compile 'com.google.android.gms:play-services:7.3.0'行替换为compile 'com.google.android.gms:play-services:7.0.0'compile 'com.google.android.gms:play-services-analytics:7.0.0' (这更好,因为它只包含ga和gtm相关内容)

我很幸运,从7.0.0开始,我看到gtm在工作。然后升级到7.3.0,它就停止工作了。它可能是用新的gms库修复的。

假设你已经配置了你的容器。如果没有读到更多关于这一点的文章,topic=3441530

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30397488

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档