CoralCrescendo
Kayıtlı Kullanıcı
Günümüz dijital iletişim ortamında, kullanıcı deneyimini artırmak için push bildirimleri kritik bir rol oynar. Ancak, bildirim izni verildiğinde bile bildirimlerin görünmemesi, kullanıcı güvenini sarsar ve uygulama performansını olumsuz etkiler. Bu durum, teknik yapılandırmalardan kullanıcı tercihine, tarayıcı uyumluluğundan hizmet sağlayıcılarının altyapısına kadar birçok faktörün bir araya gelmesiyle ortaya çıkar. Bildirimlerinizin neden gelmediğini anlamak, sorunu çözmek için ilk adımdır.
İzinlerin açılması, yalnızca gönderim için gerekli olan en temel adımdır. Gerçek gönderim, üç ana bileşenle gerçekleşir:
1. İstemci Tarafı – Tarayıcı veya uygulama, izin verildiğinde bir “subscription” nesnesi oluşturur ve bu nesneyi sunucuya gönderir.
2. Sunucu Tarafı – Sunucu, subscription bilgilerini depolar ve hedefe yönelik bildirimleri oluşturur.
3. Push Aracı – Web Push API, FCM veya APNs gibi servisler, sunucu mesajını alır ve cihazın bildirime dönüştürmesini sağlar.
Her bir bileşen hatalı çalışırsa, bildirim görünmez.
Bu yolculuk sırasında oluşabilecek hatalar:
- Yanlış endpoint – Tarayıcı güncel endpoint’i sunucuya göndermezse, push aracı mesajı iletemez.
- Şifreleme hatası – İstemci tarafında p256dh algoritması uyumsuzsa, mesaj çözülemez.
- Sunucu hatası – 500 hatalı yanıt, mesajın iletilmesini engeller.
- Tarayıcı engelleme – AdBlocker, güvenlik duvarı veya gizlilik uzantıları, push isteklerini engelleyebilir.
Tarayıcı güncellemeleri, Web Push API’sinde yeni şifreleme standartlarını zorunlu kılar. IE ve Edge 18 sürümünden önceki sürümler, eski algoritmaları desteklemediği için bildirim almaz. Bu nedenle, kullanıcıların tarayıcı güncel tutması şarttır.
Sunucu tarafında kullanılan kütüphanelerde, CORS politikaları doğru yapılandırılmalı. Örneğin, “Access-Control-Allow-Origin” başlığı “*” olarak ayarlanırsa, tarayıcı güvenlik hatası verir.
Ayrıca, “pushsubscriptionchange” olayının yakalanması, aboneliğin güncellenmesini sağlar. Bu olay, tarayıcı güncellemeleri sırasında subscription değiştiğinde tetiklenir.
Algoritma uyumsuzluğu, özellikle eski tarayıcılarda görülür. Örneğin, “ECDH” yerine “RSA-OAEP” kullanıldığında, mesaj çözülemez.
İzin verildikten sonra, `navigator.permissions.query({name:"notifications"})` ile izin durumunu kontrol ederek “granted” olduğundan emin olun.
2. Endpoint Güncellemelerini İzleyin
`pushsubscriptionchange` olayını dinleyin ve yeni subscription’ı sunucuya gönderin; eski endpoint’ler geçersizdir.
3. VAPID Anahtarlarını Doğru Oluşturun
`node-vapid` veya `web-push` kütüphanelerini kullanarak 2048 bit RSA anahtarları oluşturun; e-posta alanını “[email protected]” gibi geçerli biçimde ayarlayın.
4. Push Başlıklarını Optimize Edin
TTL değerini 3600 saniye (1 saat) olarak belirleyin ve “urgency” başlığını “normal” olarak ayarlayın; bu, mesajın zamanında iletilmesini sağlar.
5. Service Worker Güncellemelerini Otomatikleştirin
`self.addEventListener("push", …)` içinde `self.registration.showNotification` kullanın; ayrıca `skipWaiting()` ile yeni service worker’ı mutlaka etkinleştirin.
6. Tarayıcı Uyumluluğunu Test Edin
Chrome, Firefox, Safari ve Edge için ayrı test senaryoları oluşturun; `chrome://flags` ve `about:config` ayarlarını kontrol edin.
7. İzin Sorgulama Loglarını Tutun
Kullanıcı izin durum değişikliklerini loglayarak, bildirimlerin neden gelmediğini izleyin; `console.log` yerine sunucu tarafında merkezi loglama sistemi kullanın.
8. İstemci Tarafında Farklı Algoritmalar Deneyin
`ECDH` yerine `RSA-OAEP` kullanarak şifreleme uyumluluğunu test edin; bazı eski cihazlar RSA’yı daha iyi destekler.
9. Güvenlik Duvarı ve Yönlendirici Ayarlarını Kontrol Edin
443 (TLS) portunun açık olduğundan ve push servislerinin IP aralıklarının whitelist’e eklendiğinden emin olun.
10. Kullanıcıya Bildirim Ayarları Hakkında Bilgilendirme Yapın
Uygulama içinde “Bildirim Ayarları” sayfası oluşturun; kullanıcıların bildirimleri kapatıp açmasını, ses seçeneklerini değiştirip değiştirilebileceğini gösterin.
Temel Kavramlar ve Tanım
Push bildirimleri, bir web sitesinin veya uygulamanın, kullanıcının izniyle gerçek zamanlı olarak mesaj göndermesine olanak tanır. Bu mesajlar, tarayıcı penceresinde veya mobil cihazın sistem çubuğunda görünür. İzin mekanizması, kullanıcıların bildirim almayı kabul edip etmediklerini belirler; izin verildiğinde, sunucu push servisleri (Web Push API, Firebase Cloud Messaging, Apple Push Notification Service) ile cihaz arasında bir kanal kurulur. Bildirimlerin gelmemesi, bu kanalın açığa çıkması, sunucu tarafındaki gönderme hataları veya istemci tarafındaki engeller nedeniyle meydana gelebilir.İzinlerin açılması, yalnızca gönderim için gerekli olan en temel adımdır. Gerçek gönderim, üç ana bileşenle gerçekleşir:
1. İstemci Tarafı – Tarayıcı veya uygulama, izin verildiğinde bir “subscription” nesnesi oluşturur ve bu nesneyi sunucuya gönderir.
2. Sunucu Tarafı – Sunucu, subscription bilgilerini depolar ve hedefe yönelik bildirimleri oluşturur.
3. Push Aracı – Web Push API, FCM veya APNs gibi servisler, sunucu mesajını alır ve cihazın bildirime dönüştürmesini sağlar.
Her bir bileşen hatalı çalışırsa, bildirim görünmez.
İzin Sonrası Bildirim Yolculuğu
İzin verildiği anda, tarayıcı bir “endpoint” URL’i ile birlikte “p256dh” ve “auth” anahtarlarını sunucuya gönderir. Sunucu bu bilgileri güvenli bir şekilde saklar ve bildirim göndermeye hazırdır. Bildirim gönderildiğinde, push aracına bir HTTP POST isteği yapılır. Push aracı, isteği alır, şifreli mesajı çözer ve cihazın işletim sistemine iletir. İşletim sistemi, bildirim penceresini oluşturur.Bu yolculuk sırasında oluşabilecek hatalar:
- Yanlış endpoint – Tarayıcı güncel endpoint’i sunucuya göndermezse, push aracı mesajı iletemez.
- Şifreleme hatası – İstemci tarafında p256dh algoritması uyumsuzsa, mesaj çözülemez.
- Sunucu hatası – 500 hatalı yanıt, mesajın iletilmesini engeller.
- Tarayıcı engelleme – AdBlocker, güvenlik duvarı veya gizlilik uzantıları, push isteklerini engelleyebilir.
Tarayıcı Destek ve Uyum
Chrome, Firefox, Edge ve Safari gibi modern tarayıcılar push bildirimlerini destekler, ancak sürüm farkları ve politika güncellemeleri farklı davranışlara yol açar. Örneğin, Safari’de “Allow” seçeneği verilse bile, “Show notifications” seçeneği kapalıysa bildirimler görünmez. Chrome’da ise “Sites can ask for permission” ayarı kapalıysa, izin veremezsiniz.Tarayıcı güncellemeleri, Web Push API’sinde yeni şifreleme standartlarını zorunlu kılar. IE ve Edge 18 sürümünden önceki sürümler, eski algoritmaları desteklemediği için bildirim almaz. Bu nedenle, kullanıcıların tarayıcı güncel tutması şarttır.
Sunucu Tarafı Yapılandırması
Sunucu, bildirim gönderirken HTTP/2 ve TLS 1.2 veya üstü kullanmalıdır. Ayrıca, push aracına gönderilen başlıklar (TTL, urgency) doğru ayarlanmalıdır. TTL 0 ise mesaj anında iletilir; TTL yüksekse, mesajı cihaz bekleyecektir. Yanlış TTL, mesajın zamanında gelmemesine sebep olabilir.Sunucu tarafında kullanılan kütüphanelerde, CORS politikaları doğru yapılandırılmalı. Örneğin, “Access-Control-Allow-Origin” başlığı “*” olarak ayarlanırsa, tarayıcı güvenlik hatası verir.
İstemci Tarafı Güncellemeleri
İstemci tarafında, service worker’ın doğru kayıt edilmesi gerekir. Service worker, “push” etkinliğini dinlemeli ve “displayNotification” fonksiyonunu çağırmalıdır. Service worker’ın güncel olmaması, bildirimlerin UI tarafında görünmemesine yol açar.Ayrıca, “pushsubscriptionchange” olayının yakalanması, aboneliğin güncellenmesini sağlar. Bu olay, tarayıcı güncellemeleri sırasında subscription değiştiğinde tetiklenir.
Algoritma Uyumluluğu ve Şifreleme
Web Push API, VAPID (Voluntary Application Server Identification) ile kimlik doğrulama yapar. VAPID anahtarları, JSON Web Token (JWT) ile imzalanır. Sunucu tarafında VAPID anahtarları doğru şekilde oluşturulmalı ve push aracına gönderilen “Authorization” başlığına eklenmelidir.Algoritma uyumsuzluğu, özellikle eski tarayıcılarda görülür. Örneğin, “ECDH” yerine “RSA-OAEP” kullanıldığında, mesaj çözülemez.
Güvenlik Duvarı ve Genişletmeler
Çoğu güvenlik duvarı, push isteklerini şüpheli olarak işaret eder ve engeller. Aynı şekilde, reklam engelleyici uzantılar ("AdBlock Plus", "uBlock Origin") push isteklerini kısmen engelleyebilir; bu durum, özellikle mobil cihazda sıkça görülür. Kullanıcıya, uzantıları geçici olarak devre dışı bırakması veya tarayıcı ayarlarında push bildirimlerine izin vermesi önerilir.Uzman Önerileri ve İpuçları
1. İzin Onayını Doğrudan Kontrol Edinİzin verildikten sonra, `navigator.permissions.query({name:"notifications"})` ile izin durumunu kontrol ederek “granted” olduğundan emin olun.
2. Endpoint Güncellemelerini İzleyin
`pushsubscriptionchange` olayını dinleyin ve yeni subscription’ı sunucuya gönderin; eski endpoint’ler geçersizdir.
3. VAPID Anahtarlarını Doğru Oluşturun
`node-vapid` veya `web-push` kütüphanelerini kullanarak 2048 bit RSA anahtarları oluşturun; e-posta alanını “[email protected]” gibi geçerli biçimde ayarlayın.
4. Push Başlıklarını Optimize Edin
TTL değerini 3600 saniye (1 saat) olarak belirleyin ve “urgency” başlığını “normal” olarak ayarlayın; bu, mesajın zamanında iletilmesini sağlar.
5. Service Worker Güncellemelerini Otomatikleştirin
`self.addEventListener("push", …)` içinde `self.registration.showNotification` kullanın; ayrıca `skipWaiting()` ile yeni service worker’ı mutlaka etkinleştirin.
6. Tarayıcı Uyumluluğunu Test Edin
Chrome, Firefox, Safari ve Edge için ayrı test senaryoları oluşturun; `chrome://flags` ve `about:config` ayarlarını kontrol edin.
7. İzin Sorgulama Loglarını Tutun
Kullanıcı izin durum değişikliklerini loglayarak, bildirimlerin neden gelmediğini izleyin; `console.log` yerine sunucu tarafında merkezi loglama sistemi kullanın.
8. İstemci Tarafında Farklı Algoritmalar Deneyin
`ECDH` yerine `RSA-OAEP` kullanarak şifreleme uyumluluğunu test edin; bazı eski cihazlar RSA’yı daha iyi destekler.
9. Güvenlik Duvarı ve Yönlendirici Ayarlarını Kontrol Edin
443 (TLS) portunun açık olduğundan ve push servislerinin IP aralıklarının whitelist’e eklendiğinden emin olun.
10. Kullanıcıya Bildirim Ayarları Hakkında Bilgilendirme Yapın
Uygulama içinde “Bildirim Ayarları” sayfası oluşturun; kullanıcıların bildirimleri kapatıp açmasını, ses seçeneklerini değiştirip değiştirilebileceğini gösterin.