Вот, первый пост в свежем 2015-ом году. Его я посвящу теме программирования, хотя его тут будет минимум. Перейду к делу.
Что имеем:
- Google-аккаунт (с незаблокированным доступом к AdSense);
- RAD Studio XE6 и выше (версия важна, т.к. в них разные танцы с бубном);
- проект приложения в RAD Studio.
Что хотим: слегка монетизировать это приложение после его публикации засчёт рекламы, отображающейся в нём.
Создаём рекламный блок
Итак, первым шагом необходима регистрация в сервисе AdMob: https://apps.admob.com/admob/signup. Заполняем все необходимые поля. Это и почтовый адрес, и валюта, и что-то ещё, уже не помню.
После регистрации будет предложено добавить приложение для монетизации. Должен сказать, что AdMob теснейшим образом взаимоинтегрирован с Google Play (кстати, также и с AdSense, и с Analytics, и с прочими гуглосервисами), поэтому на первом шаге будет предложено ввести имя пакета (или своё как разработчика) чтобы найти приложение в GPlay. Но не будет ничего страшного, если в гугломаркете твоего приложения ещё нет.
Я просто выбираю «Добавить новое приложение вручную» и заполняю поля:
После добавления приложения необходимо создать рекламный блок, который будет крутиться где-то в приложении:
Для текстовых объявлений я предпочитаю такой стиль: он удобен тем, что юзеру такой баннер не бросается в глаза, зато он легко может спутать его с каким-нибудь элементом на экране и ткнуть.
В конечном итоге мы получаем индентификатор нашего баннера:
Он уникален для каждого создаваемого рекламного блока. Имеет формат:
ca-app-pub-xxxxxxxxxxxxxxxx/yyyyyyyyyy
где pub-xxxxxxxxxxxxxxxx — твой идентификатор издателя (отображается в правом верхнем углу), yyyyyyyyyy — судя по всему, идентификатор непосредственно самого блока.
Сохрани где-нибудь у себя всю полученную строку, без неё ничего не выйдет.
Вставляем рекламу в приложение
Открывай свой проект приложения в RAD Studio. В нужном месте твоего интерфейса необходимо добавить компонент TBannerAd. Бросаешь его на форму, выставляешь нужное прилипание (например, классическое MostBottom, при условии, что Parent у баннера именно форма, а не какой-нибудь ListView).
Для формы создаёшь обработчик события OnShow и в нём пишешь такие строки:
BannerAd1.AdUnitID := 'ca-app-pub-xxxxxxxxxxxxxxxx/yyyyyyyyy';
BannerAd1.LoadAd;
Открываешь блокнотом файл 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"/>
Примечание: говорят, с тех пор, как была выпущена 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.
Несколько ссылок по теме:
Смотри внимательно, они алгоритмы немного различаются.