Push nasıl çalışır?

Matt Gaunt

API'ye geçmeden önce, push'i baştan sona genel hatlarıyla inceleyelim. Ayrı ayrı konulara veya API'lere daha sonra değinerken, bunların ne kadar ve neden önemli olduğu konusunda bir fikir edinmiş olacaksınız.

Push'i uygulamanın üç temel adımı şunlardır:

  1. Kullanıcıyı push'a abone etmek için istemci tarafı mantığını ekleme (ör. web uygulamanızda kullanıcıyı push mesajlarına kaydeden JavaScript ve kullanıcı arayüzü).
  2. Arka uçtan/uygulamadan gelen ve kullanıcının cihazına push mesajı tetikleyen API çağrısı.
  3. Cihazdaki push'a "push etkinliği" alacak olan service worker JavaScript dosyası. Bu JavaScript'in içinde bildirim gösterebilirsiniz.

Bu adımların her birinin neleri içerdiğine biraz daha ayrıntılı bir şekilde bakalım.

İlk adım, push mesajları için kullanıcıyı "abone" etmektir.

Kullanıcıların abone olması için iki şey gerekir. İlk olarak, kullanıcıdan push mesajı göndermek için izin alın. İkincisi, tarayıcıdan PushSubscription almak.

PushSubscription, ilgili kullanıcıya push mesajı göndermek için ihtiyaç duyduğumuz tüm bilgileri içerir. Bunu, kullanıcının cihazına ait bir kimlik olarak düşünebilirsiniz.

Tüm bunlar JavaScript'te Push API ile yapılır.

Tarayıcı Desteği

  • Chrome: 42.
  • Edge: 17.
  • Firefox: 44.
  • Safari: 16.

Kaynak

Bir kullanıcıyı abone etmeden önce bir dizi "uygulama sunucusu anahtarı" oluşturmanız gerekir. Bu konuyu daha sonra ele alacağız.

VAPID anahtarları olarak da bilinen uygulama sunucusu anahtarları, sunucunuza özgüdür. Bu kimlikler, bir push hizmetinin kullanıcıya abone olan uygulama sunucusunu bilmesine ve bu kullanıcıya push mesajlarını tetikleyen sunucunun aynı olduğundan emin olmasına olanak tanır.

Kullanıcıyı abone ettikten ve PushSubscription aldıktan sonra PushSubscription ayrıntılarını arka uç/sunucunuza göndermeniz gerekir. Sunucunuzda bu aboneliği bir veritabanına kaydeder ve ilgili kullanıcıya push mesajı göndermek için kullanırsınız.

PushSubscription'ı arka uç sunucunuza gönderdiğinizden emin olun.

2. Adım: Push mesajı gönderin

Kullanıcılarınıza push mesajı göndermek istediğinizde bir push hizmetine API çağrısı yapmanız gerekir. Bu API çağrısı, hangi verilerin gönderileceğini, mesajın kime gönderileceğini ve mesajın nasıl gönderileceğiyle ilgili tüm ölçütleri içerir. Normalde bu API çağrısı sunucunuzdan yapılır.

Kendinize sorduğunuz bazı sorular:

  • Push hizmeti nedir ve kim tarafından sağlanır?
  • API nasıl görünür? JSON, XML mi yoksa başka bir şey mi?
  • API ile neler yapılabilir?

Push hizmeti nedir ve kim tarafından sağlanır?

Push hizmeti, bir ağ isteği alır, doğrular ve uygun tarayıcıya bir push mesajı gönderir. Tarayıcı çevrimdışıysa tarayıcı çevrimiçi olana kadar ileti sıraya alınır.

Her tarayıcı istediği push hizmetini kullanabilir. Bu, geliştiricilerin kontrolünde olmayan bir durumdur. Her push hizmeti aynı API çağrısını beklediğinden bu sorun oluşturmaz. Yani push hizmetinin kim olduğuna dikkat etmeniz gerekmez. API çağrınızın geçerli olduğundan emin olmanız yeterlidir.

Bir push mesajını tetiklemek için uygun URL'yi (yani push hizmetinin URL'sini) almak üzere PushSubscription içindeki endpoint değerine bakmanız yeterlidir.

PushSubscription'dan alacağınız değerlere örnek olarak aşağıdakileri verebiliriz:

{
  "endpoint": "https://random-push-service.com/some-kind-of-unique-id-1234/v2/",
  "keys": {
    "p256dh": "BNcRdreALRFXTkOOUHK1EtK2wtaz5Ry4YfYCA_0QTpQtUbVlUls0VJXg7A8u-Ts1XbjhazAkj7I99e8QcYP7DkM=",
    "auth": "tBHItJI5svbpez7KI4CCXg=="
  }
}

