пятница, 19 октября 2012 г.

Нестандартное внедрение рекламы Admob


Многие пытаются получить доход от бесплатных приложений, для этого обычно используется реклама. Стандартные способы внедрения рекламных блоков неплохо описаны на самом сайте admob, но иногда стандартными способами рекламу нельзя внедрить.
Известны как минимум два проблемных варианта показа рекламы:
1.      Вы пишите приложение (игру), используя SurfaceView.
2.      Вы пытаетесь добавить рекламу в окно, которое имеет стиль Dialog.

Решение первой проблемы

Обычно внедрение рекламы происходит: либо через добавление баннера в xml файле описания активити, либо через динамическое создание класса и добавление его на слой.
Но у нас нет layout, чтобы у него вызвать метод addView и добавить баннер, есть только наследник SurfaceView, как же быть?


А всё очень просто, воспользуемся динамическим созданием класса рекламы… и как обычно добавим её на layout методом addView. Для этого нам необходимо создать объект класса RelativeLayout, потом на него добавить объект производный от SurfaceView, а потом и саму рекламу, и всё будет прекрасно работать.

//Создаем слой куда поместим слой отрисовки и рекламу
RelativeLayout mainLayout = new RelativeLayout(this);
//Создаем объект SurfaceView
GameLayer = new DrawScreen(this);
//Создаем рекламу
adView = new AdView(context, AdSize.BANNER, "555555555555");
adView.loadAd(new AdRequest());
//затем добавляем созданные слои
mainLayout.addView(GameLayer);
mainLayout.addView(adView);

Если у вас только одно окно, а в программе или игре надо прятать иногда рекламу, то это можно сделать простой сменой порядка слоев. Например вызывав этот метод
mainLayout.bringChildToFront(GameLayer), при этом не забудьте сказать слою, что необходимо перерисовать своё состояние postInvalidate().


Решение второй проблемы

Вы добавили рекламу в диалоговое окно, но рекламы не видно. Делаете окно обычным не диалоговым и реклама опять видна. Как же с этим боротся?
Проблема исчезновения рекламы связана с тем, что баннер должен рисоваться определенной ширины, при этом диалоговые окна обычно уже обычных окон, из-за того что ширина недостаточна, реклама и не выводится.
Эту проблему можно решить двумя способами:
Способ 1:
Принудительно выставляете ширину у баннера layout_width="320dip". И вот она реклама, но в таком случае не забывайте, что рекламу на некоторых экранах будет срезать по бокам.
Способ 2:
Или при создании указываете другой тип баннера. По умолчанию у всех в конструкторе установлено AdSize.BANNER или в xml описании стоит adSize="BANNER".
Его можно изменить на AdSize.IAB_MRECT. В этом случае небольшая полоска с рекламой сменится на большой прямоугольник с рекламой, который без проблем влезет в диалоговое окно и будет там отображаться. Но при этом не забывайте, что такой баннер по высоте больше обычного, и не всем понравится такая большая реклама.


Комментариев нет:

Отправить комментарий