Kimlik: kullanıcılar, login ve tag'ler
Her abonelik bir kullanıcıya aittir. Aşağıdaki kurallar hangi kullanıcıya ait olduğuna ve bu arada tag'lere ne olduğuna karar verir. Bir kez, API'de (identity.ts) uygulanır; her SDK ve REST API aynı koddan geçer.
Varsayılan olarak anonim
externalId olmadan abone olan cihaz taze bir anonim kullanıcı (externalId: null) alır. Hedeflenebilir (segmentle, all ile ya da subscriptionIds ile), tag taşıyabilir; yalnızca tanıdığınız birine bağlı değildir.
login(externalId)
- İlk kez görülüyor → anonim kullanıcı yeniden adlandırılır. Login'den önce yazılan tag'ler yaşar.
- Zaten var (başka bir cihaz daha önce giriş yapmış) → cihaz taşınır; mevcut kullanıcının özellikleri kazanır, anonim tag'ler düşer.
- İki telefonlu kullanıcı tek kullanıcı satırı ve iki abonelikle biter — herhangi bir telefonda
setTagsikisini de günceller.
Cihazın zaten sahip olduğu id ile login çağırmak etkisizdir.
logout()
Cihaz yeni bir anonim kullanıcıya taşınır. Çıktığınız kullanıcı tag'lerini ve diğer cihazlarını korur; o cihazda tekrar giriş yapmak her şeyi olduğu gibi bulur.
Yayınlar (all, eşleşen segmentler) çıkış yapmış cihaza hâlâ ulaşır — bildirime açık bir cihazdır, yalnızca bir kişiye bağlı değildir. Amaç "bu cihaza bildirim gönderme" ise unsubscribe() kullanın.
Tag'ler
tags, 64 karakterlik anahtarlar ve 512 karakterlik string değerlerle düz bir string | number | boolean haritasıdır. Yazımlar merge'dür:
PATCH /v1/subscriptions/:id/user
{ "tags": { "plan": "premium", "streak": null } }
- verilen anahtarlar yazılır,
nulldeğer anahtarı siler (removeTags),- anılmayan anahtarlara dokunulmaz.
Bir SDK'nın hiçbir zaman tüm haritayı okuyup-değiştirip-yazması gerekmez. Tag'ler kullanıcıda yaşar, dolayısıyla yazım kullanıcının her cihazına ulaşır; her abonelik satırı, segmentler ve kişiselleştirme join gerektirmesin diye write-through bir kopya taşır.
language, timezone, country aynı şekilde çalışır (set = değiştir).
Sunucu tarafı kimlik
Sunucu anahtarıyla backend'iniz ortada cihaz olmadan kullanıcılar üzerinde çalışabilir:
# ilk cihazı kaydolmadan birine tag koy — kullanıcıyı oluşturur
curl -X PATCH https://push.example.com/v1/users/by-external-id/user_123 \
-H "Authorization: Bearer sk_live_…" -H "content-type: application/json" \
-d '{ "tags": { "plan": "premium" }, "language": "tr", "timezone": "Europe/Istanbul" }'
O kullanıcının telefonu sonra login("user_123") çağırdığında cihaz bu satırın altına taşınır ve tag'leri devralır.
Yetimler ve silme
- Son cihazı silinen, abonelikten çıkan ya da taşınan anonim kullanıcı silinir.
- Tanımlı kullanıcı cihazsız da yaşar.
DELETE /v1/users/:id(ya da/by-external-id/:externalId) kullanıcıyı ve her cihazı kaldırır — GDPR yolu. Geçmiş olaylarda yalnızca id'ler kalır.
Özet
| Çağrı | Cihazın kullanıcısına etkisi |
|---|---|
| subscribe (externalId yok) | yeni anonim kullanıcı (ilk kez) ya da değişmez |
| subscribe (externalId ile) | login ile aynı |
login(id) | yeniden adlandır ya da taşı (yukarıda) |
logout() | yeni anonim kullanıcı |
setTags / removeTags / setLanguage | kullanıcıya merge, tüm cihazlara kopya |
unsubscribe() | cihaz silinir; anonim yetim silinir |
PATCH /v1/users/… | sunucu tarafı merge, aynı kopya kuralı |