Вы написали приложение на Kotlin, и теперь хотите на нём зарабатывать. Самый популярный путь — добавить рекламу через Google AdMob. Но когда вы впервые открываете документацию, легко запутаться в терминах, идентификаторах и форматах. В этой статье я простым языком объясню, как выполняется добавление рекламы в приложение сделанное на kotlin — от регистрации в AdMob до показа первого баннера. Никакой воды, только рабочие шаги.
Что такое AdMob и почему именно он
AdMob — это платформа от Google, которая связывает рекламодателей и разработчиков приложений. Вы выделяете место в своём приложении, Google показывает там рекламу, а вы получаете деньги за каждый показ или клик. Для новичка AdMob удобен по трём причинам: простой вход (нужен только аккаунт Google), поддержка всех популярных форматов рекламы и подробная статистика в личном кабинете.
Существуют и альтернативы: Unity Ads лучше подходит для игр, AppLovin даёт хорошие ставки на определённых рынках, а Facebook Audience Network требует отдельной настройки. Но для первого опыта AdMob — лучший выбор, потому что на русском языке о нём больше всего информации и сообщество активно помогает новичкам.
Какие форматы рекламы можно добавить
Прежде чем писать код, надо понять, какой формат рекламы лучше впишется в ваше приложение. Вот основные форматы с реальными сценариями использования:
- Баннер (Banner). Небольшой прямоугольник вверху или внизу экрана. Занимает мало места, но и доход с него небольшой. Подходит для приложений-справочников, где пользователь долго смотрит на один экран.
- Адаптивный баннер (Adaptive Banner). Более современный вариант, который сам подстраивается под ширину экрана. Google рекомендует использовать именно его вместо классического баннера.
- Межстраничная реклама (Interstitial). Полноэкранный блок, который появляется в естественных паузах: между уровнями игры, при переходе между разделами. Приносит больше денег, но раздражает пользователей, если показывать слишком часто.
- Видео с вознаграждением (Rewarded). Пользователь сам выбирает посмотреть рекламу и получает за это бонус: игровую валюту, дополнительную попытку, разблокировку контента. Самый этичный формат: обе стороны в выигрыше.
- Нативная реклама (Native). Выглядит как часть интерфейса вашего приложения. Можно настроить шрифты и цвета, чтобы реклама не выделялась чужеродным блоком.
Шаг 1: Регистрация приложения в AdMob
Прежде чем писать код, нужно создать аккаунт и зарегистрировать приложение. Перейдите на сайт admob.google.com, войдите в аккаунт Google и нажмите «Добавить приложение». Выберите, что приложение уже опубликовано (даже если его ещё нет в Play Store), и введите название. После регистрации вы получите два важных идентификатора:
- App ID — уникальный номер вашего приложения в системе AdMob. Выглядит как
ca-app-pub-1234567890123456~9876543210987654. - Ad Unit ID — номер конкретного рекламного блока. У каждого формата рекламы он свой. Выглядит похоже:
ca-app-pub-1234567890123456/1234567890.
Пока вы разрабатываете и тестируете приложение, используйте тестовые идентификаторы, которые предоставляет Google. Настоящие ID подключайте только перед публикацией в Play Store, иначе аккаунт могут заблокировать.
Шаг 2: Добавляем библиотеку в проект
Откройте файл build.gradle.kts уровня модуля app и добавьте зависимость Google Mobile Ads SDK. На момент написания статьи актуальная версия — 24.7.0, но уточните свежую в документации Google.
dependencies {
implementation("com.google.android.gms:play-services-ads:24.7.0")
}
После добавления строки нажмите Sync Now в появившейся синей полосе. Gradle загрузит библиотеку, и она станет доступна в вашем проекте.
Шаг 3: Прописываем App ID в манифесте
Откройте файл AndroidManifest.xml и внутри тега <application> добавьте мета-данные с вашим App ID. Для тестирования используйте демонстрационный идентификатор Google:
<meta-data
android:name="com.google.android.gms.ads.APPLICATION_ID"
android:value="ca-app-pub-3940256099942544~3347511713"/>
Эта строчка нужна, чтобы библиотека понимала, какому приложению принадлежат рекламные блоки. Без неё реклама просто не загрузится.
Шаг 4: Инициализация SDK
В главной Activity в методе onCreate нужно инициализировать Mobile Ads SDK. Это делается один раз при запуске приложения. Инициализация выполняется асинхронно, поэтому реклама начнёт загружаться не сразу, а через секунду-две после старта.
import com.google.android.gms.ads.MobileAds
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
MobileAds.initialize(this) { /* инициализация завершена */ }
setContent { /* ваш интерфейс */ }
}
}
Колбэк внутри initialize можно оставить пустым, если вам не нужно выполнять действие сразу после готовности SDK. Главное — сам вызов метода. Современные версии библиотеки часто инициализируются автоматически, но явный вызов гарантирует, что всё работает как надо.
Шаг 5: Добавляем баннер на экран
Теперь самое интересное — показать рекламу. Начнём с адаптивного баннера, который Google рекомендует использовать вместо классического. В Jetpack Compose это делается через AndroidView, который оборачивает обычный AdView.
Сначала добавьте тестовый идентификатор рекламного блока в ресурсы. Создайте файл res/values/ads.xml (если его нет) и пропишите:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="banner_ad_unit_id">ca-app-pub-3940256099942544/6300978111</string>
</resources>
Затем создайте компонуемую функцию, которая показывает баннер. Класс AdView требует контекст Activity, поэтому используйте LocalContext.current.
@Composable
fun AdaptiveBannerAd(
modifier: Modifier = Modifier
) {
val context = LocalContext.current
val adView = remember { AdView(context) }
AndroidView(
modifier = modifier.fillMaxWidth(),
factory = { adView.apply {
setAdSize(AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(context, 320))
adUnitId = context.getString(R.string.banner_ad_unit_id)
loadAd(AdRequest.Builder().build())
}}
)
}
Вызовите этот компонент на нужном экране — и баннер появится. Ключевой момент: всегда используйте тестовые ID на этапе разработки. Если загружать настоящую рекламу в режиме отладки, Google может расценить это как накрутку и заблокировать аккаунт.
Шаг 6: Межстраничная реклама (Interstitial)
Межстраничная реклама сложнее баннера: её нужно загрузить заранее, а показать в подходящий момент (между уровнями игры или при переходе между разделами). Создадим простой класс-помощник, который управляет жизненным циклом межстраничного объявления.
class InterstitialAdManager(private val context: Context) {
private var interstitialAd: InterstitialAd? = null
fun loadAd(adUnitId: String) {
InterstitialAd.load(context, adUnitId, AdRequest.Builder().build(),
object : InterstitialAdLoadCallback() {
override fun onAdLoaded(ad: InterstitialAd) {
interstitialAd = ad
}
override fun onAdFailedToLoad(error: LoadAdError) {
interstitialAd = null
}
})
}
fun showAd() {
interstitialAd?.show(context as Activity) ?: run {
// реклама ещё не загружена
}
}
}
Вызывайте loadAd заранее (например, при запуске экрана), а showAd — в момент, когда пользователь завершил действие и ожидает перехода. Всегда проверяйте, загружена ли реклама, иначе приложение упадёт с исключением.
Шаг 7: Видео с вознаграждением (Rewarded)
Rewarded-реклама — самая дружелюбная к пользователю. Человек соглашается посмотреть ролик и получает за это награду. Загрузка похожа на Interstitial, но при показе вы обрабатываете результат через колбэк.
class RewardedAdManager(private val context: Context) {
private var rewardedAd: RewardedAd? = null
fun loadAd(adUnitId: String) {
RewardedAd.load(context, adUnitId, AdRequest.Builder().build(),
object : RewardedAdLoadCallback() {
override fun onAdLoaded(ad: RewardedAd) {
rewardedAd = ad
}
override fun onAdFailedToLoad(error: LoadAdError) {
rewardedAd = null
}
})
}
fun showAd(onReward: (RewardItem) -> Unit) {
rewardedAd?.let { ad ->
ad.show(context as Activity) { reward ->
onReward(reward)
}
}
}
}
В колбэке onReward вы можете начислить пользователю монеты, открыть закрытый уровень или убрать рекламу на час. Пользователь сам решил посмотреть рекламу, поэтому не чувствует себя обманутым.
Сравнение форматов рекламы
Чтобы вам было проще выбрать, какой формат подходит именно вашему приложению, я свёл ключевые характеристики в таблицу.
| Формат | Навязчивость для пользователя | Потенциальный доход | Сложность интеграции | Когда использовать |
|---|---|---|---|---|
| Адаптивный баннер | Низкая, занимает небольшую полосу | Низкий | Низкая | Приложения с долгим временем на одном экране: читалки, справочники |
| Interstitial | Высокая, перекрывает весь экран | Средний | Средняя | Игры между уровнями, приложения с естественными паузами |
| Rewarded | Добровольная, пользователь сам соглашается | Высокий | Средняя | Игры, приложения с платным контентом, который можно «отработать» |
| Native | Низкая, выглядит как часть интерфейса | Средний | Высокая | Ленты новостей, списки, когда важна органичность |
Советы новичкам: как не наделать ошибок
Когда вы впервые делаете добавление рекламы в приложение сделанное на kotlin, легко споткнуться на нескольких моментах. Вот что стоит знать заранее:
- Тестовые ID — ваша страховка. Никогда не тестируйте приложение с настоящими рекламными блоками. Google строго следит за этим и блокирует аккаунты за клики по собственной рекламе. Полный список тестовых ID есть в документации Google.
- Не злоупотребляйте частотой показа. Если вы будете показывать межстраничную рекламу после каждого действия, пользователи удалят приложение. Оптимально — не чаще одного раза в минуту и в естественных паузах.
- Всегда проверяйте загрузку перед показом. Interstitial и Rewarded загружаются асинхронно. Если вызвать
show()до того, как реклама загрузилась, приложение упадёт. Добавляйте проверку на null. - Обрабатывайте ошибки. Не всегда реклама загружается: может не быть интернета, может не быть доступных объявлений. Покажите пользователю что-то другое вместо рекламы или просто продолжайте работу приложения.
- Правильно настройте таргетинг под детей. Если ваше приложение для детей, используйте
setTagForChildDirectedTreatmentв билдере запроса. Это требование законодательства многих стран.
Коротко о главном
Сегодня вы узнали, как выполняется добавление рекламы в приложение сделанное на kotlin через Google AdMob. Мы прошли путь от регистрации в консоли AdMob до показа баннера на экране и работы с межстраничной рекламой. Базовый план действий прост: регистрируете приложение, добавляете библиотеку в Gradle, прописываете App ID в манифесте, инициализируете SDK и добавляете рекламные блоки с тестовыми ID. Перед публикацией в Play Store замените тестовые ID на настоящие, настройте частоту показа и обязательно протестируйте на реальном устройстве. Начните с баннера — это самый простой формат, а когда освоитесь, добавите rewarded-видео и interstitial. Удачи в монетизации!