Guadagnare
Integrazione AdMob
Configurazione della monetizzazione
1Crea un account AdMob#
Registrati per un account Google AdMob. Ti serve un account Google per iniziare. AdMob è la piattaforma pubblicitaria mobile di Google.
2Aggiungi la tua app#
Nella dashboard di AdMob:
- Fai clic su «Apps» nella barra laterale
- Fai clic su «Add App»
- Seleziona «No» per «Is your app listed on a supported app store?»
- Inserisci il nome della tua app
- Seleziona «Android» come piattaforma
- Fai clic su «Add»
3Ottieni l'App ID#
Dopo aver creato la tua app:
- Copia l'App ID mostrato (formato: ca-app-pub-XXXXXXXXXXXXXXXX~XXXXXXXXXX)
- È diverso dal tuo Ad Unit ID
- Lo userai in AndroidManifest.xml
App ID format:
ca-app-pub-1234567890123456~12345678904Crea un'unità pubblicitaria (banner)#
Nella tua app AdMob:
- Fai clic sulla scheda «Ad units»
- Fai clic su «Add ad unit»
- Seleziona «Banner»
- Inserisci il nome dell'unità pubblicitaria (ad es. «Main Banner»)
- Fai clic su «Create ad unit»
- Copia l'Ad Unit ID
Banner Ad Unit ID format:
ca-app-pub-1234567890123456/12345678905Configurazione in AppMint#
In AppMint, passaggio 3:
- Attiva «AdMob Ads» e incolla il tuo AdMob App ID (quello con ~)
- Ad Control: lascia «Automatic» - l'app posiziona gli annunci per te
- Attiva «Banner Ad», scegli la posizione dell'annuncio (in basso o in alto) e incolla il tuo Banner Ad Unit ID (quello con /)
- Continua con le altre impostazioni e genera la tua app
Ad Unit ID (not App ID):
ca-app-pub-XXXXXXXXXXXXXXXX/YYYYYYYYYY6Prova gli annunci nella tua app#
Durante lo sviluppo, usa gli ID di prova ufficiali di Google per evitare violazioni delle norme. Copiali e incollali nel generatore:
📋 AdMob App ID:
ca-app-pub-3940256099942544~3347511713
📋 Banner Ad Unit ID:
ca-app-pub-3940256099942544/6300978111
📋 Interstitial Ad Unit ID:
ca-app-pub-3940256099942544/1033173712
📋 Rewarded Ad Unit ID:
ca-app-pub-3940256099942544/5224354917
📋 Publisher ID:
pub-3940256099942544
📋 Sito web dello sviluppatore:
https://example.com
Questi ID di prova mostrano annunci dall'aspetto reale senza generare entrate né violare le norme. Sostituiscili con i tuoi ID reali per la produzione.
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.com7Annunci interstiziali#
Gli annunci interstiziali sono annunci a schermo intero che coprono l'intera interfaccia dell'app. Gli utenti possono chiuderli per tornare all'app.
📺 Come attivarlo (passaggio 3, Ad Control «Automatic»):
- Attiva «Full Screen Ad»
- Ad Type: scegli «Interstitial Ad»
- Inserisci il tuo Interstitial Ad Unit ID (o lascia vuoto per usare annunci di prova)
- Scegli la modalità di attivazione:
🔄 Dopo le navigazioni (predefinito):
l'annuncio compare dopo ogni N navigazioni di pagina. Ad esempio, se impostato su 4, l'annuncio compare dopo il 4º, 8º, 12º caricamento di pagina e così via.
📱 App Open:
l'annuncio compare una volta sola, subito dopo la schermata iniziale, alla prima apertura dell'app.
👆 Su richiesta:
nessun annuncio automatico: la tua pagina ne mostra uno con un tocco tramite WebToApk.showInterstitialAd().
⚠️ Il tipo di annuncio è una scelta unica: interstiziale OPPURE con ricompensa, non entrambi.
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!
...8Annunci con ricompensa#
Gli annunci con ricompensa sono annunci video a schermo intero che gli utenti guardano in cambio di un premio. Rendono più dei banner o degli annunci interstiziali.
🎁 Come attivarlo (passaggio 3, Ad Control «Automatic»):
- Attiva «Full Screen Ad»
- Ad Type: scegli «Rewarded Ad»
- Inserisci il tuo Rewarded Ad Unit ID (o lascia vuoto per usare annunci di prova)
- Scegli la modalità di attivazione:
🔄 Dopo le navigazioni (predefinito):
come per l'interstiziale, l'annuncio compare dopo ogni N caricamenti di pagina. «Show ad after every N page navigations» imposta N. Il valore predefinito è 4.
📱 App Open:
il video con ricompensa compare una volta sola, alla prima apertura dell'app dopo la schermata iniziale.
👆 Su richiesta:
nessun annuncio automatico: il pulsante «guarda l'annuncio per guadagnare» della tua pagina chiama WebToApk.showRewardedAd().
💡 Quante navigazioni?
Meno = più annunci (più entrate ma esperienza peggiore). Di più = meno annunci (esperienza migliore ma meno entrate). Consigliato: 3-5.
⚠️ Norme di Google: gli annunci con ricompensa richiedono il consenso dell'utente. Nelle modalità After Navigations e App Open la tua app mostra prima una richiesta «Guardare un annuncio?» con un pulsante «No grazie»; l'annuncio parte solo se l'utente accetta.
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)9Consenso e informativa sulla privacy (obbligatori)#
⚠️ AdMob richiede un meccanismo di consenso per gli utenti nello SEE, nel Regno Unito, in Svizzera e negli stati USA.
Questo viene gestito automaticamente dall'app generata tramite la User Messaging Platform (UMP) di Google. L'app:
- Mostra una finestra di consenso agli utenti di SEE/Regno Unito/Svizzera prima di visualizzare gli annunci
- Mostra una finestra di rifiuto agli utenti negli stati USA interessati
- Richiedi gli annunci solo dopo aver ottenuto il consenso
Cosa devi fare TU:
- Nella console AdMob → Privacy e messaggistica → Crea un messaggio sulle normative europee
- Nella console AdMob → Privacy e messaggistica → Crea un messaggio sulle normative degli stati USA
- Imposta l'URL dell'informativa sulla privacy nel generatore (passaggio 3 o 4)
- Assicurati che la tua informativa sulla privacy menzioni la pubblicità AdMob
⚠️ Senza questa configurazione, AdMob potrebbe mostrare un avviso sulle norme: «Consent requirement: No CMP»
10Processo di revisione degli annunci#
Dopo aver pubblicato la tua app:
- AdMob esaminerà la tua app (di solito richiede 24-48 ore)
- All'inizio vedrai gli annunci di prova
- Una volta approvata, inizieranno a comparire gli annunci reali
- Mantieni i contenuti della tua app conformi alle norme
11Attiva i pagamenti#
Per ricevere le entrate pubblicitarie:
- Vai su «Payments» nella dashboard di AdMob
- Aggiungi un metodo di pagamento (conto bancario o altre opzioni)
- Verifica il tuo indirizzo
- Imposta le informazioni fiscali
- I pagamenti avvengono ogni mese dopo aver raggiunto la soglia di 100 $
12Buone pratiche#
✅ Posizione del banner: il banner in basso è meno invadente e offre un'esperienza utente migliore
✅ Interstiziale/con ricompensa: scegline uno, non entrambi. Gli annunci con ricompensa rendono di più ma richiedono il coinvolgimento dell'utente
✅ Numero di azioni: inizia con 4-5 navigazioni tra un annuncio e l'altro. Troppo frequenti = recensioni negative
✅ Prova prima: testa sempre con unità pubblicitarie di prova durante lo sviluppo
✅ Monitora le prestazioni: controlla regolarmente la dashboard di AdMob per guadagni e metriche
⚠️ Non cliccare: non cliccare mai sui tuoi annunci, viola le norme di AdMob
⚠️ Contenuti di qualità: assicurati che la tua app offra valore e rispetti le norme di AdMob
💡 Consiglio da esperti: combina banner (sempre visibile) + interstiziale o con ricompensa (periodico) per il massimo delle entrate
13Risoluzione dei problemi#
Problemi comuni e soluzioni:
- Nessun annuncio visualizzato: controlla di usare l'Ad Unit ID corretto (non l'App ID)
- Gli annunci di prova funzionano ma quelli reali no: attendi il completamento della revisione di AdMob
- Richiesta dell'annuncio non riuscita: verifica la connessione a internet e lo stato dell'account AdMob
- Account sospeso: leggi le norme di AdMob e presenta ricorso se necessario
14Annunci controllati dallo sviluppatore: posizioni tu ogni annuncio#
Scarica la pagina demo completa qui sotto (Coin Runner): un banner nel layout, un interstiziale tra i livelli, un pulsante «Guarda l'annuncio per ottenere 50 monete», un rettangolo 300×250, l'interruttore app-open e un registro in tempo reale di ogni risultato. Comprimila in ZIP, caricala come Offline ZIP, scegli Developer-controlled con gli ID di prova precompilati, crea l'app: ogni pulsante si spiega da solo.
Le opzioni qui sopra sono la modalità Automatica: l'app mostra per te il banner e l'annuncio a pagina intera o con ricompensa. Se vuoi tutti i formati AdMob e la libertà di collocare ciascuno esattamente dove serve alla tua pagina, scegli invece «Ad Control → Developer-controlled» nel passaggio 3.
In questa modalità NIENTE è automatico. Inserisci un ID unità pubblicitaria per ogni formato che usi - banner, rettangolo medio (300×250), interstiziale, con ricompensa, interstiziale con ricompensa, app-open - e lascia vuoti gli altri. La tua pagina gestisce poi tutto tramite window.AppMintAds:
- AppMintAds.banner.attach('#slot', {size:'banner'|'medium_rectangle'}) - un banner posizionato sopra l'elemento che indichi, in una scheda, tra gli elementi di un elenco, ovunque. Segue l'elemento durante lo scorrimento; detach() lo rimuove. Fino a due alla volta.
- await AppMintAds.load('interstitial') → {ok:true} oppure {ok:false, code:'no_fill'|'network'|'invalid_unit'|'consent'|'ad_free'|'disabled'}
- await AppMintAds.show('rewarded') → {shown:true, earned:true, reward:{type,amount}} oppure {shown:false, reason}
- AppMintAds.isReady('interstitial') - attiva il tuo pulsante in base a questo
- AppMintAds.appOpen.setEnabled(false) - sospendi l'annuncio app-open mentre l'utente è nel mezzo di un'attività
AppMintAds esiste solo nell'app installata: rileva sempre la funzione (if (window.AppMintAds) …) così la pagina funziona anche in un browser. Le regole di Google valgono comunque e l'app le applica: un annuncio con ricompensa parte solo dal tocco dell'utente (il tuo pulsante «Guarda l'annuncio» È il consenso), gli interstiziali mantengono un intervallo di 60 secondi e non mettere mai un annuncio sopra un'azione fondamentale.
// 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; });
Nell'app, il pulsante di questo passaggio li salva sul tuo telefono. Qui sono download diretti.
admob-developer-demo.html15Eventi di stato degli annunci: scopri cosa è successo a ogni richiesta#
Ogni annuncio controllato dallo sviluppatore riporta il suo intero ciclo di vita su UN solo evento, appmint:ad, così puoi registrare gli annunci caricati, reagire agli errori e gestire la tua interfaccia:
{ 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, più rewarded (è stato ottenuto un premio) e show_failed
- code (in caso di failed): no_fill | network | invalid_unit | internal - adCode è il numero di AdMob, message il suo testo
- slot: quale slot banner, per banner/mrec
Le promise ti danno la stessa risposta a ogni chiamata; l'evento ti dà tutto, compresi gli annunci per cui non hai chiamato show() (un annuncio app-open, l'aggiornamento di un banner). Nella modalità Automatica AppMintAds esiste ancora ma risponde con il codice 'automatic_mode': usa le chiamate WebToApk.showInterstitialAd()/showRewardedAd() e gli eventi appmint:reward / appmint:ad-closed / appmint:ad-unavailable di quella modalità.
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, ... } }