Ana içeriğe geç

İçerik

Bir bildirimin içeriği dil → metin haritası artı _default işaretçisidir:

{
"en": {
"title": "Weekend flash sale ⚡",
"body": "{{firstName|there}}, 30% off everything until Sunday night.",
"image": "https://cdn.acme.example/push/weekend.jpg",
"url": "acme://sale/weekend",
"actions": [
{ "id": "shop", "title": "Shop now" },
{ "id": "later", "title": "Remind me later", "url": "acme://remind?sale=weekend" }
]
},
"tr": { "title": "Hafta sonu indirimi ⚡", "body": "…", "url": "acme://sale/weekend" },
"_default": "en"
}

Dil çözümleme

Her abone için worker sırayla seçer:

  1. tam language (en-GB),
  2. tabanı (en),
  3. _default.

_default, haritada var olan bir dili adlandırmalıdır. Anahtarlar BCP 47 benzeridir (tr, en, en-GB).

Alanlar

AlanSınırlarNotlar
title1–200 karakterZorunlu. Yer tutucu serbest.
body1–1000 karakterZorunlu. Yer tutucu serbest.
imageURLHTTPS. Android büyük görsel, web image, iOS NSE ile ek. iOS kilit ekranı önizlemesinde görünmez.
url≤ 2048Dokununca açılan derin bağlantı ya da URL. Yer tutucu serbest.
actions≤ 3, benzersiz id ^[a-z0-9_-]{1,32}$, başlık ≤ 40Butonlar. url o buton için bildiriminkini geçersiz kılar.

Sihirbazdaki taslaklar, otomatik kayıt metin kaybetmesin diye daha gevşek bir şemayla tutulur (boş alanlara izin); yukarıdaki katı kurallar gönderim anında geçerlidir.

Görünüm

presentation altındaki dilden bağımsız seçenekler:

AlaniOSAndroidWeb
soundaps.sound ("default" ya da uygulama paketindeki dosya); "none" → anahtar yok = sessizdata.sound → SDK'nın kanalı/setSilent"none" için silent: true
badgeaps.badgesetNumberbadgeCount (Badging API)
threadIdaps.thread-id (Bildirim Merkezi'nde gruplar)bildirim grup anahtarı
icongörsel yoksa büyük simgebildirim icon
interruptionLevelaps.interruption-level: passive, active (varsayılan), time-sensitive, critical
relevanceScoreaps.relevance-score, 0–1, bildirim özetindeki sırayı belirler
channelIdSDK'nın post edeceği Android kanalı

Bir platformun gösteremediği, o platformun transport'u tarafından yok sayılır.

Kesinti düzeyi push'un Odak modunu (time-sensitive, uygulamada Time Sensitive Notifications yeteneği gerekir) ya da sessiz modu (critical, Apple'dan entitlement gerekir) aşmasını sağlar. Sunucu değeri geçirir, entitlement'ı denetlemez; yoksa iOS active'e düşürür. passive ses ve banner olmadan listeye düşer.

Android kanalları panelde bir kez tanımlanır ve push ilk kez bir kanalı adlandırdığında SDK onu cihazda yaratır; yeni bir kanal için uygulama sürümü gerekmez. Cihazda olmayan ve push'un tarif etmediği kanal SDK'nın varsayılan kanalına düşer.

Sessiz push

Kampanya, bildirim ya da şablonda silent: true bir arka plan push'u gönderir: hiçbir şey çizilmez, uygulama kısa süreliğine uyandırılır ve data'yı alır.

PlatformNe giderSDK ne yapar
iOSapns-push-type: background, öncelik 5, aps: { "content-available": 1 } — alert, ses ya da mutable-content yok (Apple bunlardan birini taşıyan arka plan push'unu atar)didReceiveBackground(userInfo:) delivered bildirir ve onReceive'i message.silent == true ile çağırır
Androidher zamanki veri mesajı, silent: "1" ilehiçbir şey çizmez, onReceive'i çağırır
Webfan-out'ta atlanır — tarayıcı bir şey göstermeden push alamaz

Sessiz kampanyada content gerekmez; data mesajın tamamıdır (sihirbazdaki Veri kartı). iOS uygulamaya yaklaşık 30 saniye verir ve çok gönderen uygulamaları kısar — saatte birkaç adet güvenlidir, dakikada birkaç adet değildir. Sessiz kampanyada A/B testi yoktur.

Data yükü

data, dokunulmadan taşınan ve onOpen handler'ınıza message.data olarak ulaşan düz string → string haritasıdır (en çok 64 karakterlik anahtar, 1024 karakterlik değer). Yönlendirme için kullanın (screen, id'ler). Düzdür çünkü FCM data'da başka bir şeye izin vermez.

Platform çizim özeti

ÖzellikiOSAndroidChrome/EdgeFirefoxSafari (mac/iOS)
Başlık / gövde
Görsel✅ (NSE)
Butonlar✅ ≤4 (NSE)✅ ≤3✅ ≤2
Sessistemsistemsistem
Rozet✅ PWA✅ PWA
Grup / threadtag iletag ile
Sessiz ses (sound: "none")
Arka plan (silent: true)atlanıratlanıratlanır
Kesinti düzeyi✅ iOS 15+
Kanallar✅ Android 8+

Boyut

Web push yükleri şifrelenir ve push servisleri tarafından 4 KB ile sınırlanır (kullanılan kayıt boyutuyla 3 993 bayt düz metin). APNs 4 KB, FCM 4 KB data izin verir. Sihirbazın bayt ölçeri en büyük dili gösterir. data'yı küçük tutun; daha çok eklemeniz gerekiyorsa id gönderip açılınca çekin.

Emoji ve Unicode

Uçtan uca UTF-8. Başlık ve gövdede emoji tüm platformlarda sorunsuz; sayımlar bayt değil karakterdir.