2 декабря 2011 в 13:45

Монетизация Android-приложения с помощью рекламы от AdMob с возможностью платного отключения. Часть первая из песочницы

Всем привет! На Хабрахабре уже была статья о том, как сделать платное отключение рекламы в Android-приложении, где предлагалось использовать open-source библиотеку Android Billing Library. В данной статье я хочу рассказать о том, как реализовать подобный функционал при помощи системы внутренних платежей Android Market In-app Billing, не используя сторонних библиотек.

Статья состоит из двух частей. В первой части я подробно расскажу о том, как добавить рекламу от Google AdMob в свое приложение (данная часть в основном ориентирована на новичков), а во второй – как сделать ее платное отключение.

Для начала создадим проект простейшего приложения Android в среде Eclipse. О том, как это делается писать не буду (можете почитать об этом, например, здесь).

Установка необходимых компонентов


Для работы с AdMob нам необходимо установить Google AdMob Ads SDK, а также SDK для платформы Android версии 3.2 или выше (см. здесь). Также установим пакет Google Market Billing (о нем речь пойдет во второй части статьи).

Откройте «Android SDK Manager» с помощью команды главного меню Window > Android SDK Manager.



Выберите необходимые пакеты для установки и нажмите кнопку «Install packages…».



После установки пакетов подключим AdMob Ads SDK к проекту. Для этого:
  • Нажмите правой кнопкой мыши по проекту в «Project Explorer» и выберите «Properties» (свойства проекта).
  • В левой части окна выберите пункт «Java Build Path».
  • Нажмите кнопку «Add External JARs…».
  • Выберите файл GoogleAdMobAdsSdk-4.3.1.jar, который находится в папке "%ANDROID%\extras\google\admob_ads_sdk\".


В результате, файл GoogleAdMobAdsSdk-4.3.1.jar должен отобразиться в структуре проекта.



Настройка конфигурации приложения


Далее открываем файл конфигурации приложения AndroidManifest.xml и вносим следующие правки:
  • Опционально можете добавить параметр android:installLocation=«preferExternal» в теге manifest. Использование этого параметра позволяет установить приложение на карту памяти.
  • В теге uses-sdk добавляем параметр android:targetSdkVersion=«13». Версия 13 соответствует SDK для платформы Android версии 3.2. Если вы устанавливали SDK более поздней версии, то вставьте соответствующий номер версии.
  • Далее нужно добавить разрешения ACCESS_NETWORK_STATE и INTERNET.
  • И на последок, добавьте тег activity с параметрами android:configChanges=«keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize» и android:name=«com.google.ads.AdActivity» в теле тега application.
Ниже представлено содержание файла AndroidManifest.xml.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    android:installLocation="preferExternal"
    package="com.sample.billing"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="13" />

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

    <application
        android:debuggable="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:label="@string/app_name"
            android:name=".BillingSampleActivity" >
            <intent-filter >
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity            android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"
            android:name="com.google.ads.AdActivity" />
    </application>

</manifest>

Теперь нам нужно снова вызвать свойства проекта. В левой части окна выберите пункт «Android». Затем в правой части выберите Android 3.2 на панели «Project Build Target». Если вы устанавливали SDK для Android более поздней версии, то выберите ее.



Получение AdMob Publisher ID


Далее, заходим на сайт www.admob.com (можете использовать для авторизации свой Google-аккаунт). Здесь нам нужно получить «Publisher ID» для привязки рекламы к нашему приложению. Заходим в раздел «Sites & Apps» и выбираем «Android App».


После ввода необходимых полей наше приложение должно появиться в списке «Sites & Apps». Теперь наводим курсор на название приложения и нажимаем появившуюся кнопку «Manage Settings».



После чего мы попадаем на страницу, на которой указан «Publisher ID» для нашего приложения. Скопируйте его, он нам пригодится далее.



Добавление рекламного баннера в приложение


Снова возвращаемся в проект. Откройте файл res/values/strings.xml и создайте следующее строковое значение:
<string name="admob_publisher_id">скопированный ранее Publisher ID</string>



