adconsent
FR

Documentation SDK

Autres guides : Console de débogage (cmpconsole)

# 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`.