/ Published in: ActionScript 3
ComScore previously had a BrightCove plugin which now no longer works with the updated BrightCove players. Here I used the GoogleAnalytics plugin code BrightCove provided and piggy-backed the ComScore code onto it. Using the Advertising Module API in order to allow ComScore to track both ads and video content.
Expand |
Embed | Plain Text
Copy this code and paste it in your HTML
package { import com.brightcove.api.APIModules; import com.brightcove.api.CustomModule; import com.brightcove.api.events.ExperienceEvent; import com.brightcove.api.events.MediaEvent; import com.brightcove.api.events.AdEvent; import com.brightcove.api.modules.ExperienceModule; import com.brightcove.api.modules.MenuModule; import com.brightcove.api.modules.VideoPlayerModule; import com.brightcove.api.modules.AdvertisingModule; import com.google.analytics.AnalyticsTracker; import com.google.analytics.GATracker; import flash.display.Loader; import flash.display.LoaderInfo; import flash.display.Sprite; import flash.display.Stage; import flash.events.Event; import flash.events.MouseEvent; import flash.system.Security; import flash.net.URLLoader; import flash.net.URLRequest; import flash.net.URLVariables; import flash.external.ExternalInterface; import flash.system.Security; import flash.utils.*; public class GoogleAnalytics extends CustomModule { // ---------------------------------------------------------------------------- // Constants private const ACCOUNT_ID : String = "UA-1234567-10"; // GoogleAnalytics ID private const BRIDGE_MODE : String = "AS3"; private const DEBUG_MODE : Boolean = false; // ---------------------------------------------------------------------------- // Event Names private const EVENT_PLAYER_LOAD : String = "player_load"; private const EVENT_VIDEO_START : String = "video_start"; private const EVENT_VIDEO_COMPLETED : String = "video_complete"; private const AD_START : String = "adStart"; // ---------------------------------------------------------------------------- private var _bcExperience:ExperienceModule; private var _bcAds:AdvertisingModule; private var _bcVideo:VideoPlayerModule; private var _bcStage:Stage; private var _tracker:AnalyticsTracker; // from HTML private var comScore1:String = ""; private var comScore2:String = ""; private var comScore3:String = ""; private var comScore4:String = ""; /** * Constructor. */ public function GoogleAnalytics() { Security.allowDomain("*"); } // ---------------------------------------------------------------------------- /** * Fire an event. This method has all the logic with respect to * how exactly to fire the event, as a page load or as a link * click. */ private function fireEvent(eventName:String):void { comScore1 = this._bcStage.root.loaderInfo.parameters.c1; comScore2 = this._bcStage.root.loaderInfo.parameters.c2; comScore3 = this._bcStage.root.loaderInfo.parameters.c3; comScore4 = this._bcStage.root.loaderInfo.parameters.c4; var experienceId : Number = _bcExperience.getExperienceID(); var playerName : String = _bcExperience.getPlayerName(); var action : String = ""; switch (eventName) { // Player Loads case EVENT_PLAYER_LOAD : var experienceURL:String = _bcExperience.getExperienceURL(); var referrerURL:String = _bcExperience.getReferrerURL(); action = "/playerid=" + experienceId + "/playername=" + playerName + "/url=" + experienceURL + "/refurl=" + referrerURL + "/" + eventName; break; // Video Plays case EVENT_VIDEO_START : comScoreBeacon(comScore1, comScore2, comScore3, comScore4, "02", "ShowLevelID", "SegmentID"); break; // add additional cases here if needed default : var video:Object = _bcVideo.getCurrentVideo(); var playlistId:Number = video.lineupId; var videoId:Number = video.id; var videoName:String = video.displayName; action = "/playerid=" + experienceId + "/playername=" + playerName + "/playlistid=" + playlistId + "/videoid=" + videoId + "/videoname=" + videoName + "/" + eventName; } // Google Analytics _tracker.trackPageview(action); } /** * Register for all interesting events here. */ private function registerEvents():void { _bcStage = _bcExperience.getStage(); // Create a Google tracker with reference to the Brightcove player stage and your Google Account ID _tracker = new GATracker(_bcStage,ACCOUNT_ID,BRIDGE_MODE,DEBUG_MODE); _bcAds = player.getModule(APIModules.ADVERTISING) as AdvertisingModule; _bcVideo = player.getModule(APIModules.VIDEO_PLAYER) as VideoPlayerModule; if (_bcVideo != null) { // Media EventListeners _bcVideo.addEventListener(MediaEvent.BEGIN, onMediaBegin); _bcVideo.addEventListener(MediaEvent.COMPLETE, onMediaComplete); _bcAds.addEventListener(MediaEvent.COMPLETE, onMediaComplete); // Advertising EventListeners /*_bcAds.addEventListener(AdEvent.AD_COMPLETE, onAdComplete); _bcAds.addEventListener(AdEvent.AD_PAUSE, onAdPause); _bcAds.addEventListener(AdEvent.AD_PROGRESS, onAdProgress); _bcAds.addEventListener(AdEvent.AD_RESUME, onAdResume);*/ _bcAds.addEventListener(AdEvent.AD_START, onAdStart); } // if you want to track BC menu events, get a reference to the Menu module here //_bcMenu = player.getModule(APIModules.MENU) as MenuModule; fireEvent(EVENT_PLAYER_LOAD); } // Advertisment starts private function onAdStart(event:Event):void { comScoreBeacon(comScore1, comScore2, comScore3, comScore4, "09", "ShowLevelID", "SegmentID"); _bcAds.removeEventListener(AdEvent.AD_START, onAdStart); } /** * Handler for when the player has access to the stage. * * @param event Event dispatched by ExperienceModule. */ private function onAddedToStage(event:ExperienceEvent):void { _bcExperience.removeEventListener(ExperienceEvent.ADDED_TO_STAGE, onAddedToStage); registerEvents(); } /** * Handler for when a new piece of media begins. * * @param event Event dispatched by VideoPlayerModule. */ private function onMediaBegin(event:MediaEvent):void { fireEvent(EVENT_VIDEO_START); } /** * Handler for when a piece of media completes for the first time. * * @param event Event dispatched by VideoPlayerModule. */ private function onMediaComplete(event:MediaEvent):void { fireEvent(EVENT_VIDEO_COMPLETED); } /* * The player is ready for interaction. Checks for access to stage. */ override protected function initialize():void { _bcExperience = player.getModule(APIModules.EXPERIENCE) as ExperienceModule; _bcStage = _bcExperience.getStage(); if (_bcStage == null) { _bcExperience.addEventListener(ExperienceEvent.ADDED_TO_STAGE, onAddedToStage); } else { registerEvents(); } } // comScore function private function comScoreBeacon(c1:String, c2:String, c3:String, c4:String, c5:String, c6:String, c10:String):String { var page:String = "",referrer:String = "",title:String = ""; try { page = ExternalInterface.call("function() { return document.location.href; }").toString(); referrer = ExternalInterface.call("function() { return document.referrer; }").toString(); title = ExternalInterface.call("function() { return document.title; }").toString(); if (typeof(page) == "undefined" || page == "null") { page = loaderInfo.url; } if (typeof(referrer) == "undefined" || referrer == "null") { referrer = ""; } if (typeof(title) == "undefined" || title == "null") { title = ""; } if (page != null && page.length > 512) { page = page.substr(0,512); } if (referrer.length > 512) { referrer = referrer.substr(0,512); } } catch (e:Error) { page = loaderInfo.url; trace(e); } var url:String = (new Array( page.indexOf("https:") == 0 ? "https://sb" : "http://b", ".scorecardresearch.com/p", "?c1=", c1, "&c2=", escape(c2), "&c3=", escape(c3), "&c4=", escape(c4), "&c5=", escape(c5), "&c6=", escape(c6), "&c7=", escape(page), "&c8=", escape(title), "&c9=", escape(referrer), "&c10=", escape(c10), "&rn=", Math.random(), "&cv=2.0" )).join(""); if (url.length > 2080) { url = url.substr(0,2080); } var loader:URLLoader = new URLLoader(); loader.load(new URLRequest(url)); return url; } }//Class }//package