Android 开发之Google Tag Manager 网络设定
2016-06-20 12:01
701 查看
概念Tag Manager 产品(http://www.google.com/tagmanager/),适用于站点多,运行多套:流量,广告系统的用户。部署一份脚本,然后根据规则,加载对应的脚本,方便修改和管理,还支持版本和调试等功能。国外的话,之前也有很多类似的商业产品。平台:目前有三个平台可应用GTM, 网站,IOS和Android,本文将描述的是Android 对GTM的应用结构图:创建容器:创建变量:变量细节:发布:下载Default GTM resource将下载的文件,导入Android Studio APP工程重命名:/resource/raw/gtm_default_container(按照Android Resource file命名规则自我命名,与后面将贴的代码对应即可)另外GTM,GA等google的服务功能都封装在palyservice 里面,Android Studio 工程项目依赖,如下图所示。Code GoogleTagManagerUtil
public class GoogleTagManagerUtil { private TagManager tagManage; private Context mctx; private Container mcr; private ContainerHolder mcrh; Map<String, Object> arg = null; private static GoogleTagManagerUtil gtmu = null; public static final String GTM_NAME = "GTM-K8646L"; // for adid change to B plan public static final String TAG = "GoogleTagManagerUtil"; public Container getContainer() { return this.mcr; } public ContainerHolder g 4000 etContainerHolder() { return this.mcrh; } private GoogleTagManagerUtil(Context ctx) { this.mctx = ctx; tagManage = TagManager.getInstance(mctx); PendingResult<ContainerHolder> pending = tagManage .loadContainerPreferNonDefault(GTM_NAME, R.raw.gtm_default_container); pending.setResultCallback(new ResultCallback<ContainerHolder>() { @Override public void onResult(ContainerHolder arg0) { // TODO Auto-generated method stub if (arg0.getStatus().isSuccess()) { // mcr = arg0.getContainer(); mcrh = arg0; Log.d(TAG, "GTM onResult isSuccess"); } else { Log.d(TAG, "GTM onResult failed"); } } }, 2, TimeUnit.SECONDS); } public static GoogleTagManagerUtil getInstance(Context ctx) { if (null == gtmu) { gtmu = new GoogleTagManagerUtil(ctx); } return gtmu; } }Activity: 在onCreate 去更新GTM,注意不可以在Main Thread 中,需要开一个工作线程去做。
public class Main2Activity extends Activity {
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); new Thread(new Runnable() { @Override public void run() { if(null!=GoogleTagManagerUtil.getInstance(getApplicationContext()).getContainerHolder()){ GoogleTagManagerUtil.getInstance(getApplicationContext()).getContainerHolder().refresh(); } } }).start();
item1 = (LevelMenuItem) findViewById(R.id.item0);item1.setOnClickListener(new LevelMenuItem.OnItemClickListener() {@Overridepublic void onImageClick() {ContainerHolder containerHolder =GoogleTagManagerUtil.getInstance(getApplicationContext()).getContainerHolder();Container container =null;if(null!=containerHolder){container =containerHolder.getContainer();}if(null!=container){String app_version =container.getString("app_version");boolean has_advertisement= container.getBoolean("has_advertisement");Log.d("TAG",String.format("app_version=%s,has_advertisement=%s",app_version,has_advertisement));}}});
}
运行结果 :
11:56:44.202 15420-15420/com.example.qinghua_liu.myapplication D/TAG: app_version=1.0.1,has_advertisement=false
GTM 修改变量:
保存变量修改,并发布:
发布成功后,开启APP Activity 测试
结果:
11:59:19.735 17922-17922/com.example.qinghua_liu.myapplication D/TAG: app_version=1.0.2,has_advertisement=true
注意点:
1.国内对google访问受限,怎么翻,个人自行想点办法
2.容器ID是唯一标识,与代码中相对应
3.更新时机根据项目需要进行改进成定时间点更新,或排程更新。
4.GTM 更新、取值最好开工作线程去做,避免失败情况出现。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件