您的位置:首页 > 理论基础 > 计算机网络

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 更新、取值最好开工作线程去做,避免失败情况出现。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息