
Моя динамическая реклама
3
Вдохновившись предыдущим топиком, решил поделиться своей реализацией динамической рекламы. Во всех своих играх я использую рекламу CPMStar в прелоадере и всегда оставляю себе возможность в будущем вставить туда рекламу своих проектов или другую рекламную сеть, если эта вдруг закроется.
Суть работы элементарна. Берём стандартный файл AdLoader.as который по факту просто грузит SWF с рекламой CPMStar и добавляет его в нашу флешку и слегка корректируем. Сначала стучимся к себе на сайт в поисках SWF с нашей рекламой и только если его нет стучимся к CPMStar и берём их рекламу.
Код под катом:
Не забудьте вставить свой код CPMStar вместо XXXXXXXXXXXXX, и планируемый адрес до своей SWF. Для каждой игры лучше использовать свой адрес типа «domain.com/game1_ad.swf», чтобы в будущем иметь возможность подставлять рекламу по отдельности.
Рекламную SWF надо делать размером 300x250, с ссылкой по клику на stage, можно даже с анимацией.
Суть работы элементарна. Берём стандартный файл 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
- fedos
Комментарии (5)
Константы не вынесены.
Про последнюю фразу — runtime ошибку выдаст — загруженная с одного домена флешка не имеет доступа к stage родительской, загруженной с другого домена, флешки. Если только явно не указан allowDomain в загружаемой флешке.
За подсказку про константы спасибо — не заметил без монокля ;)
какой это «свой»? Stage один)
Ну значит вешаем ссылку на бек просто :)