RAD Studio XE6: Размещение рекламы Admob в Android-приложении

Вот, первый пост в свежем 2015-ом году. Его я посвящу теме программирования, хотя его тут будет минимум. Перейду к делу.

Что имеем:
• Google-аккаунт (с незаблокированным доступом к AdSense!!);
• RAD Studio XE6 и выше (версия важна, т.к. в них разные танцы с бубном);
•готовое (или почти готовое) приложение, написанное в RAD Studio.

    Что хотим: слегка монетизировать это приложение после его публикации засчёт рекламы, отображающейся в нём.

    1. Создаём рекламный блок

    Шаг 1.1
    Итак, первым шагом необходима регистрация в сервисе AdMob: https://apps.admob.com/admob/signup. Заполняем все необходимые поля. Это и почтовый адрес, и валюта, и что-то ещё, уже не помню.

    После регистрации будет предложено добавить приложение для монетизации. Должен сказать, что AdMob теснейшим образом взаимоинтегрирован с Google Play (кстати, также и с AdSense, и с Analytics, и с прочими гуглосервисами), поэтому на первом шаге будет предложено ввести имя пакета (или своё как разработчика) чтобы найти приложение в GPlay. Но не будет ничего страшного, если в гугломаркете твоего приложения ещё нет.

    Я просто выбираю «Добавить новое приложение вручную» и заполняю поля:

    Шаг 1.2
    После добавления приложения необходимо создать рекламный блок, который будет крутиться где-то в приложении:

    Для текстовых объявлений я предпочитаю такой стиль: он удобен тем, что юзеру такой баннер не бросается в глаза, зато он легко может спутать его с каким-нибудь элементом на экране и ткнуть.

    В конечном итоге мы получаем индентификатор нашего баннера:

    Он уникален для каждого создаваемого рекламного блока. Имеет формат:


    ca-app-pub-xxxxxxxxxxxxxxxx/yyyyyyyyyy

    где pub-xxxxxxxxxxxxxxxx — твой идентификатор издателя (отображается в правом верхнем углу), yyyyyyyyyy — судя по всему, идентификатор непосредственно самого блока.

    Шаг 1.3
    Сохрани где-нибудь у себя всю полученную строку, без неё ничего не выйдет.



    2. Вставляем рекламу в приложение

    Шаг 2.1

    Открывай свой проект приложения в RAD Studio. В нужном месте твоего интерфейса необходимо добавить компонент TBannerAd. Бросаешь его на форму, выставляешь нужное прилипание (например, классическое MostBottom, при условии, что Parent у баннера именно форма, а не какой-нибудь ListView).

    Для формы создаёшь обработчик события OnShow и в нём пишешь такие строки:

    BannerAd1.AdUnitID := ‘ca-app-pub-xxxxxxxxxxxxxxxx/yyyyyyyyy’;
    BannerAd1.LoadAd;

    Шаг 2.2
    Открываешь блокнотом файл AndroidManifest.template.xml, в него вставляешь строки:
    • перед < activity … >
    meta-data android:name=»com.google.android.gms.version» android:value=»4323000″ /
    • после < / activity >
    activity android:name=»com.google.ads.AdActivity» android:configChanges=»keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize»/

    Примечание 1: здесь из-за глюков местного редактора я убрал в начале и конце этих строк угловые скобки < и >. Визуальный редактор по умолчанию Blogger не умеет корректно отображать какие бы то не были теги, он их обязательно интерпретирует. Т.о. они исчезают из текста и принимают вид части исходного кода страницы.
    Поэтому тебе надо поставить эти скобоки самому: < в начале строки и > в конце. Ничего страшного, всего четыре символа.

    Примечание 2: говорят, с тех пор, как была выпущена XE6, изменился механизм показа рекламы. Толи в Android, толи в AdMob. Поэтому, если ты столкнулся с проблемами, то советую изучить этот вопрос самостоятельно: http://fire-monkey.ru/topic/547-novyi-admob-v-delphi-xe6-prilozhenii. Автор там сам разобрался и говорит, что возможные проблемы должен помочь решить вот этот патч.

    У компонента TBannerAd есть свойство TestMode (boolean).
    Если оно = true, то будет отображаться тестовый блок, а не реклама. Например, так:

    При этом в AdMob не будут считаться показы рекламы, ведь фактически она и не показывается.

    Это делается для того, чтобы протестировать правильность настройки проекта. Когда там будет отображаться настоящая реклама, а ты на неё ткнёшь, то рано или поздно может произойти блокировка доступа ко всему AdSense (а значит и AdMob) для твоего гуглоаккаунта. Поверь, в этом мало приятного.

    Если TestMode не установить в true, тогда в панели управления AdMob счётчики показа будут увеличиваться. Вот так выглядела моя ПУ после тестов моего приложения:

    Посмотри на данные. Не надо так делать. Это, во-первых, нечестно (один тап по рекламе я совершил для проверки того, а второй чисто случайно), а во-вторых, после дистрибуции приложения эти данные не сразу скорректируются с реальностью на чужих устройствах.

    Всё? В принципе, реклама уже добавлена в приложение и всё, казалось бы, прекрасно. Но не сразу: я долго изучал вопрос почему реклама не отображается, хотя было всё сделано как надо. Не найдя решения, даже опустил руки и плюнул.

    Потом просто запустил приложение в очередной раз и реклама таки появилась! Я не сразу понял это, но причина проста: когда создаёшь рекламный блок в панели управления AdSense и потом вставляешь код объявления в нужное место сайта, то реклама там отображается далеко не сразу, а это место чем-то замещается. Проходит какое-то время (от минут до часов) и всё встаёт на свои места. Здесь ситуация аналогичная. Настоящая реклама по началу долго идёт до твоего рекламного места.

    Так что не следует суетиться из-за «нерабочей» рекламы сразу после её создания — возможно, твоё рекламное место ещё не «активировалось». Лучше включи TestMode.

    Несколько ссылок по теме:
    Алгоритм встраивания рекламы в XE6 (пример)
    Алгоритм встраивания рекламы в XE7 (пример)
    Смотри внимательно, они алгоритмы немного различаются.