Заработок
Интеграция AdMob
Настройка монетизации
1Создайте аккаунт AdMob#
Зарегистрируйте аккаунт Google AdMob. Для начала понадобится аккаунт Google. AdMob — это рекламная платформа Google для мобильных приложений.
2Добавьте приложение#
В панели AdMob:
- Нажмите «Apps» в боковом меню
- Нажмите «Add App»
- Выберите «No» в вопросе «Is your app listed on a supported app store?»
- Введите название приложения
- Выберите «Android» как платформу
- Нажмите «Add»
3Получите ID приложения#
После создания приложения:
- Скопируйте показанный ID приложения (формат: ca-app-pub-XXXXXXXXXXXXXXXX~XXXXXXXXXX)
- Это не то же самое, что ID рекламного блока
- Вы будете использовать это в AndroidManifest.xml
App ID format:
ca-app-pub-1234567890123456~12345678904Создайте рекламный блок (баннер)#
В вашем аккаунте AdMob:
- Откройте вкладку «Ad units»
- Нажмите «Add ad unit»
- Выберите «Banner»
- Введите название рекламного блока (например, «Main Banner»)
- Нажмите «Create ad unit»
- Скопируйте ID рекламного блока
Banner Ad Unit ID format:
ca-app-pub-1234567890123456/12345678905Настройка в AppMint#
В AppMint, шаг 3:
- Включите «AdMob Ads» и вставьте ID приложения AdMob (тот, где есть ~)
- Ad Control: оставьте «Automatic» — приложение само разместит рекламу
- Включите «Banner Ad», выберите положение (внизу или вверху) и вставьте ID баннерного блока (тот, где есть /)
- Продолжите с остальными настройками и создайте приложение
Ad Unit ID (not App ID):
ca-app-pub-XXXXXXXXXXXXXXXX/YYYYYYYYYY6Тестовая реклама в вашем приложении#
Во время разработки используйте официальные тестовые ID от Google, чтобы не нарушать правила. Скопируйте их в генератор:
📋 ID приложения AdMob:
ca-app-pub-3940256099942544~3347511713
📋 ID баннерного блока:
ca-app-pub-3940256099942544/6300978111
📋 ID блока полноэкранной рекламы между экранами:
ca-app-pub-3940256099942544/1033173712
📋 ID блока рекламы с вознаграждением:
ca-app-pub-3940256099942544/5224354917
📋 ID издателя:
pub-3940256099942544
📋 Сайт разработчика:
https://example.com
Эти тестовые ID показывают рекламу, похожую на настоящую, без дохода и без нарушения правил. Для публикации замените их своими настоящими ID.
Test IDs for Generator:
AdMob App ID: ca-app-pub-3940256099942544~3347511713
Banner Ad ID: ca-app-pub-3940256099942544/6300978111
Interstitial ID: ca-app-pub-3940256099942544/1033173712
Rewarded Ad ID: ca-app-pub-3940256099942544/5224354917
Publisher ID: pub-3940256099942544
Developer URL: https://example.com7Полноэкранная реклама между экранами#
Полноэкранная реклама между экранами закрывает весь интерфейс приложения. Пользователь может закрыть её и вернуться в приложение.
📺 Как включить (шаг 3, Ad Control «Automatic»):
- Включите «Full Screen Ad»
- Тип рекламы: выберите «Interstitial Ad»
- Введите ID блока полноэкранной рекламы между экранами (или оставьте пустым для тестовой рекламы)
- Выберите режим запуска:
🔄 После переходов (по умолчанию):
Реклама показывается после каждых N переходов между страницами. Например, при значении 4 она появится после 4-й, 8-й, 12-й загрузки страницы и так далее.
📱 При открытии приложения:
Реклама показывается один раз сразу после заставки, когда приложение впервые открывается.
👆 По требованию:
Автоматической рекламы нет — ваша страница показывает её по нажатию с помощью WebToApk.showInterstitialAd().
⚠️ Тип рекламы выбирается один: либо полноэкранная между экранами, либо с вознаграждением, но не обе сразу.
Example: every 4 page navigations
Page 1 → No ad
Page 2 → No ad
Page 3 → No ad
Page 4 → 📺 Interstitial Ad shown!
Page 5 → No ad
Page 6 → No ad
Page 7 → No ad
Page 8 → 📺 Interstitial Ad shown!
...8Реклама с вознаграждением#
Реклама с вознаграждением — это полноэкранные видео, которые пользователи смотрят в обмен на награду. Она приносит больше дохода, чем баннеры и полноэкранная реклама между экранами.
🎁 Как включить (шаг 3, Ad Control «Automatic»):
- Включите «Full Screen Ad»
- Тип рекламы: выберите «Rewarded Ad»
- Введите ID блока рекламы с вознаграждением (или оставьте пустым для тестовой рекламы)
- Выберите режим запуска:
🔄 После переходов (по умолчанию):
Как и полноэкранная реклама между экранами: реклама показывается после каждых N загрузок страницы. Значение N задаёт параметр «Show ad after every N page navigations». По умолчанию 4.
📱 При открытии приложения:
Видео с вознаграждением показывается один раз, когда приложение впервые открывается после заставки.
👆 По требованию:
Автоматической рекламы нет — кнопка «Посмотрите рекламу и получите награду» на вашей странице вызывает WebToApk.showRewardedAd().
💡 Сколько переходов?
Меньше — больше рекламы (больше дохода, но хуже впечатление). Больше — меньше рекламы (лучше впечатление, но меньше дохода). Рекомендуем: 3–5.
⚠️ Правила Google: для рекламы с вознаграждением нужно согласие пользователя. В режимах «После переходов» и «При открытии приложения» приложение сначала показывает вопрос «Посмотреть рекламу?» с кнопкой «Нет, спасибо»; реклама запускается, только если пользователь согласился.
Revenue comparison (approximate):
Banner Ads: $0.10 - $0.50 per 1000 views
Interstitial Ads: $1 - $5 per 1000 views
Rewarded Ads: $5 - $15 per 1000 views
Recommended N (page navigations per ad):
Aggressive: 2-3 (more ads, more revenue)
Balanced: 4-5 (recommended)
Conservative: 6-10 (fewer ads, better UX)9Согласие и политика конфиденциальности (обязательно)#
⚠️ AdMob требует механизм согласия для пользователей из ЕЭЗ, Великобритании, Швейцарии и штатов США.
Это делает сгенерированное приложение автоматически с помощью Google User Messaging Platform (UMP). Приложение будет:
- Показывать диалог согласия пользователям из ЕЭЗ, Великобритании и Швейцарии до показа рекламы
- Показывать диалог отказа пользователям в соответствующих штатах США
- Запрашивайте рекламу только после получения согласия
Что нужно сделать ВАМ:
- В консоли AdMob → Privacy & messaging → Create a European regulations message
- В консоли AdMob → Privacy & messaging → Create a US state regulations message
- Укажите адрес политики конфиденциальности в генераторе (шаг 3 или шаг 4)
- Убедитесь, что в вашей политике конфиденциальности упомянута реклама AdMob
⚠️ Без этой настройки AdMob может показать предупреждение: «Consent requirement: No CMP»
10Проверка рекламы#
После публикации приложения:
- AdMob проверит ваше приложение (обычно это занимает 24–48 часов)
- Сначала вы увидите тестовую рекламу
- После одобрения начнёт показываться настоящая реклама
- Следите, чтобы контент приложения соответствовал правилам
11Включите выплаты#
Чтобы получать доход от рекламы:
- Откройте «Payments» в панели AdMob
- Добавьте способ выплат (банковский счёт или другие варианты)
- Подтвердите свой адрес
- Заполните налоговую информацию
- Выплаты производятся ежемесячно после достижения порога в 100 долларов
12Лучшие практики#
✅ Размещение баннера: нижний баннер меньше мешает и удобнее для пользователей
✅ Между экранами или с вознаграждением: выберите одно, не оба. Реклама с вознаграждением приносит больше, но требует участия пользователя
✅ Число действий: начните с 4–5 переходов между показами рекламы. Слишком часто — плохие отзывы
✅ Сначала тест: во время разработки всегда проверяйте с тестовыми рекламными блоками
✅ Следите за результатами: регулярно проверяйте панель AdMob, чтобы видеть доход и показатели
⚠️ Не нажимайте: никогда не нажимайте на собственную рекламу — это нарушает правила AdMob
⚠️ Качественный контент: убедитесь, что ваше приложение полезно и соответствует правилам AdMob
💡 Совет: сочетайте баннер (всегда на экране) и полноэкранную рекламу между экранами или с вознаграждением (время от времени) для максимального дохода
13Если что-то не работает#
Частые проблемы и решения:
- Реклама не показывается: проверьте, что вы используете правильный ID рекламного блока (а не ID приложения)
- Тестовая реклама работает, а настоящая нет: дождитесь завершения проверки в AdMob
- Запрос рекламы не удался: проверьте подключение к интернету и состояние аккаунта AdMob
- Аккаунт заблокирован: изучите правила AdMob и при необходимости подайте апелляцию
14Реклама под вашим контролем: размещайте каждый блок сами#
Скачайте полную демонстрационную страницу ниже (Coin Runner): баннер внутри макета, реклама между экранами между уровнями, кнопка «Посмотрите рекламу и получите 50 монет», прямоугольник 300×250, переключатель рекламы при открытии приложения и живой журнал каждого результата. Упакуйте в ZIP, загрузите как Offline ZIP, выберите Developer-controlled с заполненными тестовыми ID и соберите приложение — у каждой кнопки есть пояснение.
Описанные выше варианты относятся к автоматическому режиму: приложение само показывает баннер и полноэкранную рекламу или рекламу с вознаграждением. Если вам нужны все форматы AdMob и возможность поставить каждый из них точно туда, куда нужно вашей странице, выберите на шаге 3 «Ad Control → Developer-controlled».
В этом режиме НИЧЕГО не происходит автоматически. Введите по одному ID блока для каждого используемого формата — баннер, средний прямоугольник (300×250), полноэкранная реклама между экранами, с вознаграждением, полноэкранная с вознаграждением, при открытии приложения — а остальные оставьте пустыми. Затем ваша страница управляет всем через window.AppMintAds:
- AppMintAds.banner.attach('#slot', {size:'banner'|'medium_rectangle'}) — баннер поверх указанного элемента: в карточке, между элементами списка, где угодно. Он следует за элементом при прокрутке; detach() его убирает. Одновременно можно два.
- await AppMintAds.load('interstitial') → {ok:true} или {ok:false, code:'no_fill'|'network'|'invalid_unit'|'consent'|'ad_free'|'disabled'}
- await AppMintAds.show('rewarded') → {shown:true, earned:true, reward:{type,amount}} или {shown:false, reason}
- AppMintAds.isReady('interstitial') — включайте кнопку по этому значению
- AppMintAds.appOpen.setEnabled(false) — приостановить рекламу при открытии приложения, пока пользователь занят делом
AppMintAds существует только внутри установленного приложения — всегда проверяйте его наличие (if (window.AppMintAds) …), чтобы страница работала и в браузере. Правила Google продолжают действовать, и приложение их соблюдает: реклама с вознаграждением запускается только по собственному нажатию пользователя (ваша кнопка «Посмотреть рекламу» и есть его согласие), между показами полноэкранной рекламы выдерживается пауза в 60 секунд, и никогда не ставьте рекламу поверх основного действия.
// Feature-detect: AppMintAds exists only in the installed app
const ads = window.AppMintAds;
// 1. A banner INSIDE your layout — <div id="ad-slot"></div> reserves the space
if (ads) {
const r = await ads.banner.attach('#ad-slot', { size: 'banner' });
console.log(r.ok ? 'banner ' + r.width + 'x' + r.height : 'no banner: ' + r.code);
}
// 2. A full-page ad at a natural break (between levels), never on every tap
async function levelFinished() {
if (ads && ads.isReady('interstitial')) await ads.show('interstitial');
showNextLevel(); // continues whether or not an ad was shown
}
// 3. A 'Watch ad to earn 50 coins' button — the tap is the user's opt-in
watchBtn.onclick = async () => {
if (!ads) return; // browser: no native ads
// From a tap the ad plays. Without one (a timer, a route change) the app shows
// AdMob's "Watch an ad? / No thanks" intro first and answers code 'declined'.
const r = await ads.show('rewarded');
if (r.earned) addCoins(r.reward.amount || 50); // grant ONLY when earned
else if (r.reason === 'ad_free') addCoins(50); // premium user: grant without an ad
else toast('No ad available right now'); // no popup, no Skip button
};
// 4. Preload and keep the button honest
ads?.load('rewarded').then(r => { watchBtn.disabled = !r.ok; });
В приложении кнопка этого шага сохраняет их на телефон. Здесь они доступны для прямого скачивания.
admob-developer-demo.html15События состояния рекламы: узнайте, что случилось с каждым запросом#
Каждый рекламный блок под вашим контролем сообщает весь свой жизненный цикл в ОДНОМ событии, appmint:ad, так что вы можете записывать показы, реагировать на сбои и управлять собственным интерфейсом:
{ type, phase, slot?, code?, adCode?, message?, width?, height?, reward?, earned? }
- type: banner | mrec | interstitial | rewarded | rewarded_interstitial | app_open
- phase: loading → loaded | failed → opened → impression → clicked → closed, а также rewarded (награда получена) и show_failed
- code (при failed): no_fill | network | invalid_unit | internal — adCode это собственный номер AdMob, message — его текст
- slot: какой баннерный слот, для banner/mrec
Промисы дают один и тот же ответ на каждый вызов, а событие даёт всё, включая рекламу, для которой вы не вызывали show() (реклама при открытии приложения, обновление баннера). В автоматическом режиме AppMintAds по-прежнему существует, но отвечает кодом «automatic_mode» — используйте там вызовы WebToApk.showInterstitialAd() и showRewardedAd() и события appmint:reward / appmint:ad-closed / appmint:ad-unavailable.
window.addEventListener('appmint:ad', e => {
const a = e.detail;
console.log(a.type, a.phase, a.code || '', a.message || '');
if (a.phase === 'failed' && a.code === 'no_fill') analytics.track('ad_no_fill', a);
if (a.type === 'rewarded' && a.phase === 'rewarded') console.log('earned', a.reward);
if (a.type === 'banner' && a.phase === 'loaded') console.log('banner ' + a.width + 'x' + a.height + ' in ' + a.slot);
});
// What can this build serve? (guard it — in a browser AppMintAds is undefined)
if (window.AppMintAds) console.log(AppMintAds.config());
// → { control: 'developer', formats: { banner: true, mrec: false, interstitial: true, ... } }