adconsent
IT

Documentazione SDK

Altre guide: Console di debug (cmpconsole)

# SDK JavaScript di adconsent

Questa guida descrive l'integrazione di adconsent (`/cmp/v1/cmp.js`), il blocco di script e iframe fino al consenso, Google Consent Mode v2, le interfacce IAB `__tcfapi` / `__gpp` e l'API JavaScript `window.cmp`.

## Installazione (snippet)

**Lo snippet deve essere il primo elemento in `<head>`.** I tag presenti nell'HTML prima della CMP vengono caricati subito dal browser e non possono più essere bloccati.

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

Le chiamate fatte prima del caricamento di `cmp.js` finiscono in coda in `cmp.q`, per esempio `cmp.q.push(["show"])`.

Il paese del visitatore è determinato lato server. Per provare un altro paese: `window.__CMP_BASE__.country = "US"` (solo test).

## Blocco manuale

```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` : identificativo vendor IAB dalla Global Vendor List.
- `data-cmp-custom` : chiave di un vendor personalizzato nell'admin.
- `data-cmp-purposes` : identificativi di finalità IAB; tutte devono avere il consenso.

## API (`window.cmp`)

| Metodo | Descrizione |
| --- | --- |
| `consentAll()` | Accettare tutte le finalità e i vendor |
| `declineAll()` | Rifiutare tutto / opt-out |
| `show()` / `open()` | Riaprire il banner o le impostazioni |
| `getConsent()` | Stato attuale |
| `hasConsent(vendorIdOrCustomKey)` | `cmp.hasConsent(755)` or `cmp.hasConsent("hotjar")` |
| `on(event, cb)` / `off(event, cb)` | Events: `ready`, `consent`, `shown`, `hidden` |
| `setLanguage(lang)` | Cambiare lingua (per esempio `"it"`) |
| `console()` / `console(false)` | Aprire / chiudere la console di debug |

Riapertura richiesta dalla policy TCF: mettete un link su ogni pagina, per esempio `<a href="#" data-adconsent-open>Impostazioni cookie</a>`.

## Console di debug (cmpconsole)

Aprite una pagina con `?cmpconsole` o `#cmpconsole`, oppure chiamate `cmp.console()`. Chiudete con ✕, `cmp.console(false)` o `?cmpconsole=0`.

Guida completa: /docs/cmpconsole

## `__tcfapi` / `__gpp`

- UE/SEE, Regno Unito e Svizzera: `__tcfapi` secondo l'API CMP IAB TCF v2.3. Lo stub sincrono fornisce subito `__tcfapi` e `iframe[name=__tcfapiLocator]`.
- Ambiente di test: fino alla registrazione presso IAB Europe, adconsent usa l'ID CMP di test `999`. Non è ancora una CMP registrata presso IAB Europe.
- Stati Uniti (`gpp_us`): `__gpp` con la sezione nazionale USA (opt-out). Un Global Privacy Control attivo è trattato come opt-out.

## Google Consent Mode v2

Valore predefinito `denied` (con `wait_for_update`) nello snippet. Dopo la decisione adconsent invia `gtag('consent','update',…)` secondo la mappatura della property.

## Regimi

| Regime | Paesi | Modello |
| --- | --- | --- |
| `tcf_eu` | UE/EEE | Opt-in (IAB TCF) |
| `tcf_uk` | Regno Unito | Opt-in (IAB TCF) |
| `ch` | Svizzera | Opt-in (IAB TCF) |
| `gpp_us` | Stati Uniti | Opt-out (GPP) |
| `notice_only` / `none` | altri paesi | configurabile per property |

## Cookie declaration

Elenco pubblico dei cookie: `https://VOSTRO-DOMINIO-CMP/c/PROPERTY_KEY/cookie-declaration`

## Risoluzione dei problemi

1. Nessun banner → è pubblicata una configurazione? `config.json` risponde 200? La console (`?cmpconsole`) mostra gli errori nel registro.
2. Gli script partono prima del consenso → lo snippet è il primo in `<head>`?
3. La coda non parte → `window.cmp = window.cmp || { q: [] }` è prima di `cmp.js`?
4. Google Consent Mode resta `denied` → `gtag` / `dataLayer` sono definiti prima della CMP?
5. Provare un altro paese → pagina demo della property con `?country=US`.