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

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
спасибо, беру, пригодится
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.