iOS critical alert, interruption level ve ses
Bu rehber Pushizo'nun iOS bildirimlerinde desteklediği aps alanlarını, ios_interruption_level (time-sensitive / critical) kullanımını ve ses/hacim davranışını açıklar. Critical alert, Apple'ın yalnızca başvuruyla…
Bu rehber Pushizo'nun iOS bildirimlerinde desteklediği aps alanlarını, ios_interruption_level (time-sensitive / critical) kullanımını ve ses/hacim davranışını açıklar. Critical alert, Apple'ın yalnızca başvuruyla verdiği bir entitlement gerektirir; Pushizo payload'ı üretir, entitlement ve izin uygulama tarafında kalır.
1. Desteklenen iOS alanları
POST /v1/notifications (ve şablon/kampanya içeriği) alanlarının APNs karşılıkları (packages/providers/src/apns.ts buildApnsPayload):
| Pushizo alanı | APNs | Not |
|---|---|---|
headings, contents, subtitle | aps.alert.title, .body, .subtitle | Alıcının diline göre çözülür. |
ios_sound | aps.sound (dize) | Verilmezse default. Uygulama paketindeki .caf/.aiff/.wav dosya adı (≤ 30 sn). |
ios_badge_type + ios_badge_count | aps.badge (SetTo) ya da hs.badge_inc (Increase, NSE uygular) | None rozete dokunmaz. |
ios_category | aps.category | Aksiyon düğmeleri (buttons) için SDK UNNotificationCategory kaydeder. |
thread_id | aps.thread-id | Gruplama; yoksa android_group kullanılır. |
ios_interruption_level | aps.interruption-level | passive, active, time-sensitive, critical (bkz. §2). |
ios_relevance_score | aps.relevance-score | 0–1; iOS 15+ özet sıralaması. |
target_content_identifier | aps.target-content-id | Sahne seçimi. |
ios_attachments, big_picture | hs.image → NSE indirir | Zengin medya için PushizoExtension. |
mutable_content | aps.mutable-content: 1 | Görünür bildirimlerde her zaman 1 gönderilir (NSE: received kaydı, medya, rozet artırma). |
content_available | aps.content-available: 1, apns-push-type: background, öncelik 5 | Sessiz push; alert/sound gönderilmez. |
priority | apns-priority | 10 (varsayılan) anında, 5 güç tasarruflu. |
ttl | apns-expiration | Saniye. |
collapse_id | apns-collapse-id | En fazla 64 karakter. |
data | Payload kök düzeyinde özel anahtarlar | aps ve hs dışındaki anahtarlar; event.notification.data ile okunur. |
aps.sound her zaman dize olarak yazılır; { "critical": 1, "name": "…", "volume": … } sözlüğü üretilmez (bkz. §3).
2. Interruption level
| Değer | Davranış | Gereksinim |
|---|---|---|
passive | Ses/titreşim yok, kilit ekranını uyandırmaz; bildirim listesine eklenir. | — |
active (varsayılan) | Normal bildirim. | — |
time-sensitive | Odak (Focus) modlarını ve "Zamanlanmış özet"i aşar; ses çalar. | Xcode → Signing & Capabilities → Time Sensitive Notifications yeteneği (com.apple.developer.usernotifications.time-sensitive). Kullanıcı Ayarlar'dan uygulama bazında kapatabilir. |
critical | Sessiz modu ve Rahatsız Etme'yi aşarak ses çalar, ekranı uyandırır. | Apple'dan alınan Critical Alerts entitlement'ı (com.apple.developer.usernotifications.critical-alerts) ve kullanıcının critical alert iznini vermiş olması. |
Gönderim:
await hs.notifications.create({
target: { include_external_ids: ['user_42'] },
headings: { tr: 'Güvenlik uyarısı' },
contents: { tr: 'Hesabınıza yeni cihazdan giriş yapıldı' },
ios_interruption_level: 'time-sensitive',
ios_sound: 'alert.caf',
thread_id: 'security',
});ios_interruption_level: 'critical' değeri yalnızca entitlement'ı olan uygulamalara gönderilmelidir; entitlement yoksa APNs isteği reddetmez, ancak cihaz bildirimi normal (active) seviyede gösterir.
3. Critical alert kurulumu ve mevcut davranış
Apple tarafı
- Critical alert entitlement başvurusu yapın (sağlık, güvenlik, kamu güvenliği gibi kullanım alanları gerekir).
- Onay sonrası App ID'ye Critical Alerts yeteneğini ekleyin;
.entitlementsdosyasınacom.apple.developer.usernotifications.critical-alerts = true. - İzin isteminde
.criticalAlertseçeneğini ekleyin. Pushizo iOS SDK'sınınPushizo.Notifications.requestPermissionçağrısı[.alert, .badge, .sound](+provisionalAuthorizationaçıksa.provisional) ister;.criticalAlertistemez. Bu nedenle critical alert iznini uygulamanız ayrıca istemelidir:
import UserNotifications
func requestCriticalAlerts() {
UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .badge, .sound, .criticalAlert]) { granted, _ in
// Kullanıcı critical alert iznini ayrı bir anahtarla yönetir (Ayarlar → Bildirimler → uygulama → Kritik Uyarılar)
}
}Bu çağrı Pushizo SDK'sının izin takibiyle çelişmez: SDK etkin izni UNUserNotificationCenter.getNotificationSettings üzerinden okur ve abonelik push_capable bilgisini günceller; addPermissionObserver değişikliği bildirir.
Pushizo tarafı (mevcut davranış)
ios_interruption_level: "critical"→aps.interruption-level: "critical"yazılır.ios_sound→aps.sound: "<dosya>"(dize). Apple'ın critical alert için tanımladığıaps.sound = { "critical": 1, "name": "…", "volume": 0.0–1.0 }sözlüğü ve dolayısıyla hacim ezmesi (volume) desteklenmez; ses cihaz ayarındaki hacimle çalar. Bu alanlar eklendiğindeMessageContent(packages/db/src/schema/delivery.ts) ve OpenAPI sözleşmesi genişletilecek, mevcut alanlar değişmeyecektir (ekleme kırıcı değildir).- Notification Service Extension (
PushizoExtension)apsiçeriğinimutableCopyile korur;interruption-levelvesounddeğerleri NSE'den geçerken değişmez. NSE bir bildirimi critical seviyeye yükseltemez (bu yalnızca payload + entitlement ile mümkündür). - Critical ve time-sensitive seviyeler sessiz saatler ve frekans sınırından otomatik muaf değildir; işlemsel/kritik mesajlarda
quiet_hours_exempt: truevefrequency_cap_exempt: truealanlarını birlikte gönderin.
4. Ses
ios_sound: uygulama paketindeki özel ses (alert.caf);defaultsistem sesi. Dosya bulunamazsa iOS varsayılan sesi çalar.- Sessiz push (
content_available: true) ses göndermez. - Android'de karşılık
android_sound(res/raw/<ad>), ya da Dashboard → Ayarlar → Android bildirim kategorileri içindeki kanal sesi (android_channel_id). Android 8+ sesi kanal belirler; mesaj başına ses yalnızca kanal yoksa uygulanır. - Web'de ses tarayıcı/işletim sistemi ayarıdır; mesaj alanı yoktur.
5. Doğrulama
- Test cihazında (gerçek cihaz; simülatörde APNs yoktur) uygulamayı
sandboxortamıyla çalıştırın, Dashboard → Kanallar → iOS Push ortamının eşleştiğini doğrulayın (BadDeviceTokenortam uyumsuzluğudur). - Cihazı Rahatsız Etme'ye alın;
time-sensitivemesaj gelmeli,activemesaj özette kalmalıdır. - Critical alert entitlement'ı olan uygulamada cihazı sessize alıp
ios_interruption_level: "critical"gönderin; ses çalmalıdır. Entitlement yoksa bildirim normal seviyede gelir, bu beklenen davranıştır. - Mesaj İzleme'de
sent → received → openedzaman çizelgesi;receivedkaydı NSE tarafından yapılır (PushizoExtensioneklenmemişse yalnızcaopenedgörünür).
iOS Safari (16.4+) web push ve PWA
iOS 16.4 ve sonrasında Safari, ana ekrana eklenmiş web uygulamalarına (PWA) standart Web Push ile bildirim gönderebilir. Pushizo Web SDK'sı bu akışı ek kod olmadan destekler; farklı olan, kullanıcının siteyi önce ana…
iOS Live Activities
Live Activities, kilit ekranında ve Dynamic Island'da canlı içerik gösterir: sipariş takibi, teslimat süresi, maç skoru, yolculuk durumu. Pushizo ile etkinliği sunucudan başlatır, günceller ve bitirirsiniz…