SDK'lar
Dört istemci SDK'sı, hepsi MIT lisanslı, hepsi uygulamanın pk_live_… public anahtarıyla aynı /v1 uçlarına konuşur.
| SDK | Paket | Platform | Transport | Notlar |
|---|---|---|---|---|
| iOS (Swift) | packages/sdk-ios (Swift Package) | iOS 15+ | doğrudan APNs | Firebase yok. URLSession + UserDefaults, sıfır bağımlılık. NSE şablonu dahil. |
| Android (Kotlin) | com.opennotification:sdk (AAR) | minSdk 23 | FCM | Token için Firebase; her bildirimi SDK çizer. HttpURLConnection, başka bağımlılık yok. |
| React Native | @opennotification/react-native | iOS + Android | APNs (native modül) / FCM (gömülü Kotlin SDK) | Native modüller paketle gelir; Firebase/Notifee JS paketi yok. Expo config plugin. |
| Web | @opennotification/web | Tarayıcılar, PWA'lar | Web Push | Yetenek tespiti, iOS kurulum rehberi, hazır service worker. |
Hepsinin yaptığı
- Cihazı kaydet: token + platform + cihaz bilgileri + kullanıcının dili/saat dilimi/ülkesi. API token'a göre upsert eder; her açılışta çağırmak doğru ve ucuzdur. Dönen
subscriptionIdyerelde saklanır. - Kimlik:
login(externalId)cihazı sizin kullanıcı kimliğinize bağlar;logout()ayırır. Kurallar Kimlik'te. - Tag'ler:
setTagsbirleştirir,removeTagsanahtar siler. Tag'ler kullanıcıya aittir ve sahip olduğu her cihaza ulaşır. - İzleme: SDK, yükteki imzalı
msgIdiledelivered,opened,clickedve (OS izin verdiği yerde)dismissedbildirir. Anahtar gerekmez — imza kimlik bilgisidir. - Açılmalar:
onOpenyönlendirebilmeniz için normalize edilmiş bir mesaj verir (title,body,url,data,actionId). Soğuk başlatma ele alınır — uygulamayı başlatan basış, handler'ınız kurulunca yeniden oynatılır.
Normalize edilmiş mesaj
Tel biçimi ne olursa olsun (APNs aps+on, FCM düz data, Web Push JSON), her SDK kodunuza aynı şekli verir:
| Alan | Tip | Notlar |
|---|---|---|
msgId | string? | İmzalı izleme kimliği. Push Open Notification'dan değilse null. |
campaignId | string? | |
title, body | string | Zaten abonenin dilinde, yer tutucular dolu. |
image | string? | |
url | string? | Derin bağlantı. Kendi url'i olan bir butona basıldıysa o URL burada. |
actions | {id,title,url?}[] | |
actionId | string? | Açılma butondan geldiyse dolu. |
data | Record<string,string> | Kampanyanın data yükü. |
Hatalar asla fırlatılmaz
Ağa giden her çağrı bir Result döner (TypeScript'te { ok: true, value } / { ok: false, error }; Swift ve Kotlin'de Result<…> / completion Error?). Kodlar sabit string'lerdir — permission_denied, no_token, api_error, network_error — mesaj ayrıştırmadan dallanabilirsiniz.
Yine, hangi anahtar
SDK'lar public anahtarı alır. Cihaz kaydedebilir ve o cihazın kendi kullanıcısını güncelleyebilir; gönderemez, başka kullanıcıları okuyamaz, hiçbir şeyi listeleyemez. Uygulama paketine ya da web sayfasına koymak amaçlanan kullanımdır. Bir istemciye asla sk_ anahtarı koymayın.