Web Push API
Web Push API, web sitelerinin kullanıcı web sitesinde aktif olmasa bile tarayıcı aracılığıyla bildirim göndermesini sağlayan W3C standardıdır. Service Worker ile birlikte çalışır ve tüm modern tarayıcılarda desteklenir.
Web Push API Nedir?
Web Push API, tarayıcı push bildirimlerinin teknik altyapısını sağlayan W3C standardıdır. Web uygulamalarının, kullanıcı web sitesinde aktif olmasa bile bir push hizmeti sunucusu aracılığıyla mesaj iletmesini mümkün kılar. Uygulama sunucunuz bildirimi gönderir, push hizmeti (tarayıcı sağlayıcısına bağlı olarak Google FCM veya Mozilla autopush gibi) bunu cihaza iletir; ardından Service Worker bildirimi işler ve gösterir.
Web Push API, tüm modern tarayıcılarda (Chrome, Firefox, Edge, Opera ve iOS 16.4 sonrasında Safari) çalışır. Bu, web sitelerini ziyaret eden kişilere yerel bir uygulama indirmeye gerek kalmadan push bildirimi gönderebileceğiniz anlamına gelir.
Teknik Mimari
Web Push API üç bileşenden oluşur.
- Uygulama sunucusu: Push bildirimini gönderir; bu durumda SendSeven'ın Push kanalı altyapısı veya doğrudan REST API çağrısı yaptığınızda kendi arka ucunuz.
- Push hizmeti: Tarayıcı sağlayıcısının sunucusu (Chrome için Google FCM, Firefox için Mozilla autopush, Safari için Apple APNs). Push hizmetini kendiniz seçemezsiniz; tarayıcı belirler.
- Service Worker: Web sitesi etki alanınıza ait ve tarayıcıda arka planda çalışan bir JavaScript dosyası. Push olayını alır ve bildirimi tetikler.
VAPID Protokolü
Gönderici kimlik doğrulaması VAPID (Voluntary Application Server Identification for Web Push) protokolü aracılığıyla gerçekleşir. VAPID için bir genel/özel anahtar çifti oluşturursunuz. Genel anahtar tarayıcının abonelik kaydına eklenir. Her push isteği özel anahtarla imzalanır; bu sayede push hizmeti, bildirimin meşru bir kaynaktan geldiğini doğrular.
SendSeven bu süreci soyutlar: kendi VAPID anahtarı çiftinizi oluşturmanıza gerek yoktur. VAPID kimlik bilgileri SendSeven altyapısında yönetilir.
Abonelik Süreci
Teknik abonelik süreci şu şekilde işler.
- Service Worker web sitesine yüklenir.
- Kullanıcı ön izin katmanında ve ardından tarayıcı izin sorgusunda izin verir.
- Tarayıcı, push hizmeti sunucusunda uç nokta URL'si içeren bir
PushSubscriptionnesnesi oluşturur. - Bu abonelik nesnesi, SendSeven abonelik veritabanına kaydedilir.
- Bir push bildirimi göndermek istediğinizde, SendSeven abonelik uç noktasına VAPID ile imzalanmış bir HTTP POST isteği gönderir.
- Push hizmeti bildirimi cihaza iletir; Service Worker uyandırılır ve bildirimi gösterir.
Yük Formatı ve Şifreleme
Web Push API gönderilen yüklerin şifreli olmasını gerektirir. Şifreleme RFC 8291'e göre yapılır ve abone tarayıcısının genel anahtarına dayanır. Bu, yalnızca hedef tarayıcının push hizmetinin yükü okuyabileceği anlamına gelir. SendSeven bu şifreleme katmanını otomatik olarak yönetir.
Tipik bir push yükü şunları içerir:
- title: Bildirim başlığı
- body: Kısa açıklama metni
- icon: Küçük görsel URL'si
- url: Tıklamada açılacak URL
- ttl (time-to-live): Bildirimin cihaza ulaşamazsa ne kadar süre saklanacağı (saniye cinsinden)
Kısıtlamalar
- Tarayıcıya bağımlılık: Abonelik belirli bir tarayıcı örneğine ve cihaza özgüdür.
- Tarayıcı açık olmalı: Bildirimler yalnızca tarayıcı çalışırken iletilir; kapalı veya arka plan güç yönetimi nedeniyle uykuya alınmış olabilir.
- Hız sınırlaması: Bazı push hizmetleri, kısa sürede çok fazla bildirim gönderildiğinde hız sınırlaması uygular.
- Eylem düğmesi yok: Push bildirimlerinin kendisinde eylem düğmesi bulunmaz; bildirim tostu tıklanabilirdir.
Web Push API ve SendSeven
SendSeven, Web Push API'yi uygulama ayrıntılarını kendiniz yönetmenize gerek kalmadan soyutlar. Service Worker, VAPID anahtar yönetimi ve push hizmeti entegrasyonunu sağlarsınız; SendSeven yük oluşturma, şifreleme ve teslimatı üstlenir. Push'u Reach üzerinden planlanmış kampanya olarak gönderir ya da bir olay gerçekleştiğinde (fiyat değişimi, sepet terk gibi) sisteminizden REST API çağrısı yaparsınız. Tüm abonelikler ve gelen tepkiler merkezi gelen kutusunda yönetilir. Daha fazla bilgi için Push bildirimleri kanal sayfasına bakın.