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 (пример)
    Смотри внимательно, они алгоритмы немного различаются.

    Коллекция Android-приложений, написанных на RAD Studio

    Блогер +Andrey Yefimov интересуется разработкой Android-приложений с использованием Delphi. Этому он посвятил целый блог: delphifmandroid.blogspot.ru. Я слежу за многими блогами делфи-тематики, в том числе и его, через DelphiFeeds, заходил конкретно в его блог редко, но только сейчас добавил в закладки и отдельно подписался на RSS.

    Внимание к его блогу в этот раз привлекла запись из DelphiFeeds под заголовком
    «Собираем базу Android приложений разработанных с использованием RAD Studio». Оказывается, он открыл отдельную страницу, где перечисляются все… хотя нет, пока не все… Android-приложения, написанные в RADS.

    На самом деле, я был удивлён содержимым. Никогда не догадывался, что кто-то, что называется, на полном серьёзе использует RADS для разработки приложений, да ещё и выкладывает в Googe play. Есть даже платные. За качество я ничего сказать не могу, но судя лишь по скриншотам, многим удалось сделать действительно стоящие продукты.
    Каталог представляет собой одну страницу, которая растягивается под натиском большой таблицы с ссылками на приложения в GPlay. В ней содержится основная информация о приложениях: цена, разработчик, категория в маркете, оценки и пр. Всё это парсится автоматически, стоит лишь в верхней строке указать имя пакета.
    Автор хочет вскоре добавить постраничную навигацию, сгруппировать приложения по авторам, категориям и пр. и переживает, что сайт не будет пользоваться успехом. Думаю, успех придёт довольно быстро, если не переставать работать над сайтом. Ведь идея-то проста и гениальна! И за это отдельный респект.

    Андрей, если ты читаешь этот пост, я бы хотел обратить внимание на один немаловажный момент. Скорее, даже предложить как развить из этой идеи нечто более интересное пользователям.

    Далеко не все разработчики (вероятно, большая часть из них всё же новички в таком направлении) имеют возможность публиковать свои разработки в маркете, а может не делают этого намеренно. Было бы не плохо сделать из этого сайта нечто большее, чем просто набор ссылок на маркет. Однако наверняка многие из них хотели бы иметь возможность публиковать свои программы в таком специфическом месте, как у тебя. Оставить набор ссылок на маркет и добавление новых как есть, но добавить в качестве отдельного раздела сайта репозиторий. С готовыми приложениями и, возможно, с их исходниками (это пусть определяют сами разработчики), описанием (включая зависимости проекта, версия IDE  и т.д.) и скриншотами.

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

    Надеюсь, донёс мысль… В любом случае, желаю успехов проекту.