Ana içeriğe geç

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 setTags ikisini 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,
  • null değ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 / setLanguagekullanıcıya merge, tüm cihazlara kopya
unsubscribe()cihaz silinir; anonim yetim silinir
PATCH /v1/users/…sunucu tarafı merge, aynı kopya kuralı