Ana içeriğe geç

Consent SDK — Entegrasyon Dokümanı

Bu paket, Consent SDK'nın entegrasyonu için 3. parti geliştiricilere özel basitleştirilmiş sözleşme setidir.

İçerik, SDK'ın çalışması için sizi ilgilendiren kısımları (endpoint'ler, istek/yanıt formatları, karar mantığı) sade ve net dille açıklar. Geliştirme tarafındaki iç detaylar, arşiv notları ve doğrulama araçları bu pakette yer almaz — yalnızca entegrasyon için gereken sözleşme taşıyan.

Okuma sırası: Bu dosya → 00-auth01-config02-postconsent. Üç sözleşme, sırayla okunduğunda uygulamanın açılışından onay kaydına kadar olan kapalı döngüyü birlikte tamamlar.


1. Bu SDK ne yapar?

SDK, mobil uygulamanızda (veya web tarafında) kullanıcıdan açık rıza (açık izin) alır; rızayı sunucuya kaydeder ve onayın sonucunu uygulamanızdaki ölçüm/analitik ve reklam etiketlerine (tag) uygular.

Tek bir akış üzerinde çalışır. Acaba "şu an ne yapmalıyım?" sorusu, her açılışta sunucudan gelen karar bloğuyla çözülür:

(uygulama açılıyor)


┌─────────────────────────────┐
│ 00 · AUTH │
│ "Kimim, neyi biliyorum?" │
│ Kimlik + cihaz durumu │
│ ─────────────────────────► │
│ Yanıt: versiyonlar + token │
│ + decision (karar) │
└──────────────┬──────────────┘
│ decision.updateRequired ?

┌─────────────────────────────┐
│ 01 · GET /config │
│ "Güncel ayarlar neler?" │
│ Token ile tam config çek │
│ ─────────────────────────► │
│ Yanıt: banner/manager │
│ + tüm grup & metinler │
└──────────────┬──────────────┘
│ Kullanıcı ekranda seçim yapar

┌─────────────────────────────┐
│ 02 · POST_CONSENT │
│ "Kullanıcı bunları seçti" │
│ Onay eylemini kaydet │
│ ─────────────────────────► │
│ Yanıt: kayıt + yeni durum │
└──────────────┬──────────────┘
│ Onay sonucunu etiketlere uygula

[ Bir sonraki açılış: 00 AUTH ]
└──────────────────► DÖNGÜ KAPALI

Bu üç adım birbirine zincirlidir: AUTH'ın verdiği token config adımında kullanılır; config adımı üretilen onay, POST_CONSENT'te kaydedilir; POST_CONSENT'in döndürdüğü cihaz durumu (localState) bir sonraki açılıştaki AUTH'a geri beslenir. Hiçbir adım bir öncekinin çıktısını kaybetmez.


2. Üç sözleşme — Ne işe yarar?

AdımDosyaNe yaparNe zaman çalışır
0000-auth.mdUygulama kimliğini doğrular, güncel versiyonları ve bir token döndürür; açılışta ne yapılacağına dair karar verirHer uygulama açılışında (her seferinde)
0101-config.mdAUTH'un verdiği token ile tam config'i (tema, ekranlar, gruplar, metinler) sunucudan çekerAUTH'un kararında config yenileme gerekli olduğunda
0202-postconsent.mdKullanıcının onay seçimini (accept_all / reject_all / modify) sunucuya kaydeder; onayın etiketlere uygulanmasını tanımlarKullanıcı onay ekranında bir seçim yaptığında

Kritik tasarım kararları (bunları bilmek entegrasyonu belirler):

  • İki aşamalı açılış: AUTH hafif tutulur — yalnızca versiyonlar + token + karar döner. Tam config (büyük gövde) yalnızca değiştiğinde çekilir. İçerik değişmiyorsa (%95 açılış) config hiç transfer edilmez → açılış hızlı, veri ve gecikme tasarrufu.
  • Token = oturum kimliği: AUTH bir token üretir. Bu token, tokenExpiresIn (varsayılan 300 sn = 5 dk) penceresi boyunca hem config okumada hem onay kaydında geçerlidir. Okuma (config) token'ı tüketmez; yalnızca onay kaydı (POST_CONSENT) oturumu kapatır/tüketir. Süre dolunca token ölür → yeniden AUTH yapılır.
  • Retrigger (tekrar sorma) geri beslemesi: Cihazda saklanan localState her açılışta gönderilir. Sunucu, içerik veya şema değiştiyse reprompt üretir; yalnız görsel (uiVersion) değiştiyse reprompt yok (sadece görünüm yenilenir).
  • Onay grup seviyesindedir: Kullanıcı onayı 4 kategori-gruba aittir: essential (zorunlu), functionality (işlevsellik), targeting (hedefleme/reklam), tracking (analitik). Bir grup onaylanınca/onaylanmayınca, o gruba bağlı etiketlerin tümü birlikte açılır/kapanır.
  • Durum yalnız iki değer: granted (açık) veya denied (kapalı). Ara durum yoktur.

3. Hızlı Başlangıç

