Моя динамическая реклама

3
Вдохновившись предыдущим топиком, решил поделиться своей реализацией динамической рекламы. Во всех своих играх я использую рекламу CPMStar в прелоадере и всегда оставляю себе возможность в будущем вставить туда рекламу своих проектов или другую рекламную сеть, если эта вдруг закроется.

Суть работы элементарна. Берём стандартный файл AdLoader.as который по факту просто грузит SWF с рекламой CPMStar и добавляет его в нашу флешку и слегка корректируем. Сначала стучимся к себе на сайт в поисках SWF с нашей рекламой и только если его нет стучимся к CPMStar и берём их рекламу.

Код под катом:


package
{
	import flash.display.*;
	import flash.events.*;
	import flash.net.*;
	import flash.system.*;
	
	public class AdLoader extends flash.display.Sprite 
	{
		private var customLoader:Loader;
		
		public function AdLoader() 
		{
			if (stage) init();
    		        else addEventListener(Event.ADDED, init, false, 0, true);
		}
		
		private function init(event:Event = null):void
		{
			removeEventListener(Event.ADDED, init);			
			
			Security.allowDomain("domain.com");
			
			customLoader = new Loader();
			customLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, customAd, false, 0, true);
			customLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, cpmstarAd, false, 0, true);
			customLoader.load(new URLRequest("http://domain.com/ad.swf"));
		}
		
		private function customAd(event:Event):void
		{
			removeEventListeners();
			addChild(customLoader);
		}
		
		private function cpmstarAd(event:Event):void
		{
			removeEventListeners();
			
			Security.allowDomain("server.cpmstar.com");
			Security.allowDomain("cdn3.cpmstar.com");
			
			var cpmstarLoader:Loader = new Loader();
			cpmstarLoader.contentLoaderInfo.addEventListener(Event.INIT, dispatchHandler);
			cpmstarLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, dispatchHandler);
			cpmstarLoader.load(new URLRequest("http://server.cpmstar.com/adviewas3.swf?contentspotid=XXXXXXXXXXXXX"));
			addChild(cpmstarLoader);
		}

                private function removeEventListeners():void
                {
                        customLoader.contentLoaderInfo.removeEventListener(Event.COMPLETE, customAd);
		        customLoader.contentLoaderInfo.removeEventListener(IOErrorEvent.IO_ERROR, cpmstarAd);   
                }
		
		private function dispatchHandler(event:Event):void
		{
			dispatchEvent(event);
		}
	}
}


Не забудьте вставить свой код CPMStar вместо XXXXXXXXXXXXX, и планируемый адрес до своей SWF. Для каждой игры лучше использовать свой адрес типа «domain.com/game1_ad.swf», чтобы в будущем иметь возможность подставлять рекламу по отдельности.

Рекламную SWF надо делать размером 300x250, с ссылкой по клику на stage, можно даже с анимацией.
  • +9

Комментарии (5)

0
Как-то не очень имхо…
Константы не вынесены.

Про последнюю фразу — runtime ошибку выдаст — загруженная с одного домена флешка не имеет доступа к stage родительской, загруженной с другого домена, флешки. Если только явно не указан allowDomain в загружаемой флешке.
0
Ссылаться на родительский stage, как ты правильно подметил, конечно же не стоит — вполне хватит и своего.
За подсказку про константы спасибо — не заметил без монокля ;)
0
О_о
какой это «свой»? Stage один)
0
Проверил — действительно. В динамически загруженном swf ссылка stage будет stage'ем родительской swf. Проверил локально, в сети не проверял, но там наверное действительно будет ошибка.

Ну значит вешаем ссылку на бек просто :)
0
спасибо, беру, пригодится
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.