Kimlik, Onay ve Kuyruk

Ziyaretçi, oturum, onay ve çevrimdışı kuyruk

Ziyaretçi ve oturum kimliği, giriş yapan kullanıcının bağlanması, onay ve çevrimdışı kuyruk. Bunların hepsi init() sırasında kurulur ve ekran kodunuzdan bağımsız çalışır.

Ziyaretçi ve oturum

  • Ziyaretçi kimliği ilk açılışta üretilir ve storage'a yazılır. storage vermezseniz her açılış yeni bir ziyaretçidir: dönen ziyaretçi önerileri (recently_viewed, user_history) boş kalır ve çevrimdışı olaylar uygulama kapanınca kaybolur. debug: true iken bu durum günlüğe düşer.
  • Oturum 30 dakikalık hareketsizlikle biter (SESSION_TIMEOUT_MS); webdeki pencere ile aynıdır. Uygulama arka plana alınıp 30 dakikadan sonra döndürülürse ilk olayda yeni oturum açılır. Süresi dolmuş oturum devralınmaz, iki ziyaret tek yolculuğa karışmaz.

Kimliklendirme

Kullanıcı giriş yaptığında çağırın:

identify(siteUserId: string, traits?: Record<string, unknown>): Promise<void>
logout(): Promise<void>

await selwise.identify('MUSTERI-1001', {
  email: 'musteri@example.com',   // ayrı bir alana alınır
  memberTier: 'gold',             // geri kalanı özellik olarak saklanır
});

