# SDK JavaScript adconsent
Ce guide décrit l'intégration d'adconsent (`/cmp/v1/cmp.js`), le blocage des scripts et iframes jusqu'au consentement, Google Consent Mode v2, les interfaces IAB `__tcfapi` / `__gpp` et l'API JavaScript `window.cmp`.
## Installation (snippet)
**Le snippet doit être le premier élément dans `<head>`.** Les balises présentes dans le HTML avant la CMP sont chargées tout de suite par le navigateur et ne peuvent plus être bloquées.
```html
<script src="https://YOUR-CMP-DOMAIN/cmp/v1/stub.js"></script>
<script>
window.cmp = window.cmp || { q: [] };
window.__CMP_BASE__ = {
apiBase: "https://YOUR-CMP-DOMAIN",
propertyKey: "PROPERTY_PUBLIC_KEY"
};
window.dataLayer = window.dataLayer || [];
function gtag(){ dataLayer.push(arguments); }
gtag("consent", "default", {
ad_storage: "denied", ad_user_data: "denied", ad_personalization: "denied",
analytics_storage: "denied", functionality_storage: "denied",
personalization_storage: "denied", security_storage: "granted",
wait_for_update: 500
});
</script>
<script src="https://YOUR-CMP-DOMAIN/cmp/v1/cmp.js" async></script>
```
Les appels faits avant le chargement de `cmp.js` sont mis en file dans `cmp.q`, par exemple `cmp.q.push(["show"])`.
Le pays du visiteur est déterminé côté serveur. Pour tester un autre pays : `window.__CMP_BASE__.country = "US"` (tests uniquement).
## Blocage manuel
```html
<script type="text/plain" data-cmp-vendor="755" src="https://example.com/tag.js"></script>
<iframe data-cmp-src="https://www.youtube.com/embed/…" data-cmp-custom="youtube"></iframe>
```
- `data-cmp-vendor` : identifiant de vendor IAB issu de la Global Vendor List.
- `data-cmp-custom` : clé d'un vendor personnalisé dans l'admin.
- `data-cmp-purposes` : identifiants de finalités IAB ; toutes doivent être consenties.
## API (`window.cmp`)
| Méthode | Description |
| --- | --- |
| `consentAll()` | Accepter toutes les finalités et tous les vendors |
| `declineAll()` | Tout refuser / opt-out |
| `show()` / `open()` | Rouvrir la bannière ou les paramètres |
| `getConsent()` | État actuel |
| `hasConsent(vendorIdOrCustomKey)` | `cmp.hasConsent(755)` or `cmp.hasConsent("hotjar")` |
| `on(event, cb)` / `off(event, cb)` | Events: `ready`, `consent`, `shown`, `hidden` |
| `setLanguage(lang)` | Changer de langue (par exemple `"fr"`) |
| `console()` / `console(false)` | Ouvrir / fermer la console de débogage |
Réouverture exigée par la politique TCF : placez un lien sur chaque page, par exemple `<a href="#" data-adconsent-open>Paramètres des cookies</a>`.
## Console de débogage (cmpconsole)
Ouvrez une page avec `?cmpconsole` ou `#cmpconsole`, ou appelez `cmp.console()`. Fermez avec ✕, `cmp.console(false)` ou `?cmpconsole=0`.
Guide complet : /docs/cmpconsole
## `__tcfapi` / `__gpp`
- UE/EEE, Royaume-Uni et Suisse : `__tcfapi` selon l'API CMP IAB TCF v2.3. Le stub synchrone fournit tout de suite `__tcfapi` et `iframe[name=__tcfapiLocator]`.
- Environnement de test : jusqu'à l'enregistrement auprès de l'IAB Europe, adconsent utilise l'ID CMP de test `999`. Ce n'est pas encore une CMP enregistrée auprès de l'IAB Europe.
- États-Unis (`gpp_us`) : `__gpp` avec la section nationale US (opt-out). Un Global Privacy Control activé est traité comme un opt-out.
## Google Consent Mode v2
Valeur par défaut `denied` (avec `wait_for_update`) dans le snippet. Après la décision, adconsent envoie `gtag('consent','update',…)` selon le mapping de la property.
## Régimes
| Régime | Pays | Modèle |
| --- | --- | --- |
| `tcf_eu` | UE/EEE | Opt-in (IAB TCF) |
| `tcf_uk` | Royaume-Uni | Opt-in (IAB TCF) |
| `ch` | Suisse | Opt-in (IAB TCF) |
| `gpp_us` | États-Unis | Opt-out (GPP) |
| `notice_only` / `none` | autres pays | configurable par property |
## Cookie declaration
Liste publique des cookies : `https://VOTRE-DOMAINE-CMP/c/PROPERTY_KEY/cookie-declaration`
## Dépannage
1. Pas de bannière → une configuration est-elle publiée ? `config.json` répond-il 200 ? La console (`?cmpconsole`) montre les erreurs dans le journal.
2. Des scripts partent avant le consentement → le snippet est-il le premier dans `<head>` ?
3. La file ne s'exécute pas → `window.cmp = window.cmp || { q: [] }` est-il avant `cmp.js` ?
4. Google Consent Mode reste `denied` → `gtag` / `dataLayer` sont-ils définis avant la CMP ?
5. Tester un autre pays → page démo de la property avec `?country=US`.
Documentation SDK
Autres guides : Console de débogage (cmpconsole)