Açılmalar ve derin bağlantılar
Her SDK bir basışı tek mesaja normalize eder ve handler'ınız çalışmadan olayı bildirir. Sizin işiniz yönlendirmek.
Mesaj, yine
| Alan | Ne için |
|---|---|
url | Derin bağlantı. Kendi url'i olan bir butona basıldıysa bu butonunkidir. |
data | Kampanyanın data haritası — screen, id'ler, ne koyduysanız. Yalnızca düz string (FCM data başka bir şeye izin vermez). |
actionId | Hangi buton, varsa. |
msgId, campaignId | Analitik eşleştirme. |
Uygulama içi gezinme için data.screen + id'leri, uygulamadan çıkabilecek ya da paylaşılabilecek bağlantılar için url'i tercih edin.
Yönlendirme kalıpları
React Native
OpenNotification.onOpen(({ url, data, actionId }) => {
if (actionId === "later") return; // bir "sonra hatırlat" butonu
if (data.screen) navigation.navigate(data.screen, data);
else if (url) Linking.openURL(url);
});
Swift
OpenNotification.shared.onOpen = { message in
if let screen = message.data["screen"] { router.show(screen, params: message.data) }
else if let url = message.url.flatMap(URL.init) { UIApplication.shared.open(url) }
}
Kotlin
OpenNotification.onOpen = { message ->
message.data["screen"]?.let { router.show(it, message.data) }
?: message.url?.let { startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(it))) }
}
Web — service worker data.url'i (ya da butonun data["a:<id>"]'sini) açar, önce o yoldaki mevcut sekmeye odaklanır. Sayfada ele almak için gerekenleri URL'in query string'ine koyup yüklenince okuyun.
Soğuk başlatma
| Platform | Basış size nasıl ulaşır |
|---|---|
| iOS (Swift) | didFinishLaunching'de handleLaunch(userInfo:) — onOpen kurulunca yeniden oynatılır. |
| Android (Kotlin) | onCreate / onNewIntent'te OpenNotification.messageFrom(intent). |
| React Native | JS hazır olana kadar native'de tutulur, sonra onOpen'a verilir. |
| Web | Worker URL'i açar/odaklar; sayfa normal yüklenir. |
Aksiyon butonları
İçerikte dil başına tanımlanır (actions: [{ id, title, url? }], en çok 3). Platformların gösterimi:
| Gösterilen buton | Butonun URL'i nereye gider | |
|---|---|---|
| iOS | 4'e kadar (biz ≤ 3 göndeririz); kategoriyi kaydetmek için NSE gerekir | message.url |
| Android | 3 | message.url |
| Chrome / Edge | 2 | data["a:<id>"] |
| Safari | yok | — |
Buton basışı clicked, gövde basışı opened bildirir. İkisi de huniye sayılır; yalnızca clicked CTR'dir.
Ön planda geliş
Uygulama açıkken push gelince onReceive tetiklenir. SDK'lar sistem bildirimini yine gösterir (iOS willPresent ile, Android çizerek); onReceive'i ikinci bir uyarı için değil, bir rozeti ya da listeyi yenilemek için kullanın.
İzleme ucu
SDK'lar sizin için çağırır; özel entegrasyonlar için belgelenmiştir:
POST /v1/e/d/<msgId> delivered
POST /v1/e/o/<msgId> opened
POST /v1/e/c/<msgId> clicked
POST /v1/e/x/<msgId> dismissed
Başlık yok, gövde yok, anahtar yok. msgId HMAC imzalıdır ve appId|campaignId|userId|subscriptionId|platform|variant gömer; API veritabanı okumadan doğrular, olayı yazar, kampanya (ve varyant) sayaçlarını artırır ve webhook'u atar. IP başına sınırlıdır (EVENT_RATE_LIMIT). Tekrarlanan bir ping yalnızca analitik sayaçlarını oynatır; hiçbir şey vermez.