Дек
24

AndEngine. Размещение рекламы в игре

logo_100

Решение подсмотрено на форуме AndEngine.

Смысл в том, что реклама размещается в отдельном View поверх всей игры. Тут много не скажешь, просто копируйте код и вставляйте в игру. Делается это в главном Activity игры, который расширяет BaseGameActivity.

Вот пример для рекламы от MobClix:

...
private MobclixAdView _MobclixAdView;

@Override
protected void onSetContentView() {
	final FrameLayout frameLayout = new FrameLayout(this);
	final FrameLayout.LayoutParams frameLayoutLayoutParams =
		new FrameLayout.LayoutParams(FrameLayout.LayoutParams.FILL_PARENT,
			FrameLayout.LayoutParams.FILL_PARENT);

	mRenderSurfaceView = new RenderSurfaceView(this);
	mRenderSurfaceView.setRenderer(mEngine);

	final android.widget.FrameLayout.LayoutParams surfaceViewLayoutParams =
		new FrameLayout.LayoutParams(super.createSurfaceViewLayoutParams());

	final FrameLayout.LayoutParams adViewLayoutParams =
		new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT,
			FrameLayout.LayoutParams.WRAP_CONTENT,
			Gravity.CENTER_HORIZONTAL|Gravity.TOP); //здесь указываем положение рекламного блока

	_MobclixAdView = new MobclixMMABannerXLAdView(this);

	frameLayout.addView(this.mRenderSurfaceView, surfaceViewLayoutParams);
	frameLayout.addView(_MobclixAdView, adViewLayoutParams);
	this.setContentView(frameLayout, frameLayoutLayoutParams);
}

Если хотите спрятать рекламу, то вызывайте:

this.runOnUiThread(new Runnable() {
        @Override
        public void run() {
        	_MobclixAdView.setVisibility(View.INVISIBLE);
        }
});

Если хотите показать, то:

this.runOnUiThread(new Runnable() {
        @Override
        public void run() {
        	_MobclixAdView.setVisibility(View.VISIBLE);
        }
});

Если вы используете Прелоадер, то в методе onSetContentView нужно отключить показ рекламы, иначе реклама будет сразу же видна. Мне кажется, это испортит впечатление от игры.

Как только игра загрузится, рекламу можно включить (показать).

P.S. Один из стандартных размеров рекламного блока — 320×50. Это указывается на сайте рекламного агента.

Однако в реальности на моём экране в 480×800 этот рекламный блок превращается в блок размером 450×70 или 480×70. Так что при дизайне игрового поля имейте это в виду.




9 коммент. к записи “AndEngine. Размещение рекламы в игре”

  • Хм, а можно сделать «разрушаемую» рекламу? Скажем, чтобы от выстрелов в ней появлялись дырки.

    Или можно ли более полно управлять положением блока? Анимированно показывать, скрывать за край. Скажем, реклама «боится» стрельбы и прячется при попадании в нее...

    • Скорее нет, чем да. Поверх рекламы уже ничего вывести нельзя — вся игра и графика находится под ней

  • Ты собираешь проект с Mobclix под третий андроид? У них в документации сказано, что он заточен под третью версию. И в демо проекте в свойствах указано Adndoid 3.x.x, хотя нормально запускается на эмуляторе в котором 2.2.

    И ещё, не подскажешь по поводу следующей проблемы: их демо нормально работает (показывает тестовый блок рекламы), но стоит мне изменить в манифесте строку «insert-your-application-key» на ту, что присвоили мне в Mobclix'е, реклама не отображается, а потом (если покликать) activity зависает (появляется сообщение «... is not responding»). Отписал в их support, но они отмалчиваются.

    • Нет, под 2.2 собирал. Нормально работает. А ты включил тестовый режим для своего блока?

      • Да, включил все блоки (все размеры) и для всех указал тестовый режим ON.

        Единственное, что у меня не по человечески, это то, что в свойствах application в веб-интерфейсе mobclix'a неверно указана ссылка на приложение в маркете (я его выложил, но ещё не опубликовал, поэтому указал в этом поле ерунду).

        • Хм, странно. Не знаю тогда в чём дело 🙁

          • Похоже у них настройки не сразу применяются. Забил на время на рекламу, а к вечеру обнаружил, что зависания прекратились (стали показываться тестовые блоки).

            Выставил в настройках мобкликса тестовый режим в OFF, через какое-то время снова стало зависать (в эмуляторе).

            А сегодня обнаружил, что в виртуальной машине (скачал образ с www.android-x86.org, он пошустрее эмулятора работает) не виснет, при этом реклама нормально отображается.

  • Код работает. Если заменить MobclixMMABannerXLAdView на большой_квадратный_баннер, тоже работает. Но если пытаюсь создать сразу два баннера, появляется только один с текстом, что произошла ошибка.

    Даже если просто создать ещё один баннер (не добавляя его во фрейм), первый будет выводить ошибку.

    И ещё. При старте сцены запускаю анимации (MoveModifier) для пунктов меню чтобы они вылетали. Если убрать весь этот

    @Override

    protected void onSetContentView ()

    ...

    То всё ок, но с ним происходит лаг и пункты не вылетают, а сразу оказываются где должны быть, и в течение нескольких секунд сцена не реагирует на нажатия (либо плохо реагирует).

    Пробовал делать _ad.pause (), не помогло.

    Также пытался вынести весь этот код в отдельный Thread (Runnable ()), но прога начинает валиться по ошибке при любом нажатии.

    • Сделать так, чтобы работали два баннера, не получилось.

      По поводу лага, сам себе посоветую: использоваться заставку при старте игры.

Прокомментировать



ЗАДАЙ СВОЙ ВОПРОС