gpt4 book ai didi

actionscript-3 - 使用来自 Flash/AS3 的 Google Analytics Measurement Protocol/Universal Analytics

转载 作者:行者123 更新时间:2023-12-03 16:11:29 25 4
gpt4 key购买 nike

我看到 Google Analytics(作为他们新的 recommended Universal Analytics 解决方案的一部分)提供了一个简单的 RESTful 接口(interface),称为 Measurement Protocol。用于从各种平台或应用程序收集分析。

您如何在 Flash/AS3 应用程序中使用此界面?我正在创建一个 url 格式的有效负载 parameters according to the docs ,但我得到一个 SecurityError因为crossdomain.xml不在 http://www.google-analytics.com/crossdomain.xml 上托管发出 URL 请求时:

[SecurityErrorEvent type="securityError" bubbles=false cancelable=false eventPhase=2 text="Error #2048: Security sandbox violation: http://<mysite>/<myapp>.swf cannot load data from http://www.google-analytics.com/collect."]

使用 POST 或 GET,此调用在 Web 浏览器的上下文中失败(尽管它在 AIR 的上下文中成功):
// i.e. var payload:String = 'v=1&t=event&ec=category&ea=action'+
// '&el=label&tid=UA-xxxxxxxx-x&cid=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'

var req:URLRequest = new URLRequest('http://www.google-analytics.com/collect');
req.method = URLRequestMethod.POST;
req.data = payload;
var urlLoader:URLLoader = new URLLoader();
urlLoader.load(req);

我需要通过 AIR 或 Flash Player(在网页上)进行这些分析。

最佳答案

正如 URLRequest docs 中所述, 跨站点脚本 (xss) 限制需要 crossdomain.xml对于 POST 请求。由于 google 不托管此文件,因此您必须避免 POST。但是测量协议(protocol)文档说它将接受 GET 或 POST。所以你必须使用GET。使用上述代码的 GET 仍然会抛出,但事实证明,如果您使用 Loader 而不是 URLLoader(就好像您要访问 web 上的图像,这不是 xss 规则所涵盖的),它可以工作:

// i.e. var payload:String = 'v=1&t=event&ec=category&ea=action'+
// '&el=label&tid=UA-xxxxxxxx-x&cid=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'

var req:URLRequest = new URLRequest('http://www.google-analytics.com/collect?'+payload);
var l:Loader = new Loader();
l.contentLoaderInfo.addEventListener(Event.COMPLETE, cleanup);
l.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, cleanup);
l.contentLoaderInfo.addEventListener(SecurityErrorEvent.SECURITY_ERROR, cleanup);
l.load(req);
function cleanup(e:Event):void {
l.contentLoaderInfo.removeEventListener(Event.COMPLETE, cleanup);
l.contentLoaderInfo.removeEventListener(IOErrorEvent.IO_ERROR, cleanup);
l.contentLoaderInfo.removeEventListener(SecurityErrorEvent.SECURITY_ERROR, cleanup);
}

您希望错误监听器不会弹出错误,并且您还需要清理它们以防止内存泄漏。

但是,在移动设备上,我仍然会使用您原来的 URLLoader代码(因为它的分配/事件较少),可能使用条件编译:
// i.e. var payload:String = 'v=1&t=event&ec=category&ea=action'+
// '&el=label&tid=UA-xxxxxxxx-x&cid=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'

ENV::AIR {
var req:URLRequest = new URLRequest('http://www.google-analytics.com/collect');
req.method = URLRequestMethod.POST;
req.data = payload;
var urlLoader:URLLoader = new URLLoader();
urlLoader.load(req);
}

ENV::WEB {
var req:URLRequest = new URLRequest('http://www.google-analytics.com/collect?'+payload);
var l:Loader = new Loader();
l.contentLoaderInfo.addEventListener(Event.COMPLETE, cleanup);
l.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, cleanup);
l.contentLoaderInfo.addEventListener(SecurityErrorEvent.SECURITY_ERROR, cleanup);
l.load(req);
function cleanup(e:Event):void {
l.contentLoaderInfo.removeEventListener(Event.COMPLETE, cleanup);
l.contentLoaderInfo.removeEventListener(IOErrorEvent.IO_ERROR, cleanup);
l.contentLoaderInfo.removeEventListener(SecurityErrorEvent.SECURITY_ERROR, cleanup);
}
}

关于actionscript-3 - 使用来自 Flash/AS3 的 Google Analytics Measurement Protocol/Universal Analytics,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22158310/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com