iOS Push (APNs)
APNs kanalı — .p8/.p12 kimlik bilgisi, sandbox/production ortamı, iOS içerik alanları, rozet/ses/kategori, Notification Service Extension ve sorun giderme.
iOS push, Apple Push Notification service (APNs) HTTP/2 API'si üzerinden token tabanlı (.p8) ya da sertifika tabanlı (.p12) kimlikle gönderilir. İstemci tarafı iOS SDK, kurulum iOS hızlı başlangıç.
Kimlik bilgisi
| Yöntem | Alanlar | Not |
|---|---|---|
| APNs anahtarı (önerilen) | .p8 dosyası, Key ID, Team ID, Bundle ID | Tek anahtar tüm app'ler ve iki ortam için geçerli; süresi dolmaz |
| Sertifika | .p12 + parola, Bundle ID | Yıllık yenilenir; bitiş yaklaşınca dashboard uyarır |
Ortam (environment): sandbox (Xcode build, geliştirme profili) ya da production (TestFlight, App Store). Pushizo cihaz bazında da ortamı tutar: SDK embedded.mobileprovision'dan tespit eder ve abonelikle gönderir; aynı app'te iki ortamın cihazları birlikte yaşayabilir. En sık görülen hata ortam uyuşmazlığıdır (BadDeviceToken).
API: PUT /v1/apps/{app_id}/channels/ios_push { "provider": "apns", "config": { "key_id", "team_id", "bundle_id", "environment", "p8": "-----BEGIN PRIVATE KEY-----…" } } (dosya yükleme için multipart desteklenir); POST …/validate APNs'e bağlanıp kimliği doğrular.
İçerik alanları
| Alan | APNs karşılığı |
|---|---|
headings, subtitle, contents | alert.title, alert.subtitle, alert.body |
ios_sound | sound (uygulama paketindeki dosya adı) |
ios_badge_type (None, SetTo, Increase) + ios_badge_count | badge; Increase NSE ile cihazda artırılır |
ios_category | category (aksiyon düğmeleri) |
thread_id | thread-id (gruplama) |
ios_interruption_level (passive, active, time-sensitive, critical) | interruption-level; critical için entitlement gerekir (critical alert) |
ios_relevance_score | relevance-score (0–1) |
target_content_identifier | target-content-id |
big_picture, ios_attachments | NSE ile indirilen ek (resim, video, ses) |
buttons | Kategori tabanlı aksiyonlar (SDK kayıt eder) |
content_available, mutable_content | Sessiz push (content-available: 1), NSE için mutable-content: 1 (ek varsa otomatik) |
collapse_id | apns-collapse-id |
ttl, priority (5/10) | apns-expiration, apns-priority |
data | Özel yük (hs anahtarı altında teslimat kimliği, URL ve düğmeler de taşınır) |
Push yükü 4 KB sınırına göre doğrulanır; aşım 422 HS_CONTENT_INVALID.
Notification Service Extension
NSE, zengin medyayı indirir, rozet artışını uygular, aksiyon düğmelerini ekler ve uygulama kapalıyken bile cihaza ulaştı (received) kaydını gönderir. Uygulama ve NSE aynı App Group ile depolamayı paylaşır (bölgesel API kökü ve kuyruk). Kurulum: iOS SDK → NSE.
Teslimat ve geri bildirim
- APNs yanıtı anında işlenir:
200→sent;410 Unregistered/BadDeviceToken→ abonelikinvalid,subscription.invalidated;TooManyRequests/5xx→ üstel yeniden deneme (30 sn → 2 sa). receivedNSE'den,openedSDK tıklama işleyicisinden gelir; ikisi de Mesaj İzleme zaman çizelgesinde ve webhook'larda (delivery.delivered,delivery.opened) görünür.- Kanal sağlık işi 6 saatte bir kimlik bilgisini APNs'te doğrular; reddedilirse kanal
invalidolur ve org sahiplerine e-posta gider.
Sorun giderme
| Hata / belirti | Neden ve çözüm |
|---|---|
BadDeviceToken | Ortam uyuşmazlığı (sandbox build'e production push). Kanal ortamını ve cihaz ortamını kontrol edin. |
InvalidProviderToken / 403 | Key ID / Team ID / .p8 eşleşmiyor; anahtar APNs için yetkili mi? |
TopicDisallowed | Bundle ID yanlış ya da anahtar bu app için yetkisiz. |
Bildirim geliyor, received yok | NSE kurulu değil ya da mutable-content için ek yok; App Group paylaşımı eksik. |
| Rozet artmıyor | ios_badge_type: "Increase" NSE gerektirir. |
| Sessiz push çalışmıyor | content_available: true ve Background Modes → Remote notifications; iOS kısıtlamaları (pil, sık gönderim). |
Web Push
VAPID tabanlı tarayıcı push kanalı — kurulum, tarayıcı desteği, service worker, izin istemleri, içerik alanları ve sorun giderme.
Android Push (FCM)
Firebase Cloud Messaging HTTP v1 kanalı — servis hesabı, data-only mesaj modeli, Android içerik alanları, bildirim kanalları, teslimat geri bildirimi ve sorun giderme.