Bu durumda uç nokta [https://random-push-service.com/some-kind-of-unique-id-1234/v2/] şeklindedir. Push hizmeti "random-push-service.com" olur ve her uç nokta, "bir-tür-benzersiz-kimlik-1234" ile gösterilen kullanıcıya özgüdür. Push ile çalışmaya başladığınızda bu kalıbı fark edeceksiniz.

Abonelikteki anahtarlar daha sonra ele alınacaktır.

API nasıl görünür?

Her web push hizmetinin aynı API çağrısını beklediğini belirtmiştim. Bu API, Web Push Protokolü'dür. Bir push hizmetine nasıl API çağrısı yapabileceğinizi tanımlayan bir IETF standardıdır.

API çağrısı için belirli başlıkların ayarlanması ve verilerin bayt akışı olması gerekir. Bu API çağrısını bizim için gerçekleştirebilecek kitaplıklara ve bunu kendimizin nasıl yapacağımıza bakacağız.

API neler yapabilir?

API, kullanıcıya veri içerecek veya içermeyecek şekilde mesaj gönderme yöntemi sağlar ve mesajın nasıl gönderileceğine dair talimatlar sunar.

Push iletisiyle gönderdiğiniz veriler şifrelenmiş olmalıdır. Bunun nedeni, push mesajlarıyla gönderilen verileri herkes olabilecek push hizmetlerinin görüntüleyememesini sağlamaktır. Hangi push hizmetinin kullanılacağına tarayıcı karar verdiğinden bu durum önemlidir. Bu da, güvenli olmayan bir push hizmeti kullanan tarayıcıların önünü açabilir.

Bir push mesajı tetiklediğinizde push hizmeti API çağrısını alır ve mesajı sıraya alır. Bu mesaj, kullanıcının cihazı çevrimiçi olana ve push hizmeti iletileri gönderene kadar kuyrukta kalır. Push hizmetine verebileceğiniz talimatlar, push mesajının nasıl sıraya alınacağını belirler.

Talimatlar aşağıdaki gibi ayrıntıları içerir:

  • Bir push mesajının geçerlilik süresi. Bu ayar, bir mesajın kaldırılmadan ve teslim edilmeden önce ne kadar süre boyunca kuyrukta beklemesi gerektiğini tanımlar.

  • Mesajın aciliyetini tanımlayın. Bu, push hizmetinin yalnızca yüksek öncelikli iletileri göndererek kullanıcıların pil ömrünü koruması durumunda yararlıdır.

  • Bir push mesajına "konu" adı verin. Bu ad, bekleyen mesajların yerini yeni mesajla alır.

Sunucunuz bir push mesajı göndermek istediğinde bir push hizmetine web push protokolü isteği gönderir.

3. Adım: Etkinliği kullanıcının cihazına gönderin

Bir push mesajı gönderdikten sonra push hizmeti, aşağıdaki olaylardan biri gerçekleşene kadar mesajınızı sunucusunda saklar:

  1. Cihaz internete bağlanır ve push hizmeti iletiyi dağıtır.
  2. Mesajın süresi dolar. Bu durumda push hizmeti, mesajı sıradan kaldırır ve mesaj hiçbir zaman teslim edilmez.

Push hizmeti bir mesaj gönderdiğinde tarayıcı mesajı alır, tüm verilerin şifresini çözer ve hizmet çalışanınıza bir push etkinliği gönderir.

Hizmet çalışanı, "özel" bir JavaScript dosyasıdır. Tarayıcı, sayfanız açık olmadan bu JavaScript'i yürütebilir. Hatta tarayıcı kapalıyken bile bu JavaScript'i çalıştırabilir. Hizmet çalışanları, web sayfasında bulunmayan API'lere (ör. hizmet çalışanı komut dosyasında bulunmayan API'ler) de sahiptir.

Service Worker'ın "push" etkinliği içinde olduğundan tüm arka plan görevlerini gerçekleştirebilirsiniz. Analiz çağrıları yapabilir, sayfaları çevrimdışı olarak önbelleğe alabilir ve bildirimleri gösterebilirsiniz.

Bir push hizmetinden kullanıcının cihazına push mesajı gönderildiğinde hizmet çalışanınız bir push etkinliği alır.

Push mesajlaşma akışının tamamı budur.

Sonraki adımlar

Codelab uygulamaları