Flash点击监测、流量监测及添加百度、cnzz、量子统计代码的方法和示例

点击监测

AS2.0

常用形式

代码写在按钮上
这种形式的应用最为广泛,也非常简洁,推荐!

on(release){
	getURL("http://www.example.com/ad/index.html", "_blank");
}

这种形式的点击代码,只能加在按钮上,加在时间轴上无效,点不开广告。而且,万一不慎加在时间轴上,输出的时候,Flash还不会报错!

生僻形式 代码写在时间轴上

1)绘制透明按钮,命名btn_click
2)新建图层,在第一帧上写代码

btn_click.onRelease = function() {
	getURL("http://www.example.com/ad/index.html?ord=[timestamp]","_blank");
};

这种形式的点击代码,只能加在时间轴上。

AS3.0

AS3.0 不允许在按钮上写代码:
1)画一个透明按钮,命名为 pc_btn
2)新建一个图层,在第一帧上写代码

pc_btn.addEventListener(MouseEvent.CLICK,clickHandler);

function clickHandler(evt:MouseEvent) {
	var click_URL:String = "http://www.example.com/ad/index.html";
	navigateToURL(new URLRequest(click_URL));
}

AS3.0 添加点击监测新方法 不用画按钮

流量监测

AS2.0

不带时间戳

适用范围:客户给的流量监测代码光秃秃的,没有提醒我们替换的中括号之类,比如:http://adfarm.mediaplex.com/ad/tr/10592-189026-29346-3

if (_root.p == null) {
	this.createEmptyMovieClip("ebTracker1", 999);
	loadMovie("http://www.example.com/ad/dot.gif", ebTracker1);
	_root.p = 1;
	trace("恭喜,流量代码正常触发!");
}

loadMovie 方法支持 AS 1.0,但是,原则上任何 Flash 素材,都不要使用 AS 1.0 发布!

带时间戳或随机数

时间戳概念
适用范围:客户给的监测链接中,有 [timestamp] 或者 [ord] 的字样,或者其它被中括号括起来的字符,如 http://bsch.serving-sys.com/adServer.bs?cn=tf&rtu=-1&ord= [timestamp]

if (_root.p == null) {
    var lv = new LoadVars();
    lv.load("http://www.example.com/ad/dot.gif?ord=" + new Date().getTime());
    _root.p = 1;
    trace("恭喜,流量代码正常触发!");
}

两家监测

if (_root.p == null) {
    var lv1 = new LoadVars();
    var lv2 = new LoadVars();
    lv1.load("http://www.example.com/ad1/dot.gif?ts=" + new Date().getTime());
    lv2.load("http://www.example.com/ad2/dot.gif");
    _root.p = 1;
    trace("恭喜,流量代码正常触发!");
}

AS3.0

不带时间戳

var imp_URL:String = "http://www.example.com/ad/dot.gif";//这里是流量监测地址
var firstFlag;//是否第一次请求,如果是,执行,否则不执行!

try {
	if (firstFlag == undefined) {
		var loader:URLLoader = new URLLoader();
		loader.load(new URLRequest(imp_URL));
		//trace(imp_URL);
		firstFlag = 1;
		trace("恭喜,流量代码正常触发!");
	}
} catch (error:Error) {
	trace("流量请求失败!" + error);
}

带时间戳

var imp_URL:String = "http://www.example.com/ad/dot.gif" + "?timestamp=" + new Date().getTime();//这里是流量监测地址
var firstFlag;//是否第一次请求,如果是,执行,否则不执行!

try {
	if (firstFlag == undefined) {
		var loader:URLLoader = new URLLoader();
		loader.load(new URLRequest(imp_URL));
		//trace(imp_URL)
		firstFlag = 1;
		trace("恭喜,流量代码正常触发!");
	}
} catch (error:Error) {
	trace("流量请求失败!" + error);
}

两家监测

import flash.display.Loader;
import flash.net.URLRequest;

var imp_URL1:String = "http://v.admaster.com.cn/i/a1111,b200234788,c1464,i0,m202,h";//第一家
var imp_URL2:String = "http://v.admaster.com.cn/i/a2222,b200234788,c1464,i0,m202,h";//不二家

var firstFlag;//是否第一次请求,如果是,执行,否则不执行!

try {
	if (firstFlag == undefined) {
		var loader1:URLLoader = new URLLoader();
		var loader2:URLLoader = new URLLoader();
		loader1.load(new URLRequest(imp_URL1));
		loader2.load(new URLRequest(imp_URL2));
		//trace(imp_URL1);
		//trace(imp_URL2);
		firstFlag = 1;
		trace("恭喜,流量代码正常触发!");
	}
} catch (error:Error) {
	trace("流量请求失败!" + error);
}