Теперь откройте файл res/layout/main.xml.



Внесем в файл следующие изменения:
  • Добавьте в корневой тег LinearLayout параметр xmlns:ads=«schemas.android.com/apk/lib/com.google.ads»
  • Добавьте еще один LinearLayout и переместите в него TextView.
  • Добавьте в новый LinearLayout параметр android:layout_weight=«1». Это нужно, чтобы он не перекрывал рекламный баннер.
  • Добавьте компонент com.google.ads.AdView:
    <com.google.ads.AdView
    	 android:id="@+id/adView"
    	        android:layout_width="wrap_content"
    	        android:layout_height="wrap_content"
    	        ads:adSize="BANNER"
    	        ads:adUnitId="@string/admob_publisher_id"
    	        ads:loadAdOnCreate="true" />
Ниже показано содержимое файла main.xml.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <LinearLayout
        android:id="@+id/linearLayout1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:orientation="vertical" >

        <TextView
            android:layout_width="fill_parent"
            android:layout_height="match_parent"
            android:text="@string/hello" />
    </LinearLayout>

    <com.google.ads.AdView
        android:id="@+id/adView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        ads:adSize="BANNER"
        ads:adUnitId="@string/admob_publisher_id"
        ads:loadAdOnCreate="true" />
</LinearLayout>

В режиме «Graphic Layout» разметка выглядит следующим образом:



Теперь подключаем свое устройство (или эмулятор) и нажимаем Run. Смотрим, что получилось.



Заключение


В результате проделанных действий мы добавили рекламу AdMob в свое приложение. Как видно, сделать это довольно не сложно.
Следующим этапом будет разработка функционала для платного отключения рекламы при помощи Android MArket In-app Billing, о чем я расскажу в следующей части статьи.

Исходники разработанного приложения можно скачать здесь.

Спасибо за внимание. Надеюсь, что кому-то материал будет полезен. Буду рад вашим комментариям.

Использованные источники

  1. Google AdMob Ads Android Fundamentals
  2. Hello, World | Android Developers
  3. Stack Overflow
To be continued…
+50
36609
378
50bit 6,5

комментарии (30)

