Tarayıcı kapalıyken push neden çalışmıyor?
Bu soru epey öne çıkıyor. Bunun nedeni büyük ölçüde, akıl yürütmeyi ve anlamayı zorlaştıran birkaç senaryo olmasıdır.
Android ile başlayalım. Android OS, push mesajları dinleyecek ve uygulama kapalı olsun ya da olmasın, push mesajları dinleyecek ve bir mesaj aldıktan sonra, push mesajı işlemek için uygun Android uygulamasını uyandıracak şekilde tasarlanmıştır.
Bu, Android'deki tüm tarayıcılarla tam olarak aynıdır. Bir push mesajı alındığında tarayıcı uyandırılır ve tarayıcı, Service Worker'ınızı uyandırarak push etkinliğini dağıtır.
Masaüstü işletim sistemlerinde ise daha incelikli ve bunu Mac OS X'te açıklamak en kolayıdır, çünkü farklı senaryoları açıklamaya yardımcı olan görsel bir gösterge vardır.
Mac OS X'te, yuvada yer alan uygulama simgesinin altındaki işaretlemeden bir programın çalışıp çalışmadığını anlayabilirsiniz.
Bir sonraki yuvada yer alan iki Chrome simgesini karşılaştırırsanız, simgenin altındaki işaretlemeden de gösterildiği gibi soldaki Chrome simgesini çalışırken, sağdaki Chrome çalışmıyor demektir. Bu nedenle altındaki işaret yoktur.
![OS X örneği](https://web.dev/static/articles/push-notifications-faq/image/example-os-x-72bc3d5fa52ff.png?authuser=5&hl=tr)
Masaüstünde push mesajları alma bağlamında, mesajlar yalnızca tarayıcı çalışırken (yani simgenin altında işaret olduğunda) gösterilir.
Bu durumda, tarayıcı arka planda çalıştığı için hiçbir pencerenin açık olmaması ve Service Worker'da push mesajını almaya devam edeceğiniz anlamına gelir.
Yalnızca tarayıcının tamamen kapalı olduğu, yani hiç çalışmadığı (işaretleme yok) bir push aktarımı alınamaz. Aynı durum Windows için de geçerlidir, ancak Chrome'un arka planda çalışıp çalışmadığını belirlemek biraz daha zordur.
Ana ekran web uygulamamın anında tam ekran açılmasını nasıl sağlayabilirim?
Android için Chrome'da, ana ekrana bir web uygulaması eklenebilir ve web uygulaması ana ekrandan açıldığında, aşağıda gösterildiği gibi URL çubuğu olmadan tam ekran modunda başlatılabilir.
![Ana ekran simgesini tam ekran yapma](https://web.dev/static/articles/push-notifications-faq/image/home-screen-icon-fullscr-e034b276ccc7e.png?authuser=5&hl=tr)
Bu deneyimin tutarlı olmasını sağlamak için geliştiriciler tıklayan bildirimlerinin web uygulamalarını da tam ekranda açmasını ister.
Bu yöntemi Chrome "bir tür" olarak uygulamıştır, ancak bu yöntemi güvenilir bulmamanız ve gerekçelendirmesi zor olabilir. İlgili uygulama ayrıntıları:
Bu, kullanıcınız ana ekran simgesi aracılığıyla sitenizi düzenli olarak ziyaret etmediği sürece bildirimlerinizin normal tarayıcı kullanıcı arayüzünde açılacağı anlamına gelir.
Bu sorun üzerinde daha fazla çalışma yapılacak.
Bu, neden web yuvalarından daha iyidir?
Hizmet çalışanı, tarayıcı penceresi kapatıldığında canlandırılabilir. Bir web soketi, yalnızca tarayıcı ve web sayfası açık kaldığı sürece çalışır.
GCM, FCM, Web Push ve Chrome'un kapsamı nedir?
Bu sorunun çeşitli yönleri var. Açıklamanın en kolay yolu web push ve Chrome'un geçmişini incelemektir. (Merak etmeyin, kısa bir metin.)
Aralık 2014
Chrome, web push'u ilk kez uyguladığında Chrome, push mesajlarının sunucudan tarayıcıya gönderilmesini desteklemek için Google Cloud Messaging'i (GCM) kullandı.
Bu web push işlemi değildi. Chrome ve GCM'nin bu erken kurulumunun "gerçek" web push olmamasının birkaç nedeni vardır.
- GCM, geliştiricilerin Google Developers Console'da hesap oluşturmalarını gerektirir.
- Chrome ve GCM'nin, mesajlaşmayı doğru bir şekilde ayarlayabilmesi için bir web uygulaması tarafından paylaşılacak özel bir gönderen kimliğine ihtiyacı vardı.
- GCM'nin sunucuları, web standardı olmayan özel bir API isteğini kabul etti.
Temmuz 2016
Temmuz ayında web push'ta yeni bir özellik kullanıma sunuldu: Uygulama Sunucusu Anahtarları (veya spesifikasyon olarak bilinen VAPID). Chrome bu yeni API için destek eklediğinde, mesajlaşma hizmeti olarak GCM yerine Firebase Cloud Messaging'i (FCM olarak da bilinir) kullandı. Bu, birkaç nedenden dolayı önemlidir:
- Chrome ve Uygulama Sunucu Anahtarları'nın Google veya Firebase ile ayarlanması için herhangi bir proje gerekmez. Bu gerçekten işe yarıyor.
- FCM, tüm web aktarma hizmetlerinin desteklediği API olan web aktarma protokolünü destekler. Yani, tarayıcı hangi push hizmetini kullanırsa kullansın, siz aynı tür istekte bulunur ve mesajı gönderir.
Bugün neden kafa karıştırıcı?
İçeriklerin çoğu GCM veya FCM'ye gönderme yapan web push konusunda yazılmış olması nedeniyle şimdi büyük bir kafa karışıklığı yaşanıyor. İçerik GCM'ye referans veriyorsa muhtemelen bunu içeriğin eski bir içerik olduğunu VEYA Chrome'a çok fazla odaklandığını gösteren bir işaret olarak değerlendirmelisiniz. (Bunu bir dizi eski yayında yapmaktan suçlıyım.)
Bunun yerine web push'u, mesaj gönderip almayı yönetmek için push hizmeti kullanan ve push hizmetinin "web push protokolü" isteğini kabul ettiği bir tarayıcıdan oluştuğunu düşünebilirsiniz. Bu terimleri göz önünde bulundurursanız hangi tarayıcıyı ve hangi push hizmetini kullandığını göz ardı ederek işe koyulabilirsiniz.
Bu kılavuz, web push'un standart yaklaşımına odaklanmak için yazılmıştır ve başka hiçbir şeyi kasıtlı olarak dikkate almaz.
Firebase'in bir JavaScript SDK'sı vardır. Ne ve Neden?
Firebase web SDK'sını bulan ve JavaScript'e yönelik bir mesajlaşma API'si olduğunu fark edenler, bunun web push'tan farkını merak ediyor olabilir.
Mesajlaşma SDK'sı (Firebase Cloud Messaging JS SDK'sı), web push uygulamasını kolaylaştırmak için arka planda bazı püf noktaları yapar.
PushSubscription
ve onun çeşitli alanları hakkında endişelenmek yerine, yalnızca bir FCM jetonu (dize) konusunda endişelenmeniz gerekir.- Her kullanıcının jetonlarını kullanarak push mesajlarını tetiklemek için özel FCM API'yi kullanabilirsiniz. Bu API, yükleri şifrelemeyi gerektirmez. POST isteği gövdesinde bir düz metin yükü gönderebilirsiniz.
- FCM'nin özel API'si, özel özellikleri (ör. FCM Topics) destekler (web'de de çalışır ancak yeterince belgelenmemiştir).
- Son olarak, FCM Android, iOS ve web'i destekler. Bu nedenle, bazı ekipler için mevcut projelerde çalışmak daha kolaydır.
Bunun için web itici gücünü arka planda kullansa da amacı bunu soyutlamaktır.
Önceki soruda belirttiğim gibi, web push'u yalnızca bir tarayıcı ve push hizmeti olarak kabul ediyorsanız Firebase'deki Messaging SDK'yı, web push uygulamasını basitleştiren bir kitaplık olarak düşünebilirsiniz.
Sonraki adımlar
- Web Push Bildirimine Genel Bakış
- Push'un İşleyişi
- Kullanıcıya Abone Olma
- İzin Kullanıcı Deneyimi
- Web Push Kitaplıklarıyla Mesaj Gönderme
- Web Push Protokolü
- Push Etkinliklerini Yönetme
- Bildirim Görüntüleme
- Bildirim Davranışı
- Yaygın Bildirim Kalıpları
- Push Bildirimleriyle İlgili SSS
- Sık Karşılaşılan Sorunlar ve Hata Bildirme