Ana içeriğe geç

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.

SDKPaketPlatformTransportNotlar
iOS (Swift)packages/sdk-ios (Swift Package)iOS 15+doğrudan APNsFirebase yok. URLSession + UserDefaults, sıfır bağımlılık. NSE şablonu dahil.
Android (Kotlin)com.opennotification:sdk (AAR)minSdk 23FCMToken için Firebase; her bildirimi SDK çizer. HttpURLConnection, başka bağımlılık yok.
React Native@opennotification/react-nativeiOS + AndroidAPNs (native modül) / FCM (gömülü Kotlin SDK)Native modüller paketle gelir; Firebase/Notifee JS paketi yok. Expo config plugin.
Web@opennotification/webTarayıcılar, PWA'larWeb PushYetenek tespiti, iOS kurulum rehberi, hazır service worker.

Hepsinin yaptığı

  1. 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 subscriptionId yerelde saklanır.
  2. Kimlik: login(externalId) cihazı sizin kullanıcı kimliğinize bağlar; logout() ayırır. Kurallar Kimlik'te.
  3. Tag'ler: setTags birleştirir, removeTags anahtar siler. Tag'ler kullanıcıya aittir ve sahip olduğu her cihaza ulaşır.
  4. İzleme: SDK, yükteki imzalı msgId ile delivered, opened, clicked ve (OS izin verdiği yerde) dismissed bildirir. Anahtar gerekmez — imza kimlik bilgisidir.
  5. Açılmalar: onOpen yö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:

AlanTipNotlar
msgIdstring?İmzalı izleme kimliği. Push Open Notification'dan değilse null.
campaignIdstring?
title, bodystringZaten abonenin dilinde, yer tutucular dolu.
imagestring?
urlstring?Derin bağlantı. Kendi url'i olan bir butona basıldıysa o URL burada.
actions{id,title,url?}[]
actionIdstring?Açılma butondan geldiyse dolu.
dataRecord<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.