identify iki şey yapar: kimliği yerelde saklar (bundan sonraki her olay ve sipariş taşır) ve sunucuya bildirir; sunucu giriş öncesi toplanan anonim geçmişi bu müşteriyle birleştirir. İkinci adım olmadan kişi segmentlerde, müşteri profilinde ve yaşam boyu değer hesabında hiç görünmezdi.

  • Kural: boş olmayan bir metin, en çok 64 karakter, kararlı bir değer. Web ve mobilde aynı kimliği gönderin; aynı müşteri tek profilde birleşir. Ayrıntı: Kullanıcı Kimliklendirme.
  • SDK false, true, null, undefined metinlerini kimlik saymaz (boolean'ın metne çevrilmiş hâlidir) ve sayıyı metne çevirir.
  • identify asla hata fırlatmaz: ağ çağrısı başarısız olursa yerel kimlik yine de ayarlıdır. Bu yüzden sunucunun reddettiği bir çağrı sessiz kalır; debug: true ile Identify call failed satırını arayın. Sunucu 64 karakteri aşan kimliği ve geçersiz bir email değerini 400 ile reddeder.
  • Kullanıcı değiştiğinde ya da birleşme olduğunda ayrıca bir identify olayı yazılır; özellikler bu olaya girmez. Aynı kişi için tekrar çağırmak yeni olay üretmez.
  • logout() kuyruğu gönderir, giriş yapmış kullanıcıyı siler, yeni oturum açar ve yolculuk kimliğini sıfırlar; ziyaretçi kimliği aynı kalır. Cihaz aynı cihazdır ama iki kullanıcının davranışı tek oturumda birleşmemelidir.

Onay

Sunucu olay partisini onay özeti olmadan reddeder, bu yüzden SDK her partiye bir özet ekler. Varsayılan en dar dürüst iddiadır:

{ granted: true, categories: { necessary: true, analytics: false, marketing: false, preferences: false }, source: 'sdk-default' }

Dikkat: varsayılanda granted: true olduğundan takip açık başlar. Onay yönetim aracınız (CMP) karar verene kadar hiçbir şey göndermek istemiyorsanız:

await selwise.init({ /* ... */ consent: { granted: false } });

// CMP karar verince
await selwise.setConsent({ granted: true, categories: { analytics: true, marketing: false } });
const current = selwise.getConsent();   // ConsentSnapshot
  • Onay gönderim anında değerlendirilir, olay üretim anında değil. Karardan önce gezilen ekranlar onay verilirse geriye dönük gönderilir; verilmezse kuyrukta tutulur, silinmez. Kuyruk kalıcıysa bekleyen olaylar depoda yaşar. Kullanıcı izlemeyi kesin olarak reddettiyse bu birikimi istemiyorsanız onay kararı gelene kadar SDK'yı başlatmayın.
  • granted: true iken necessary her zaman true yazılır. SDK yalnızca granted alanını uygular; categories değerleri sunucuya taşınır ama SDK kategori bazında olay engellemez.
  • Karar storage'a yazılır ve sonraki açılışta okunur; init()'e açıkça consent verirseniz o açılış için disktekinin yerine geçer.
  • Sunucu onayı verilmemiş partiyi 200 yanıtıyla ama success: false ile düşürür; SDK yalnızca onay verildiyse gönderdiği için bunu normalde görmezsiniz.

Web tarafındaki onay modeli için: Onay Yönetimi.

Çevrimdışı kuyruk

track() olayı bir kuyruğa alır; kuyruk storage'a yazılır ve bir sonraki init() çağrısında gönderilir.

DavranışDeğer
Gönderim tetikleriKuyruk batchSize'a ulaşınca, her flushIntervalMs'te, flush() çağrısında, trackOrder öncesinde, setConsent onay verdikten sonra. Değerler: Kurulum
PartiBir parti hep tek ekranın olaylarını taşır; ekran değişirse sıradaki parti ayrı istektir. Bir flush() en çok 20 istek atar, kalanı sonrakine kalır
Boyut sınırımaxQueueSize; dolunca en eski olaylar silinir
Yeniden denemeAğ hatası, 5xx, 408 ve 429 yeniden denenir; olay sunucudaki yeniden deneme ayarına göre (SDK varsayılanı 5, kanal yapılandırması gelince 3) denendikten sonra silinir
Kalıcı reddedilen408 ve 429 dışındaki 4xx yanıtı kalıcı sayılır; parti silinir, aksi hâlde reddedilen bir olay arkasındaki herkesi bloke ederdi
KalıcılıkKanalın çevrimdışı kalıcılık ayarı kapatılırsa (panelde Offline Persistence) depodaki kopya da silinir

flush() "gönderdiklerimin gittiğinden emin ol" anlamına gelir: uçuştaki bir gönderimi bekler, sonra kalanı da gönderir. Arka plana geçerken çağırın (Kurulum). destroy() zamanlayıcıyı durdurur, son kez gönderir ve yazmaları bitirir; testlerde ve uygulama kapanırken kullanılır.

Olay endpoint'i hatayı gizleyebilir

Olay gönderimi anahtarsızdır ve kanal anahtarıyla tanınır. Kanal anahtarı bilinmiyorsa ya da kanal doğrulanmamışsa sunucu 200 ile success: false döner; SDK bunu başarı sayıp partiyi siler. Kanal anahtarından şüphelendiğinizde debug: true ile Could not load /config (404) satırına bakın. Ayrıntı: Sorun Giderme.

Depoda tutulan anahtarlar

Anahtarİçerik
selwise_vidZiyaretçi kimliği
selwise_sessionOturum kimliği ve son hareket zamanı
selwise_suidGiriş yapmış kullanıcı kimliği
selwise_queueGönderilmemiş olaylar
selwise_consentSon onay özeti
selwise_dismissedKapatılan yüzeyler
selwise_frequency_capsSıklık sınırı sayaçları
selwise_goal_reachedOturumda bildirilen hedef adımları

Sepet kalıcı değildir (bkz. Sepet ve Dinamik İçerik). Depo olarak getItem, setItem ve removeItem sözü veren herhangi bir nesne çalışır; AsyncStorage olduğu gibi uyar, MMKV için üç satırlık bir uyarlayıcı yeter. Depo hata fırlatırsa SDK bunu "değer yok" sayar ve çökmez.

Sırada ne var

Son güncelleme: 10 Ekim 2026