示例

通常A网站会设计一些FLASH广告,投放到B网站,但很多时候,B网站都要求FLASH广告存在B网站上,这样A网站就很难知道FLASH就展示了多少次!B网站说多少就多少了!点击还好,必定是点到了自已的网站上,想统计还比较简单;

那么有没有办法不在B网站察觉的情况下,把百度的统计代码放在FLASH里边呢?最近试了一下,还是可以的;

FLASH里边有一个loadMovie,就是把外边的一个图片加载到FLASH中,而且统计系统就是一张图片,如果能在FLASH中调用这个图片不就可以了吗!

因为我对AS3不懂,只懂一些AS2,所以写了一段代码,可以实现这个统计:

function track(k){  
    var d = new Date();  
    var t = int(d.getTime()/1000);  
    var u = 'http://hm.baidu.com/hm.gif?cc=1&cf=&ci=&ck=1&cl=24-bit&cm=&cp=&cw=&ds=1280x1024&ep=&et=0&fl=10.0&ja=1&ln=zh-cn&lo=0<='+t+'&nv=0&rnd='+t+'&si='+k+'&st=4&su=';  
    loadMovie(u, "track");    
}  
track('803bf72233078312f4d20741bd8837ff');  

其中,’803bf72233078312f4d20741bd8837ff’是你去百度申请统计时代码中的KEY;

这样的代码,看基本的信息可以了,如IP,PV,UV;再看细了,如分辨率,浏览器等,就要自已再改一改这段代码,把这些参数传进去;因为我没有这方面的需求,就没有改;

另外一点,怎么样不让B网站发现呢?百分百不发现那是不可能的,只不过一般扔给B网站看,B网站就是打开看一眼,没有什么问题就上了;

只要你在FLASH中作如下设置,FLASH在打开时,不显示有请求出去就可以了;

1

这样试下来的效果非常好; 基本投放出去的FLASH,10分钟后就可以看到效果了;同理,也可以在FLASH的点击动作中加入如下代码,可以统计到点击;

附录

同时添加百度、cnzz、量子统计代码未例

if (firststart == undefined)
{
    var d = new Date();  
    var t = int(d.getTime()/1000);
    firststart = 1;
	
	// cnzz统计代码
	loadMovieNum("http://c.cnzz.com/wapstat.php?siteid=此处填写站点在cnzz中生成的ID&r=&rnd="+t, 10);
	
	// 量子统计代码
	loadMovieNum("http://img.tongji.linezing.com/此处填写站点在量子统计中生成的ID/tongji.gif?rnd="+t, 10);
	
	// 百度统计代码
	loadMovieNum("http://hm.baidu.com/hm.gif?si=此处赶写站点在百度统计中生成的key&et=0&nv=1&st=1<=1416822361&v=wap-0-0.2&rnd=1057290022"+t, 10);
} // end if

loadMovie 和 loadMovieNum 的区别

联想的素材,客户给的代码:

if(firststart==undefined){
	firststart=1;
	loadMovie('http://ad.doubleclick.net/ddm/trackimp/N7062.276641.PCONLINE1/B7887747.103694770;dc_trk_aid=276474892;dc_trk_cid=55957095',mp99);
}

编译无错,但上传没有流量请求。

原因:代码是设计Copy的,Flash 舞台上没有一个叫 “mp99” 的影片剪辑,因此请求无法触发,但是编译器不检查,坑爹。

测试:http://imgad0.pconline.com.cn/ivy/image/20139/30/13805280304810.swf

修正方法:

1. 改用 loadMovieNum 方法

if(firststart==undefined){
	firststart=1;
	loadMovieNum('http://ad.doubleclick.net/ddm/trackimp/N7062.276641.PCONLINE1/B7887747.103694770;dc_trk_aid=276474892;dc_trk_cid=55957095',10);
}

注意 loadMovieNum 方法的第二个参数是 10 ,表示深度,其实也可以用 8,9,随你。

测试:http://imgad0.pconline.com.cn/ivy/image/20139/30/13805280538690.swf

2. 删除客户的代码,用我们的模版添加,这个不赘述

3. 在舞台上添加一个 mp99

用矩形工具,在舞台上画一个小的矩形,注意画在画布以外的地方,这样不会遮盖本来的素材。

画好之后,右键,转为元件,选影片剪辑,确定,在属性面板里,给它取个名字:mp99

测试:http://imgad0.pconline.com.cn/ivy/image/20139/30/13805285537700.swf

参考资料:
教程:Flash广告监测培训:http://www.pconline.com.cn/www1/ads/flash/
站外FLASH广告投放统计-基于百度统计系统:http://www.zishu.cn/10/924.html

发表评论?

0 条评论。

发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据