2014-03-03 3 views
1

새로운 애널리틱스 (recommended 유니버설 애널리틱스 솔루션의 일부로 제공됨)는 다양한 플랫폼 또는 애플리케이션의 애널리틱스 수집을 위해 Measurement Protocol이라는 간단한 RESTful 인터페이스를 제공합니다 .플래시/AS3의 Google 애널리틱스 측정 프로토콜/유니버설 애널리틱스 사용하기

Flash/AS3 앱에서이 인터페이스를 어떻게 사용합니까? 내가 URL 형식 parameters according to the docs을의 페이로드를 만드는거야,하지만 URL 요청을 할 때 내가 http://www.google-analytics.com/crossdomain.xml에서 SecurityErrorcrossdomain.xml 때문에 호스팅되지 받고 있어요 : 하나 POST를 사용 또는 GET

[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."] 

을,이 호출은 실패 웹 브라우저의 컨텍스트 (는 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 또는 (웹 페이지) 플래시 플레이어 중 하나에서 작동하는 이러한 분석이 필요합니다.

답변

1

URLRequest docs에서 언급했듯이 XS (cross-site scripting) 제한 사항에는 POST 요청에 crossdomain.xml이 필요합니다. Google은이 파일을 호스팅하지 않으므로 POST를 피하십시오. 그러나 측정 프로토콜 doc은 GET 또는 POST 중 하나를 수락 할 것이라고 말합니다. 따라서 GET을 사용해야합니다. 위의 코드로 GET하면 여전히 문제가 발생하지만 URLLoader 대신 Loader를 사용하면 (웹에서 이미지에 액세스하려고 할 때 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); 
    } 
} 
+0

의 작품, URLStream'는 크로스 도메인'를 부르지 GET'과 같은 문제가'하지' URLLoader'는 무엇을합니까? 나는 한번도 테스트 해 본 적이 없습니다. 그들은 둘 다'URLRequest'를 사용하지만, 요청하는 실제 메커니즘은 완전히 분리되어 있습니다. –

+0

'URLStream'을 한번도 사용하지는 않았지만 [doc] (http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/URLStream)을 보았습니다.html) 상태 : URLStream 클래스로 URL 다운로드에 적용되는 보안 규칙은 URLLoader 객체에 적용되는 규칙과 동일합니다. 정책 파일은 필요에 따라 다운로드 할 수 있습니다. _ –

+0

젠장. 그 쪽지를 보지 못했습니다. 그것은 불행한 일입니다 –

0

제프 좋은 답변을 가지고,하지만 당신은 향상시킬 수 있습니다 그것은 POST 방법을 활용하여, GET이 아니라 GET이 상당히 제한되어 있고 많은 양의 데이터를 보내지 않기 때문에.

var req:URLRequest = new URLRequest(url); 
req.method = URLRequestMethod.POST; 
req.data = payload; 
var l:Loader = new Loader(); 
l.load(req); 

공지 사항 POST 요청 방법, 그것은 트릭

1

할 것이다 또는 당신은 라이브러리
구글 범용 웹 로그 분석을 사용할 수 있습니다

체크 아웃 AS3 보편적-분석 v0.8

액션 스크립트 3.0

https://github.com/zwetan/as3-universal-analytics/releases/tag/0.8

전체 지원 : Flash Player, AIR, Redtamarin
그냥 사방 또는 거의 모든 곳에서 :)

귀하의 경우 호기심에서

var config:Configuration = new Configuration(); 
    config.forcePOST = true; 
var tracker:WebTracker = new WebTracker("UA-12345-67", config); 
    tracker.pageview("/hello/world", "Hello World"); 
+0

쿨, 고마워요! 다음 번에 내가 필요할 때를 들여다 볼 것입니다. :) –