Ganar dinero
Integración de AdMob
Configuración de monetización
1Crear una cuenta de AdMob#
Regístrate para obtener una cuenta de Google AdMob. Necesitarás una cuenta de Google para empezar. AdMob es la plataforma de publicidad móvil de Google.
2Añade tu app#
En el panel de AdMob:
- Haz clic en «Apps» en la barra lateral
- Haz clic en «Añadir app»
- Selecciona «No» en «¿Tu app aparece en una tienda de apps compatible?»
- Introduce el nombre de tu app
- Selecciona «Android» como plataforma
- Haz clic en «Añadir»
3Obtener el ID de la app#
Después de crear tu app:
- Copia el ID de la app que aparece (formato: ca-app-pub-XXXXXXXXXXXXXXXX~XXXXXXXXXX)
- Es distinto de tu ID de bloque de anuncios
- Lo usarás en AndroidManifest.xml
App ID format:
ca-app-pub-1234567890123456~12345678904Crear un bloque de anuncios (banner)#
En tu app de AdMob:
- Haz clic en la pestaña «Bloques de anuncios»
- Haz clic en «Añadir bloque de anuncios»
- Selecciona «Banner»
- Introduce el nombre del bloque de anuncios (por ejemplo, «Banner principal»)
- Haz clic en «Crear bloque de anuncios»
- Copia el ID del bloque de anuncios
Banner Ad Unit ID format:
ca-app-pub-1234567890123456/12345678905Configuración en AppMint#
En AppMint, paso 3:
- Activa «Anuncios de AdMob» y pega el ID de tu app de AdMob (el que lleva ~)
- Control de anuncios: deja «Automático»; la app coloca los anuncios por ti
- Activa «Anuncio banner», elige la posición del anuncio (inferior o superior) y pega el ID de tu bloque de anuncios banner (el que lleva /)
- Continúa con los demás ajustes y genera tu app
Ad Unit ID (not App ID):
ca-app-pub-XXXXXXXXXXXXXXXX/YYYYYYYYYY6Anuncios de prueba en tu app#
Durante el desarrollo, usa los ID de prueba oficiales de Google para evitar infracciones de políticas. Cópialos y pégalos en el generador:
📋 ID de la app de AdMob:
ca-app-pub-3940256099942544~3347511713
📋 ID del bloque de anuncios banner:
ca-app-pub-3940256099942544/6300978111
📋 ID del bloque de anuncios intersticial:
ca-app-pub-3940256099942544/1033173712
📋 ID del bloque de anuncios con recompensa:
ca-app-pub-3940256099942544/5224354917
📋 ID de editor:
pub-3940256099942544
📋 Sitio web del desarrollador:
https://example.com
Estos ID de prueba muestran anuncios de aspecto real sin generar ingresos ni infringir políticas. Sustitúyelos por tus ID reales para producción.
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.com7Anuncios intersticiales#
Los anuncios intersticiales son anuncios a pantalla completa que cubren toda la interfaz de la app. Los usuarios pueden cerrarlos para volver a la app.
📺 Cómo activarlo (paso 3, Control de anuncios «Automático»):
- Activa «Anuncio a pantalla completa»
- Tipo de anuncio: elige «Anuncio intersticial»
- Introduce el ID de tu bloque de anuncios intersticial (o déjalo vacío para usar anuncios de prueba)
- Elige el modo de activación:
🔄 Tras las navegaciones (predeterminado):
El anuncio se muestra cada N navegaciones de página. Por ejemplo, si se establece en 4, el anuncio aparece tras la 4.ª, la 8.ª, la 12.ª carga de página, y así sucesivamente.
📱 Apertura de la app:
El anuncio se muestra una vez justo después de la pantalla de bienvenida, cuando la app se abre por primera vez.
👆 Bajo demanda:
Sin anuncios automáticos: tu página muestra uno al tocar con WebToApk.showInterstitialAd().
⚠️ El tipo de anuncio es una sola opción: intersticial O con recompensa, no ambos.
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!
...8Anuncios con recompensa#
Los anuncios con recompensa son anuncios de video a pantalla completa que los usuarios ven a cambio de una recompensa. Generan más ingresos que los banners o los anuncios intersticiales.
🎁 Cómo activarlo (paso 3, Control de anuncios «Automático»):
- Activa «Anuncio a pantalla completa»
- Tipo de anuncio: elige «Anuncio con recompensa»
- Introduce el ID de tu bloque de anuncios con recompensa (o déjalo vacío para usar anuncios de prueba)
- Elige el modo de activación:
🔄 Tras las navegaciones (predeterminado):
Similar al intersticial: el anuncio se muestra cada N cargas de página. «Mostrar anuncio cada N navegaciones de página» define N. El valor predeterminado es 4.
📱 Apertura de la app:
El video con recompensa se muestra una vez cuando la app se abre por primera vez después de la pantalla de bienvenida.
👆 Bajo demanda:
Sin anuncios automáticos: el botón «ver anuncio para ganar» de tu propia página llama a WebToApk.showRewardedAd().
💡 ¿Cuántas navegaciones?
Menos = más anuncios (más ingresos pero peor experiencia). Más = menos anuncios (mejor experiencia pero menos ingresos). Recomendado: 3-5.
⚠️ Política de Google: los anuncios con recompensa necesitan el visto bueno del usuario. En los modos Tras las navegaciones y Apertura de la app, tu app muestra primero un aviso «¿Ver un anuncio?» con un botón «No, gracias»; el anuncio solo se reproduce si el usuario acepta.
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)9Consentimiento y política de privacidad (obligatorio)#
⚠️ AdMob exige un mecanismo de consentimiento para los usuarios del EEE, el Reino Unido, Suiza y los estados de EE. UU.
La app generada se encarga de esto automáticamente con la User Messaging Platform (UMP) de Google. La app:
- Muestra un cuadro de consentimiento a los usuarios del EEE, el Reino Unido y Suiza antes de mostrar anuncios
- Muestra un cuadro de exclusión a los usuarios de los estados de EE. UU. que correspondan
- Solicita anuncios solo después de obtener el consentimiento
Lo que TÚ debes hacer:
- En la consola de AdMob → Privacidad y mensajes → Crear un mensaje sobre las normativas europeas
- En la consola de AdMob → Privacidad y mensajes → Crear un mensaje sobre las normativas de los estados de EE. UU.
- Define la URL de tu política de privacidad en el generador (paso 3 o paso 4)
- Asegúrate de que tu política de privacidad mencione la publicidad de AdMob
⚠️ Sin esta configuración, AdMob puede mostrar una advertencia de política: «Requisito de consentimiento: sin CMP»
10Proceso de revisión de anuncios#
Después de publicar tu app:
- AdMob revisará tu app (suele tardar de 24 a 48 horas)
- Al principio verás anuncios de prueba
- Una vez aprobada, empezarán a mostrarse anuncios reales
- Mantén el contenido de tu app conforme a las políticas
11Activar los pagos#
Para recibir ingresos por anuncios:
- Ve a «Pagos» en el panel de AdMob
- Añade un método de pago (cuenta bancaria u otras opciones)
- Verifica tu dirección
- Configura la información fiscal
- Los pagos se hacen mensualmente tras alcanzar el umbral de 100 $
12Buenas prácticas#
✅ Ubicación del banner: el banner inferior es menos intrusivo y ofrece mejor experiencia de usuario
✅ Intersticial/con recompensa: elige uno, no ambos. Los anuncios con recompensa generan más pero requieren la participación del usuario
✅ Número de acciones: empieza con 4-5 navegaciones entre anuncios. Demasiado frecuente = malas reseñas
✅ Prueba primero: prueba siempre con bloques de anuncios de prueba durante el desarrollo
✅ Supervisa el rendimiento: consulta el panel de AdMob con regularidad para ver ingresos y métricas
⚠️ No hagas clic: nunca hagas clic en tus propios anuncios, va contra la política de AdMob
⚠️ Contenido de calidad: asegúrate de que tu app aporte valor y cumpla las políticas de AdMob
💡 Consejo profesional: combina banner (siempre visible) + intersticial o con recompensa (periódico) para obtener el máximo de ingresos
13Solución de problemas#
Problemas habituales y soluciones:
- No se muestran anuncios: comprueba que estás usando el ID de bloque de anuncios correcto (no el ID de la app)
- Los anuncios de prueba funcionan pero los reales no: espera a que termine la revisión de AdMob
- La solicitud de anuncio falló: comprueba la conexión a internet y el estado de tu cuenta de AdMob
- Cuenta suspendida: revisa las políticas de AdMob y apela si es necesario
14Anuncios controlados por el desarrollador: coloca cada anuncio tú mismo#
Descarga abajo la página de demostración completa (Coin Runner): un banner dentro del diseño, un intersticial entre niveles, un botón «Ver anuncio para ganar 50 monedas», un rectángulo de 300×250, el interruptor de apertura de la app y un registro en vivo de cada resultado. Comprímela en un ZIP, súbela como ZIP sin conexión, elige Controlado por el desarrollador con los ID de prueba rellenados y compila: cada botón se explica solo.
Las opciones anteriores corresponden al modo Automático: la app muestra el banner y el anuncio de página completa o con recompensa por ti. Si quieres todos los formatos de AdMob y la libertad de colocar cada uno justo donde lo necesite tu página, elige «Control de anuncios → Controlado por el desarrollador» en el paso 3.
En este modo NADA es automático. Introduce un ID de bloque de anuncios para cada formato que uses (banner, rectángulo mediano de 300×250, intersticial, con recompensa, intersticial con recompensa, de apertura de la app) y deja vacíos los demás. Después, tu página lo controla todo mediante window.AppMintAds:
- AppMintAds.banner.attach('#slot', {size:'banner'|'medium_rectangle'}): un banner colocado sobre el elemento que indiques, en una tarjeta, entre elementos de una lista, donde quieras. Sigue al elemento al desplazarse; detach() lo quita. Hasta dos a la vez.
- await AppMintAds.load('interstitial') → {ok:true} o {ok:false, code:'no_fill'|'network'|'invalid_unit'|'consent'|'ad_free'|'disabled'}
- await AppMintAds.show('rewarded') → {shown:true, earned:true, reward:{type,amount}} o {shown:false, reason}
- AppMintAds.isReady('interstitial'): activa tu botón según esto
- AppMintAds.appOpen.setEnabled(false): pausa el anuncio de apertura de la app mientras el usuario está en medio de una tarea
AppMintAds solo existe dentro de la app instalada: detecta siempre la función (if (window.AppMintAds) …) para que la página siga funcionando en un navegador. Las reglas de Google siguen vigentes y la app las aplica: un anuncio con recompensa solo se reproduce cuando el propio usuario toca (tu botón «Ver anuncio» ES la aceptación), los intersticiales mantienen un intervalo de 60 segundos y nunca pongas un anuncio encima de una acción principal.
// 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; });
En la app, el botón de este paso los guarda en tu teléfono. Aquí son descargas directas.
admob-developer-demo.html15Eventos de estado de los anuncios: entérate de qué pasó con cada solicitud#
Cada anuncio controlado por el desarrollador informa de todo su ciclo de vida en UN solo evento, appmint:ad, para que puedas registrar las cargas, reaccionar a los fallos y manejar tu propia interfaz:
{ 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, además de rewarded (se obtuvo una recompensa) y show_failed
- code (en failed): no_fill | network | invalid_unit | internal; adCode es el número propio de AdMob y message su texto
- slot: qué espacio de banner, para banner/mrec
Las promesas te dan la misma respuesta por llamada; el evento te lo da todo, incluidos los anuncios para los que no llamaste a show() (un anuncio de apertura de la app, una actualización de banner). En el modo Automático, AppMintAds sigue existiendo pero responde con el código 'automatic_mode': usa allí las llamadas WebToApk.showInterstitialAd()/showRewardedAd() y los eventos 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, ... } }