Google Android 科尔多瓦中的标签管理器
Google Tag Manager in Android cordova
我在使用 ionic2/cordova 构建的 Android 移动应用程序中集成 Google 标签管理器时遇到问题。通过 ionic serve
在 Web 浏览器中 运行 时一切正常,但本机构建存在问题。
iOS:
一开始没用,但在添加https://github.com/driftyco/cordova-plugin-wkwebview-engine插件后,google分析开始接收流量。所以这个问题已经解决并且可以正常工作了。
Android:
在 运行 应用程序并使用 Chrome 控制台对其进行调试之后,完全没有错误。 dataLayer
变量可用,我可以将数据推送到其中。当没有为给定事件触发触发器时,它也会 returns 有效响应 true
和当我使用正确类型的事件时 false
。因此,GTM 似乎可以正确识别所有内容。我在“网络”选项卡中观察到,在将对象推送到 dataLayer
之后,Desktop/iOS 都在向 https://www.google-analytics.com/collect?v=1&_v=j49&a=1838345933&t=pageview&[moredatahere]
发送请求,但是 Android 应用程序不发送任何内容(在网络选项卡)。我很好奇这是为什么?为什么 Android 上没有向 GA 提出请求?
这是我的 index.html 文件:
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="UTF-8">
<title>Ionic App</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
<meta name="format-detection" content="telephone=no">
<meta name="msapplication-tap-highlight" content="no">
<link rel="icon" type="image/x-icon" href="assets/icon/favicon.ico">
<link rel="manifest" href="manifest.json">
<meta name="theme-color" content="#4e8ef7">
<!-- Google Tag Manager -->
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-5CH5MGN');</script>
<!-- End Google Tag Manager -->
<!-- cordova.js required for cordova apps -->
<script src="cordova.js"></script>
<link href="build/main.css" rel="stylesheet">
</head>
<body>
<!-- Google Tag Manager (noscript) -->
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-KMJLK35"
height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<!-- End Google Tag Manager (noscript) -->
<!-- Ionic's root component and where the app will load -->
<ion-app></ion-app>
<!-- The polyfills js is generated during the build process -->
<script src="build/polyfills.js"></script>
<!-- The bundle js is generated during the build process -->
<script src="build/main.js"></script>
</body>
</html>
这就是我使用 dataLayer
变量与 GTM 通信的方式:
let event = {
event: 'virtualpageview',
pagepath: url,
pagetitle: title
};
dataLayer.push(event);
另外在 cordova 中 config.xml 我已经添加了:
<access origin="*"/>
我要回答我自己的问题。要解决此问题,您只需简单地调整 GTM 中的 Universal Analytics 代码即可。
设置:
checkProtocolTask
到 null
storage
到 none
clientId
用于识别没有 cookie 的用户(因为存储是 none)。我创建了名为 Device UUID
的新 Javascript 变量,它指向全局变量 device.uuid
,它只是一个设备标识符。
进行这些更改后,一切都会正确记录。
我在使用 ionic2/cordova 构建的 Android 移动应用程序中集成 Google 标签管理器时遇到问题。通过 ionic serve
在 Web 浏览器中 运行 时一切正常,但本机构建存在问题。
iOS:
一开始没用,但在添加https://github.com/driftyco/cordova-plugin-wkwebview-engine插件后,google分析开始接收流量。所以这个问题已经解决并且可以正常工作了。
Android:
在 运行 应用程序并使用 Chrome 控制台对其进行调试之后,完全没有错误。 dataLayer
变量可用,我可以将数据推送到其中。当没有为给定事件触发触发器时,它也会 returns 有效响应 true
和当我使用正确类型的事件时 false
。因此,GTM 似乎可以正确识别所有内容。我在“网络”选项卡中观察到,在将对象推送到 dataLayer
之后,Desktop/iOS 都在向 https://www.google-analytics.com/collect?v=1&_v=j49&a=1838345933&t=pageview&[moredatahere]
发送请求,但是 Android 应用程序不发送任何内容(在网络选项卡)。我很好奇这是为什么?为什么 Android 上没有向 GA 提出请求?
这是我的 index.html 文件:
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="UTF-8">
<title>Ionic App</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
<meta name="format-detection" content="telephone=no">
<meta name="msapplication-tap-highlight" content="no">
<link rel="icon" type="image/x-icon" href="assets/icon/favicon.ico">
<link rel="manifest" href="manifest.json">
<meta name="theme-color" content="#4e8ef7">
<!-- Google Tag Manager -->
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-5CH5MGN');</script>
<!-- End Google Tag Manager -->
<!-- cordova.js required for cordova apps -->
<script src="cordova.js"></script>
<link href="build/main.css" rel="stylesheet">
</head>
<body>
<!-- Google Tag Manager (noscript) -->
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-KMJLK35"
height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<!-- End Google Tag Manager (noscript) -->
<!-- Ionic's root component and where the app will load -->
<ion-app></ion-app>
<!-- The polyfills js is generated during the build process -->
<script src="build/polyfills.js"></script>
<!-- The bundle js is generated during the build process -->
<script src="build/main.js"></script>
</body>
</html>
这就是我使用 dataLayer
变量与 GTM 通信的方式:
let event = {
event: 'virtualpageview',
pagepath: url,
pagetitle: title
};
dataLayer.push(event);
另外在 cordova 中 config.xml 我已经添加了:
<access origin="*"/>
我要回答我自己的问题。要解决此问题,您只需简单地调整 GTM 中的 Universal Analytics 代码即可。
设置:
checkProtocolTask
到null
storage
到none
clientId
用于识别没有 cookie 的用户(因为存储是 none)。我创建了名为Device UUID
的新 Javascript 变量,它指向全局变量device.uuid
,它只是一个设备标识符。
进行这些更改后,一切都会正确记录。