Web Push'ta bir sorunla karşılaştığınızda, sorunu ayıklamak veya yardım bulmak zor olabilir. Bu dokümanda, sık karşılaşılan sorunlardan bazıları ve Chrome veya Firefox'ta hata bulduğunuzda yapmanız gerekenler açıklanmaktadır.
Hata ayıklama işlemine geçmeden önce Service Worker'ların kendisinde hata ayıklama, dosyanın güncellenmemesi, kaydedilemediği veya genellikle olağan dışı davranışla ilgili sorunlarla karşılaşmış olabilirsiniz. Service Worker geliştirme konusunda yeniyseniz hizmet çalışanları için hata ayıklamayla ilgili muhteşem bir belgeden yararlanmanızı önemle tavsiye ederiz.
Web push'u geliştirirken ve test ederken işaretlenmesi gereken iki farklı aşama vardır. Bu aşamaların her birinin kendine ait yaygın sorunları / sorunları vardır:
- İleti Gönderme: İleti gönderme işleminin başarılı olduğundan emin olun.
201 HTTP kodu alıyor olmalısınız. Değilseniz:
- Yetkilendirme Hatalarını Kontrol Edin: Yetkilendirme hata mesajı alırsanız Yetkilendirme Sorunları bölümüne bakın.
- Diğer API Hataları: 201 olmayan bir durum kodu yanıtı alırsanız sorunun nedeni hakkında yol gösterici bilgiler için HTTP Durum Kodları bölümüne bakın.
- Mesaj Alma: Mesajı başarıyla gönderebiliyor ancak tarayıcıda mesaj almıyorsanız:
- Şifreleme Sorunlarını kontrol edin: Yük Şifreleme Sorunu Bölümü'ne bakın.
- Bağlantı Sorunlarını kontrol edin: Sorun Chrome'da ise bir bağlantı olabilir. Daha fazla bilgi için Bağlantı Sorunları bölümüne bakın.
Push mesajı gönderip alamıyorsanız ve bu dokümandaki ilgili bölümler sorunun giderilmesine yardımcı olmuyorsa push mekanizmasının kendisinde bir hata olabilir. Bu durumda, hata düzeltme sürecini hızlandırmak için gerekli tüm bilgileri içeren iyi bir hata raporu oluşturmak üzere Hata Raporlarını Yükseltme bölümüne bakın.
Başlamadan önce Firefox ve Mozilla AutoPush Hizmeti'nde çok sayıda hata mesajı bulunduğunu belirtmek isteriz. Takılırsanız ve sorunun ne olduğundan emin değilseniz, Firefox'ta test edin ve daha yararlı bir hata mesajı alıp almadığınıza bakın.
Yetkilendirme sorunları
Yetkilendirme sorunları, geliştiricilerin web push ile işe başlarken en sık karşılaştığı sorunlardan biridir. Bu genellikle bir sitenin Uygulama Sunucusu Anahtarlarının (diğer adıyla VAPID anahtarları) yapılandırmasıyla ilgili bir sorundur.
Hem Firefox'ta hem de Chrome'da push işlemini desteklemenin en kolay yolu, subscribe()
çağrısında bir applicationServerKey
sağlamaktır. Kötü tarafı ise kullanıcı arabiriminiz ile sunucunuzun anahtarları arasındaki herhangi bir tutarsızlığın yetkilendirme hatasına neden olmasıdır.
Chrome ve FCM'de
Push hizmeti olarak FCM'yi kullanan Chrome'da, hepsi uygulama sunucusu anahtarlarını içeren çeşitli hatalar için FCM'den UnauthorizedRegistration
yanıtı alırsınız.
Aşağıdaki durumlardan herhangi birinde UnauthorizedRegistration
hatası alırsınız:
- FCM'ye gönderilen istekte
Authorization
üstbilgisi tanımlamazsanız. - Kullanıcıyı abone yapmak için kullanılan uygulama anahtarınız, Yetkilendirme başlığını imzalamak için kullanılan anahtarla eşleşmiyor.
- JWT'nizdeki geçerlilik süresi geçersiz, yani geçerlilik süresi 24 saati aşıyor veya JWT'nin süresi dolmuş.
- JWT bozuk veya geçersiz değerler içeriyor.
Tam hata yanıtı aşağıdaki gibi görünür:
<html>
<head>
<title>UnauthorizedRegistration</title>
</head>
<body bgcolor="#FFFFFF" text="#000000">
<h1>UnauthorizedRegistration</h1>
<h2>Error 400</h2>
</body>
</html>
Chrome'da bu hata mesajını alırsanız sorun hakkında daha fazla analiz sağlayıp sağlayamayacağını görmek için Firefox'ta test etmeyi düşünebilirsiniz.
Firefox ve Mozilla AutoPush
Firefox ve Mozilla AutoPush, Authorization
sorunları için bir dizi hata mesajı sağlar.
Ayrıca, Authorization
üstbilgisi push isteğinize dahil değilse Mozilla AutoPush'tan Unauthorized
hata yanıtı alırsınız.
{
"errno": 109,
"message": "Request did not validate missing authorization header",
"code": 401,
"more_info": "http://autopush.readthedocs.io/en/latest/http.html#error-codes",
"error": "Unauthorized"
}
JWT'nizdeki süre sonu dolduysa jetonun süresinin dolduğunu belirten bir mesajla Unauthorized
hatası da alırsınız.
{
"code": 401,
"errno": 109,
"error": "Unauthorized",
"more_info": "http://autopush.readthedocs.io/en/latest/http.html#error-codes",
"message": "Request did not validate Invalid bearer token: Auth expired"
}
Uygulama sunucusu anahtarları kullanıcının abone olduğu zaman ile Yetkilendirme başlığının imzalandığı zaman arasında farklıysa Not Found
hatası döndürülür:
{
"errno": 102,
"message": "Request did not validate invalid token",
"code": 404,
"more_info": "http://autopush.readthedocs.io/en/latest/http.html#error-codes",
"error": "Not Found"
}
Son olarak, JWT'nizde geçersiz bir değer varsa (örneğin "alg" değeri beklenmedik bir değerse) Mozilla AutoPush'tan aşağıdaki hatayı alırsınız:
{
"code": 401,
"errno": 109,
"error": "Unauthorized",
"more_info": "http://autopush.readthedocs.io/en/latest/http.html#error-codes",
"message": "Request did not validate Invalid Authorization Header"
}
HTTP durum kodları
Bir push hizmetinden gelen 201 dışı yanıt koduna neden olabilecek çeşitli sorunlar vardır. Aşağıda HTTP durum kodlarının bir listesi ve web push ile ilgili anlamları bulunmaktadır.
Durum Kodu | Açıklama |
---|---|
429 | Çok fazla istek var. Uygulama sunucunuz bir push hizmetiyle hız sınırına ulaştı. Hizmetten gelen yanıtta, başka bir isteğin ne kadar süre sonra yapılabileceğini belirten bir "Retry-After" başlığı bulunmalıdır. |
400 | Geçersiz istek. Başlıklarınızdan biri geçersiz veya kötü biçimlendirilmiş. |
404 | Bulunamadı. Bu durumda, Push Aboneliğini arka uçunuzdan silmeniz ve kullanıcıya yeniden abone olma fırsatını beklemeniz gerekir. |
410 | Gitti. Abonelik artık geçerli değildir ve arka uçtan kaldırılması gerekir. Bu, bir "PushSubscription"da "unsubscribe()" çağrısıyla yeniden oluşturulabilir. |
413 | Yük boyutu çok büyük. Bir push hizmetinin desteklemesi gereken minimum boyut yükü 4.096 bayttır (veya 4 kb). Daha büyük değerler bu hataya neden olabilir. |
HTTP durum kodu bu listede yoksa ve hata mesajı yardımcı olmuyorsa durum kodunun ne zaman kullanılabileceğine dair bir senaryoyla birlikte durum koduna referans verilip verilmediğini görmek için Web Push Protokolü spesifikasyonunu kontrol edin.
Yük şifreleme sorunu
Push mesajını başarıyla tetikleyebiliyorsanız (ör. bir web push hizmetine mesaj gönderip 201 yanıt kodu alabiliyorsanız) ancak push etkinliği hizmet çalışanınızda hiçbir zaman etkinleşmiyorsa bu durum normalde tarayıcının aldığı mesajın şifresini çözemediğini gösterir.
Bu durumda Firefox'un Geliştirici Araçları konsolunda aşağıdaki gibi bir hata mesajı görürsünüz:
Sorunun Chrome'da bu olup olmadığını kontrol etmek için aşağıdakileri yapın:
- about://gcm-internals sayfasına gidin ve "Kaydı Başlat" düğmesini tıklayın.
- Push mesajını tetikleyin ve "Message Decryption Failure Log" (İleti Şifre Çözme Hata Günlüğü) altına bakın.
Yükün şifresinin çözülmesiyle ilgili bir sorun varsa yukarıda gösterilene benzer bir hata görürsünüz. (Ayrıntılar sütunundaki AES-GCM decryption failed
mesajına dikkat edin.)
Sorununuz buysa şifrelemede hata ayıklamaya yardımcı olabilecek birkaç araç bulunmaktadır:
- Peter Beverloo'nun Push Encryption Doğrulayıcı aracı.
- Web Push: Mozilla'dan Veri Şifreleme Test Sayfası
Bağlantı sorunu
Service Worker'ınızda push etkinliği almıyorsa ve şifre çözme hatası görmüyorsanız tarayıcı push hizmetine bağlanamıyor olabilir.
Chrome'da, about://gcm-internals
içindeki "Send Message Log" (İleti Günlüğü) dosyasını (sic) inceleyerek tarayıcının mesaj alıp almadığını kontrol edebilirsiniz.
İletinin zamanında ulaştığını görmüyorsanız tarayıcınızın bağlantı durumunun CONNECTED
olduğundan emin olun:
"BAĞLI" değilse mevcut profilinizi silmeniz ve yeni bir profil oluşturmanız gerekebilir. Bu da sorunu çözmezse lütfen aşağıda önerilen şekilde bir hata raporu gönderin.
Hata raporlarını yükseltme
Yukarıdakilerin hiçbiri sorununuzu çözmediyse ve sorunun ne olabileceğine dair bir belirti yoksa, lütfen sorun yaşadığınız tarayıcıyla ilgili olarak sorun bildirin:
Chrome için sorunu şu adresten iletebilirsiniz: https://bugs.chromium.org/p/chromium/issues/list Firefox için sorunu şu adresten iletmeniz gerekir: https://bugzilla.mozilla.org/
İyi bir hata raporu sağlamak için aşağıdaki ayrıntıları sağlamanız gerekir:
- Test ettiğiniz tarayıcılar (ör. Chrome sürüm 50, Chrome sürüm 51, Firefox sürüm 50, Firefox sürüm 51).
- Sorunu gösteren bir
PushSubscription
örneği. - Örnek istekleri (ör. başlıklar dahil bir push hizmetine yapılan ağ isteklerinin içeriği) ekleyin.
- Ağ isteklerinden gelen örnek yanıtları da ekleyin.
Tekrarlanabilir bir örnek (kaynak kodu veya barındırılan bir web sitesi) sağlayabilirseniz, bu genellikle sorunun teşhis edilmesini ve çözülmesini hızlandırır.
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