Entegrasyonu adım adım özetler; detay her dosyanın içinde.

  1. 00-auth.md'yi oku. Her açılışta POST …/auth isteğini nasıl kuracağını (kimlik + localState), HMAC imza/güvenlik modelini ve yanıtta gelen decision'ı nasıl değerlendireceğini öğren.
  2. 01-config.md'yi oku. decision.updateRequired === true ise token ile POST …/config isteği atıp tam config'yi parsel ederek onay ekranını (banner/manager/detail) kura. Token'ın burada tüketilmediğini (tokenConsumed: false) bil → aynı token ile onaya geçeceksin.
  3. 02-postconsent.md'yi oku. Kullanıcı bir seçim yaptığında POST …/consent isteğini kur. Yanıtta gelen onay haritasını etiketlerine uygulayacak dağıtım (mapping) mantığını ve cihaz durumunu (localState) önbelleğe yazıp döngüyü kapalı tutacağını öğren.

Her adımda offline/hata davranışı da belgelenmiştir: bağlantı yoksa kullanıcı boşta bırakılmaz (bundled config + arka plan denemesi).


4. Ortak Kurallar

Üç sözleşmenin tamamında geçerli olan, bilmek için tek yerde topladığımız kurallar:

KuralAçıklama
TransportÜç çağrı da POST'tur. {{SDK_BASE_URL}} + path (/v2/consent/{consentId}/…). Gövde application/json (UTF-8).
Neden POST (GET değil)? Tutarlı tek transport + ara katmanlarda (proxy/CDN) önbellekleme riski yok. Adımlardaki "GET /config" okuma semantiğidir, HTTP fiilini değil.
TimeoutHer istekte 15 sn.
camelCaseTüm alan adları camelCase.
Hata envelope'uHatalarda ortak gövde döner: { success, code, message, retryable, requestId }. message teşhis metnidir, UI'da gösterilmez (kullanıcıya gösterilecek metin config'in localization bloğundan gelir). Her sözleşmenin kendi hata kodu tablosu vardır.
KimlikconsentId hem path'te hem gövdededir; sunucu path ↔ gövde ↔ token üçlüsünü çapraz doğrular.

5. Onay → Etiket (Analytics/Reklam) Dağıtımı

Onayın gerçek etkisi, kullanıcı tercihinin uygulamanızdaki etiketlere (GA4, Google Ads, Meta Pixel vb.) uygulanmasıdır. Bu dağıtımın sorumluluğu SDK/entegrasyon tarafındadır; sunucu yalnız grup kimliği ve son durumunu döndürür.

  • Config'deki her grup, bir consentKeys[] listesi taşır → bu key'ler etiketlerinizi temsil eder.
  • Kullanıcı bir grubu açınca/kapayınca, SDK o grubun tüm consentKey'lerini birlikte granted/denied yapar ve etiketlere iletir.
  • essential (→ security_storage) her zaman granted'tir ve kullanıcı kapatamaz (kilitli).
  • Etiketlere iletim iki eşdeğer yoldan biriyle yapılır: GA4 gtag('consent', …) veya GTM dataLayer.push({ consent: … }). Seçim projenize aittir; mantık ikisinde de aynıdır.

Bu dağıtımın detayı, örnekleri ve security_storage'ın neden her zaman açık kaldığı 02-postconsent.md içinde anlatılmıştır (bölüm 6).


6. iOS Katmanı (ATT) — Kısa Not

iOS'ta reklam/hedefleme takibi, kullanıcının cookie/consent onayının yanında işletim sisteminin ATT (App Tracking Transparency) iznini de gerektirir. Yani targeting grubu için hem kullanıcı onayı hem sistem ATT authorized birlikte olmalıdır; ikisi AND ile birleşir.

Bu davranış, ana akışın (AUTH → config → onay) yan dallarıdır; onay sözleşmelerinin içine gömülü değildir. iOS tarafı detayı, ATT'nin dört durumluk modelini, ne zaman sistem prompt atanacağını ve sonuçların etiketlere nasıl yansıtılacağını 02-postconsent.md bölüm 7'de (kısaca) ve ihtiyacınız olduğunda ek referansta bulabilirsiniz. Android'de ATT karşılığı yoktur — bu katman devredışıdır (attention: null).


7. Paket İçeriği

Kılavuzlar (.md)

Dosyaİçerik
README.mdBu dosya — sistem haritası, kararlar, hızlı başlangıç, ortak kurallar
00-auth.mdAUTH sözleşmesi: akış, güvenlik (HMAC/imza), retrigger kararı, hata & offline
01-config.mdGET /config sözleşmesi: token ile config çekme, token yaşam döngüsü, hata & offline
02-postconsent.mdPOST_CONSENT sözleşmesi: onay eylemi, doğrulama, hata + onay→etiket dağıtımı + iOS ATT katmanı

Örnek Payload'lar (.json)

Her sözleşme için doldurulmuş, gerçekçi placeholder kimlikli istek/yanıt örnekleri. .md dosyalarındaki inline örneklerle birebir aynıdır; ayrıca .json dosya olarak da dahil edildi ki 3. party isterse doğrudan referans/request olarak kullanabilsin.

DosyaKarşılığı
00-auth.request.jsonİlk açılış isteği (placeholder kimlik + boş localState)
00-auth.response.jsonAUTH yanıtı (versiyonlar + token + decision)
01-config.request.jsonGET /config isteği (minimal gövde; token X-Consent-Token header'ında taşınır)
01-config.response.jsonGET /config yanıtı (envelope + tam config gövdesi)
02-postconsent.request.jsonOnay kaydı isteği (modify + karma consent map)
02-postconsent.response.jsonOnay yanıtı (consent map + localState)

Örneklerdeki kimlik değerleri (sk_live_…, ck_…, cfg_t_…, cr_…) placeholder'dır — üretimde kendi konsolunuzdan gelen karşılıkları kullanın.