# JavaScript SDK adconsent
Ten przewodnik opisuje osadzenie adconsent (`/cmp/v1/cmp.js`), blokowanie skryptów i iframe’ów do czasu zgody, Google Consent Mode v2, interfejsy IAB `__tcfapi` / `__gpp` oraz API JavaScript `window.cmp`.
## Instalacja (snippet)
**Snippet musi być pierwszym elementem w `<head>`.** Tagi obecne w HTML przed CMP przeglądarka ładuje od razu i nie da się ich już zablokować.
```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>
```
Wywołania sprzed załadowania `cmp.js` trafiają do kolejki `cmp.q`, na przykład `cmp.q.push(["show"])`.
Kraj odwiedzającego jest ustalany po stronie serwera. Aby przetestować inny kraj: `window.__CMP_BASE__.country = "US"` (tylko testy).
## Blokowanie ręczne
```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` : identyfikator vendora IAB z Global Vendor List.
- `data-cmp-custom` : klucz własnego vendora z panelu.
- `data-cmp-purposes` : identyfikatory celów IAB; wszystkie muszą mieć zgodę.
## API (`window.cmp`)
| Metoda | Opis |
| --- | --- |
| `consentAll()` | Akceptuje wszystkie cele i vendorów |
| `declineAll()` | Odrzuca wszystko / opt-out |
| `show()` / `open()` | Ponownie otwiera baner lub ustawienia |
| `getConsent()` | Bieżący stan |
| `hasConsent(vendorIdOrCustomKey)` | `cmp.hasConsent(755)` or `cmp.hasConsent("hotjar")` |
| `on(event, cb)` / `off(event, cb)` | Events: `ready`, `consent`, `shown`, `hidden` |
| `setLanguage(lang)` | Zmienia język (na przykład `"pl"`) |
| `console()` / `console(false)` | Otwiera / zamyka konsolę debugowania |
Ponowne otwarcie wymagane przez politykę TCF: umieść link na każdej stronie, na przykład `<a href="#" data-adconsent-open>Ustawienia cookie</a>`.
## Konsola debugowania (cmpconsole)
Otwórz stronę z `?cmpconsole` albo `#cmpconsole` albo wywołaj `cmp.console()`. Zamknij przez ✕, `cmp.console(false)` albo `?cmpconsole=0`.
Pełna instrukcja: /docs/cmpconsole
## `__tcfapi` / `__gpp`
- UE/EOG, Wielka Brytania i Szwajcaria: `__tcfapi` według API CMP IAB TCF v2.3. Synchroniczny stub od razu udostępnia `__tcfapi` i `iframe[name=__tcfapiLocator]`.
- Środowisko testowe: do rejestracji w IAB Europe adconsent używa testowego identyfikatora CMP `999`. To jeszcze nie CMP zarejestrowana w IAB Europe.
- USA (`gpp_us`): `__gpp` z amerykańską sekcją krajową (opt-out). Ustawione Global Privacy Control jest traktowane jako opt-out.
## Google Consent Mode v2
Domyślnie `denied` (z `wait_for_update`) w snippecie. Po decyzji adconsent wysyła `gtag('consent','update',…)` według mapowania property.
## Reżimy
| Reżim | Kraje | Model |
| --- | --- | --- |
| `tcf_eu` | UE/EOG | Opt-in (IAB TCF) |
| `tcf_uk` | Wielka Brytania | Opt-in (IAB TCF) |
| `ch` | Szwajcaria | Opt-in (IAB TCF) |
| `gpp_us` | USA | Opt-out (GPP) |
| `notice_only` / `none` | pozostałe kraje | konfigurowalne per property |
## Cookie declaration
Publiczna lista cookie: `https://TWOJA-DOMENA-CMP/c/PROPERTY_KEY/cookie-declaration`
## Rozwiązywanie problemów
1. Brak banera → czy konfiguracja jest opublikowana? Czy `config.json` zwraca 200? Konsola (`?cmpconsole`) pokazuje błędy w dzienniku.
2. Skrypty startują przed zgodą → czy snippet jest pierwszy w `<head>`?
3. Kolejka nie działa → czy `window.cmp = window.cmp || { q: [] }` jest przed `cmp.js`?
4. Google Consent Mode zostaje `denied` → czy `gtag` / `dataLayer` są zdefiniowane przed CMP?
5. Test innego kraju → strona demo property z `?country=US`.
Dokumentacja SDK
Dalsze instrukcje: Konsola debugowania (cmpconsole)