+1
irafa, #
Хорошая статья для новичков, всё чётко по пунктам и наглядно. Очень жду вторую часть т.к. именно её все реализуют по разному и там куча вопросов.
0
maloii, #
Вопрос немного не в тему. Как Вам AdMob, какой CTR? Пользуюсь mobclix, ~150000 показов в сутки, а доходы копеечные. CTR 0.04%. Скорей всего из за преобладающей русской аудитории.
+1
50bit, #
Ниже 0.7% за последний месяц не опускался, в среднем около 0.9%. Приложение тоже русскоязычное.
0
RankoR, #
А можете привести краткую статистику — сколько установок, активных установок, сколько примерно доход идет? Просто из интереса.
+2
50bit, #
~95 000 установок, 61000 активных, доход от AdMob в среднем 3,5$ в сутки
0
blinsky, #
и сколько покупок «отключения рекламы» в сутки в среднем?
0
50bit, #
По-разному, бывает 5-10, а бывает вообще ничего. Больше всего покупок происходит в первые несколько дней после выпуска обновления приложения. Ну и конечно, тут еще все зависит от цены, которую вы установите.
0
stepanp, #
А по опыту, можете сказать какую цену лучше ставить?
0
50bit, #
Однозначно сказать не могу. Но мне кажется, цену нужно устанавливать не слишком высокую, но и не слишком низкую. Я пробовал установить сначала 0,99$, а потом установил 1,99$. В результате, к моему удивлению, количество покупок осталось почти на том же уровне. Не знаю правда, как это будет работать на большей аудитории пользователей.
0
b3er, #
CTR 0.30%~0.40%, 2кк показов в сутки, установок ~10kk, активных 1кк, ~200$ в сутки.
+3
Colobock, #
Как-то можно ограничить рекламу, показываемую в приложении?
Конкретно, AdMob уже задолбали меня кормить «Обновлениями Opera Mini''.
0
iamx, #
Есть программы под андроид блокирующие эдмоб и прочие баннеры, но нужен рут.
0
Colobock, #
Я не знаю, как это отразится на доходах разработчиков приложений. Не хотелось бы оставлять их лишний раз без кусочка хлеба.
Права root есть, приложение мне тоже известно. Не настолько мне эта реклама и мешает, просто пользователей жалко — не все же распознают надувательство. Надо как-то блокировать конкретные объявления прямо на уровне рекламной площадки, но как — неизвестно. Абузу им писать?
0
iamx, #
Пользователей, которые хотят убрать баннеры не так и много, многие понимают что это их благодарность разработчику бесплатного приложения. Программы для блокированния баннеров не популярны, так что можно с чистой совестью ставить если хотите.
Насколько я знаю достучаться до гугл либо еще куда — достаточно сложно. Бороться можно на своем, локальном уровне и пропагандой)
0
Grigorieff, #
.Тостер продолжается? Сегодня касались этой тему на тостере.
0
maep, #
Жду втрой части! Эта заметка действительно для новичков, причем довольно ленивых, если сами не разобрались. А вот платное отключение — любопытная тема
0
pilgr, #
Интересно также зачем еще нужен Google Market Billing Package. У меня работает in-app purchase без этой балалайки.
–1
LbICbIY, #
Долгожданной второй части пока не планируется?
0
50bit, #
Планируется. Буду стараться доделать как можно скорее.
0
danpetruk, #
прошло больше года…
0
Suvitruf, #
Если ещё актуально, могу написать про платное отключение рекламы в своём приложении.
0
Dementor, #
Напишите. Будет интересно увидеть вашу конкретную реализацию и итоговые цифры.
0
Suvitruf, #
Я либо делаю вообще бесплатное приложение с ненавязчивой рекламой, либо две версии: платную без рекламы и бесплатную с рекламой.

Статью напишу на след. неделе, но цифр не будет, так как подобный функционал в своих приложениях не вижу смысла реализовывать =/
0
Dementor, #
Хозяин — барин. Но цифры прибыли все же интересны, хотя бы их порядок. Что выгоднее — платные программы или бесплатные с рекламой?

И почему вам не нравится идея отключения ненавязчивой рекламы? Или вам не нравится сама идея внутренних покупок?
0
Suvitruf, #
И почему вам не нравится идея отключения ненавязчивой рекламы? Или вам не нравится сама идея внутренних покупок?

Я за In-app, если к ним не принуждают

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

В наших играх In-app необязательны, они лишь слегка упрощают процесс игры.
Что выгоднее — платные программы или бесплатные с рекламой?
На примере последней нашей игры мы увидели, что платная версия принесла больше прибыли, чем его бесплатная версия с 500к закачек.
0
Dementor, #
Спасибо за информацию из первых рук. Всегда подозревал, что взять деньги один раз но сразу намного выгоднее, чем ждать месяцами рекламных доходов. К тому же, лично я никогда на баннеры в телефоне не нажимал…
0
Suvitruf, #
Спасибо за информацию из первых рук. Всегда подозревал, что взять деньги один раз но сразу намного выгоднее, чем ждать месяцами рекламных доходов. К тому же, лично я никогда на баннеры в телефоне не нажимал…

Не знаю, на знаю.

Топовые игры — бесплатны. Они выезжают за счёт грабительских In-app'ов.
0
Yan_Alex, #
Ответьте, если не трудно, ищю маны как сделать тоже самое, но я разрабатываю приложение на html5 под PhoneGap, у меня нет ни эклипса ни сдк, компилирую под андройд через ФонГап
0
Andrey_bismak, #
Для долго спящих можно повторить исходники? Ссылка более не доступна :-(
0
Suvitruf, #
habrahabr.ru/post/203368/
Написал, так сказать, вторую часть.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.