Chapitre 17.2 — AdMob : la publicité, proprement
Où on en est : la grille a parlé — SI votre app a le volume, voici la pub sans les pièges : le SDK, les trois formats, le consentement européen, et les politiques qui font bannir.
⏱️ TL;DR — react-native-google-mobile-ads (le standard, config plugin fourni — dev build requis, évidemment). Trois formats par rendement : rewarded (volontaire, le mieux payé, le plus digne), interstitiel (transitions naturelles UNIQUEMENT), bannière (le fond de sauce). Le consentement UMP (RGPD) est obligatoire en Europe AVANT toute pub. Et les IDs de TEST pendant tout le développement — cliquer ses propres vraies pubs = compte AdMob banni.
🎯 Objectifs
- Installer le SDK et comprendre son coût (Data Safety, poids, dev build).
- Implémenter les trois formats aux bons endroits (l’exemple : un quiz type Drill public).
- Câbler le consentement UMP correctement (l’Europe n’est pas optionnelle).
- Connaître les politiques dont la violation coûte le compte.
L’installation (et ses coûts cachés)
npx expo install react-native-google-mobile-ads// app.config.ts
plugins: [
['react-native-google-mobile-ads', {
androidAppId: 'ca-app-pub-XXXXXXXX~YYYYYYYY', // l'ID d'APP (côté console AdMob)
}],
],Les coûts à accepter en connaissance : un compte AdMob (lié à votre compte Google, avec validation), dev build requis (module natif — ch. 11.1), ~2-4 Mo d’APK en plus, et la mise à jour Data Safety (identifiants publicitaires partagés — l’exercice 3 du ch. 13.3 devient réalité, adieu le badge « aucune donnée »).
Pendant TOUT le développement : les IDs de test fournis par Google
(TestIds.BANNER, etc.) — cliquer de vraies pubs sur votre propre app est le motif de
bannissement AdMob le plus courant, et le ban est quasi définitif.
Les trois formats, par ordre de dignité ET de rendement
1. Rewarded (le meilleur des deux mondes). L’utilisateur CHOISIT de regarder 30 s contre une récompense. eCPM le plus haut (10-40 €), zéro intrusion — c’est le format qui a réconcilié les joueurs avec la pub :
import { RewardedAd, RewardedAdEventType, TestIds } from 'react-native-google-mobile-ads'
const rewarded = RewardedAd.createForAdRequest(TestIds.REWARDED)
// Dans un quiz public type Drill : « 🎁 Regarder une pub → un indice 50/50 »
rewarded.addAdEventListener(RewardedAdEventType.EARNED_REWARD, () => {
grantHint() // la récompense, APRÈS visionnage complet
})
rewarded.load()
// … au tap sur le bouton (si loaded) : rewarded.show()2. Interstitiel (le plein écran des transitions). Entre deux sessions, JAMAIS pendant l’action. La règle de fréquence qui garde les avis : au plus un toutes les 2-3 sessions, jamais dans les 30 premières secondes de l’app, jamais après un échec (la double peine).
3. Bannière (le fond de sauce). Un composant dans le layout — hors zone de jeu (en bas de l’écran d’accueil/historique, pas dans le quiz). eCPM faible mais constant :
import { BannerAd, BannerAdSize, TestIds } from 'react-native-google-mobile-ads'
<BannerAd unitId={TestIds.BANNER} size={BannerAdSize.ANCHORED_ADAPTIVE_BANNER} />Le consentement UMP — non négociable en Europe
Le RGPD impose le consentement AVANT tout traitement publicitaire. Google fournit la UMP (User Messaging Platform) intégrée au SDK : le formulaire se configure dans la console AdMob (messages RGPD), et le code le déclenche au premier lancement :
import mobileAds, { AdsConsent } from 'react-native-google-mobile-ads'
async function initAds() {
const consent = await AdsConsent.requestInfoUpdate()
if (consent.isConsentFormAvailable) await AdsConsent.loadAndShowConsentFormIfRequired()
await mobileAds().initialize() // APRÈS le consentement — l'ordre compte
}L’ordre est le point d’audit : initialiser la pub avant le consentement = violation. Et l’utilisateur qui refuse voit des pubs non personnalisées (eCPM moindre, mais légal et fonctionnel) — prévoir aussi le ré-accès au formulaire dans les réglages (obligation RGPD).
Les politiques qui coûtent le compte
- Auto-clics et incitation au clic (« cliquez pour me soutenir ! ») : ban.
- Placements trompeurs : pub collée à un bouton, qui apparaît sous le doigt, plein écran non fermable : ban ou serving limité.
- Trafic invalide : vos propres tests sur de vrais IDs (d’où TestIds), les échanges de clics : ban.
- Contenu enfants (ch. 13.3) : cibler les familles restreint drastiquement la pub personnalisée.
La console AdMob a un onglet « Centre de règlement » — le vérifier fait partie de la routine du ch. 13.6 dès que la pub est en prod.
⚠️ Piège — Le « serving limité » silencieux : AdMob restreint les nouvelles apps et les comptes récents pendant des semaines (protection anti-fraude) — des fill rates à 20-50 % au début sont NORMAUX, pas un bug de votre intégration. Ne « déboguez » pas ce qui est une quarantaine : vérifiez l’intégration avec les TestIds (fill rate 100 %), puis patientez en prod.
💡 Pour un dev Next.js — Le parallèle AdSense est direct (mêmes politiques, même consentement, même compte Google souvent) — la différence mobile : le SDK est DANS le binaire (poids, Data Safety, dev build) là où le web charge un script. Et le rewarded n’a pas de vrai équivalent web — c’est LE format mobile par excellence, le seul où tout le monde gagne.
✏️ Exercices
1. Sur le Drill public hypothétique : placez les trois formats sur les écrans existants du cours en respectant chaque règle du chapitre — et justifiez chaque NON-placement.
✅ Solution
Bannière : bas de l’Historique et de l’accueil (zones de consultation) — PAS sur l’écran de quiz (zone d’action, et un mistap pendant le timer serait rageant). Interstitiel : après l’écran résultat, une session sur trois, jamais après un score < 30 % (la double peine). Rewarded : le bouton « indice 50/50 » pendant une partie (volontaire, récompense claire) et « rejouer les questions ratées » en fin de session. Le quiz lui-même reste sanctuarisé — la zone d’action est sacrée.
2. Implémentez le flux UMP complet : premier lancement (formulaire), refus (pubs non perso), et le ré-accès dans les réglages.
✅ Solution
initAds() du chapitre dans le layout racine (avant le premier écran à pub) ; le statut de
consentement se lit dans la réponse (personnalisé/non personnalisé — le SDK gère le serving
adapté automatiquement). Réglages : une ligne « Gérer le consentement publicitaire » →
AdsConsent.showForm() (re-présente le formulaire). Tester avec la géographie de debug UMP
(simuler l’UE depuis la console) — le consentement se teste, comme le reste.
3. Reprenez le calcul de l’exercice 3 du ch. 17.1 avec le mix réel : bannières (2 écrans), interstitiel 1/3 sessions, rewarded pris par 10 % des joueurs. Le verdict change-t-il ?
✅ Solution
300 DAU : bannières ~0,9 €/j ; interstitiels : 300×2 sessions×⅓ = 200 affichages × eCPM 5 € = ~1 €/j ; rewarded : 30 prises × eCPM 25 € = ~0,75 €/j. Total ~2,6 €/j ≈ 80 €/mois — comparable à l’IAP seul, mais au prix de l’UX, du SDK, du Data Safety ET du travail d’intégration. Le verdict s’affine : à cette échelle, pub SEULE non ; le combo IAP-retire-les-pubs + rewarded optionnel est le seul mix défendable. Les maths, toujours les maths.
🧠 Quiz
1. Classez les trois formats par eCPM et par dignité UX.
Réponse
Rewarded (10-40 €, volontaire — le meilleur des deux classements), interstitiel (3-10 €, acceptable aux transitions), bannière (0,5-2 €, discrète mais constante).
2. Quel est l’ordre obligatoire au démarrage d’une app avec pub en Europe ?
Réponse
Consentement UMP d’abord (requestInfoUpdate + formulaire si requis), puis
mobileAds().initialize(). L’inverse = violation RGPD.
3. Pourquoi les TestIds pendant tout le développement ?
Réponse
Cliquer/afficher ses propres VRAIES pubs = trafic invalide = bannissement AdMob (quasi définitif). Les TestIds donnent un fill rate de 100 % pour développer sereinement.
4. Que voit un utilisateur européen qui refuse le consentement ?
Réponse
Des pubs non personnalisées (contextuelle, eCPM moindre) — l’app fonctionne, le refus est un droit, et le formulaire doit rester ré-accessible dans les réglages.
5. Qu’est-ce que le « serving limité » des débuts ?
Réponse
La quarantaine anti-fraude d’AdMob sur les nouvelles apps/comptes : fill rates bas pendant des semaines — normal, pas un bug d’intégration (que les TestIds permettent de vérifier).
👉 Chapitre suivant : 17.3 — IAP & RevenueCat — le Pro unlock et les abonnements, sans se noyer dans Play Billing.