Web push ile ilgili bir sorunla karşılaştığınızda sorunu gidermek veya yardım bulmak zor olabilir. Bu belgede, sık karşılaşılan sorunlardan bazıları ve Chrome veya Firefox'ta bir hata bulursanız ne yapmanız gerektiği açıklanmaktadır.
Push hata ayıklama konusuna girmeden önce, hizmet çalışanlarının kendilerinde hata ayıklama, dosyanın güncellenmemesi, kaydolmaması veya genel olarak olağan dışı davranışlarla ilgili sorunlar yaşıyor olabilirsiniz. Hizmet çalışanı geliştirmeye yeni başladıysanız hizmet çalışanlarında hata ayıklama ile ilgili bu muhteşem dokümana göz atmanızı kesinlikle öneririm.
Web push bildirimlerini geliştirirken ve test ederken kontrol edilmesi gereken iki farklı aşama vardır. Her aşamanın kendine özgü yaygın sorunları vardır:
- Mesaj gönderme: Mesaj gönderme işleminin başarılı olduğundan emin olun.
201 HTTP kodu almanız gerekir. Eğer:
- Yetkilendirme hatalarını kontrol edin: Yetkilendirme hatası 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 bilgi edinmek için HTTP Durum Kodları bölümüne bakın.
- Mesaj alma: Mesajı başarıyla gönderebiliyor ancak tarayıcıda alamı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'daysa bağlantı sorunu 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 hatalarını ayıklamanıza yardımcı olmuyorsa push mekanizmasının kendisinde bir hata bulmuş olabilirsiniz. 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 Raporu Oluşturma bölümüne bakın.
Başlamadan önce belirtmek istediğim bir şey var: Firefox ve Mozilla AutoPush hizmetinin hata mesajları çok iyi. Takılıp kalırsanız ve sorunun ne olduğundan emin değilseniz Firefox'ta test edin ve daha faydalı bir hata mesajı alıp almadığınıza bakın.
Yetkilendirme sorunları
Yetkilendirme sorunları, geliştiricilerin web push'u kullanmaya başladıklarında en sık karşılaştıkları sorunlardan biridir. Bu genellikle bir sitenin Uygulama Sunucusu Anahtarları (VAPID anahtarları olarak da bilinir) yapılandırmasıyla ilgili bir sorundur.
Hem Firefox hem de Chrome'da push bildirimlerini desteklemenin en kolay yolu, subscribe() çağrısında bir applicationServerKey sağlamaktır. Dezavantajı ise ön ucunuz 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, 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
Authorizationbaşlığı tanımlamazsanız. - Kullanıcının abone olması 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 bitiş tarihi geçersiz. Örneğin, geçerlilik bitiş tarihi 24 saati aşıyor veya JWT'nin süresi dolmuş.
- JWT hatalı biçimlendirilmiş veya geçersiz değerler içeriyor.
Hata yanıtının tamamı şu şekilde 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 sorunu daha iyi anlamak için Firefox'ta test etmeyi deneyin.
Firefox ve Mozilla AutoPush
Firefox ve Mozilla AutoPush, Authorization sorunları için anlaşılır hata mesajları sunar.
Ayrıca, push isteğinize Authorization üstbilgisi eklenmezse 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'nizin geçerlilik süresi dolduysa jetonun süresinin dolduğunu açıklayan bir mesaj içeren 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"
}
Kullanıcının abone olduğu zaman ile yetkilendirme başlığının imzalandığı zaman arasında uygulama sunucusu anahtarları 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 beklenmeyen 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ı
Push hizmetinden 201 dışında bir yanıt kodu alınmasına neden olabilecek çeşitli sorunlar vardır. Aşağıda, HTTP durum kodlarının ve web push ile ilgili anlamlarının listesi verilmiştir.
| Durum Kodu | Açıklama |
|---|---|
| 429 | Çok fazla istek var. Uygulama sunucunuz, push hizmetiyle ilgili sıklık sınırlamasına ulaştı. Hizmetten gelen yanıt, başka bir isteğin ne kadar süre sonra yapılabileceğini belirten bir "Retry-After" üstbilgisi içermelidir. |
| 400 | Geçersiz istek. Başlıklarınızdan biri geçersiz veya kötü biçimlendirilmiş. |
| 404 | Bulunamadı. Bu durumda, PushSubscription'ı arka ucunuzdan silmeniz ve kullanıcıya yeniden abone olma fırsatını beklemeniz gerekir. |
| 410 | Yoktur. Abonelik artık geçerli değildir ve arka ucunuzdan kaldırılmalıdır. Bu sorun, `PushSubscription` üzerinde `unsubscribe()` çağrılarak yeniden oluşturulabilir. |
| 413 | Yük boyutu çok büyük. Push hizmetinin desteklemesi gereken minimum yük boyutu 4.096 bayttır (veya 4 KB). Daha büyük dosyalar bu hataya neden olabilir. |
HTTP durum kodu bu listede yoksa ve hata mesajı yardımcı olmuyorsa durum kodunun, kullanılabileceği bir senaryoyla birlikte referans verilip verilmediğini görmek için Web Push Protokolü spesifikasyonunu kontrol edin.
Yük şifreleme sorunu
Bir push mesajını başarıyla tetikleyebiliyorsanız (yani bir web push hizmetine mesaj gönderip 201 yanıt kodu alıyorsanız) ancak push etkinliği hizmet çalışanınızda hiçbir zaman tetiklenmiyorsa bu durum normalde tarayıcının aldığı mesajın şifresini çözemediğini gösterir.
Bu durumda, Firefox'un DevTools konsolunda aşağıdaki gibi bir hata mesajı görürsünüz:

Chrome'da sorunun bu olup olmadığını kontrol etmek için aşağıdakileri yapın:
- about://gcm-internals adresine gidin ve "Kaydı Başlat" düğmesini tıklayın.

- Bir push mesajı tetikleyin ve "Mesaj Şifre Çözme Hatası Günlüğü"ne bakın.

Yükün şifre çözme işlemiyle 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 şifreleme hatalarını ayıklamanıza yardımcı olabilecek birkaç araç vardır:
- Peter Beverloo tarafından geliştirilen Push Encryption Verifier aracı.
- Web Push: Data Encryption Test Page by Mozilla (Web Push: Mozilla'nın Veri Şifreleme Test Sayfası)
Bağlantı sorunu
Hizmet çalışanınızda push etkinliği almıyorsanız ve şifre çözme hatası görmüyorsanız tarayıcı, push hizmetine bağlanamıyor olabilir.
Chrome'da, tarayıcının mesaj alıp almadığını kontrol etmek için about://gcm-internals adresindeki "Receive Message Log" (Mesaj Alma Günlüğü) bölümünü inceleyebilirsiniz.

Mesajın 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 silip yeni bir profil oluşturmanız gerekebilir. Bu işlem de sorunu çözmezse lütfen aşağıda önerildiği şekilde bir hata raporu oluşturun.
Hata raporu gönderme
Yukarıdaki adımların hiçbiri sorununuzu çözmüyorsa ve sorunun ne olabileceğine dair bir işaret yoksa lütfen sorun yaşadığınız tarayıcıyla ilgili bir sorun bildirin:
Chrome için sorunu şu adresten bildirebilirsiniz: https://bugs.chromium.org/p/chromium/issues/list Firefox için sorunu şu adresten bildirebilirsiniz: https://bugzilla.mozilla.org/
İyi bir hata raporu oluşturmak için aşağıdaki bilgileri 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 örnek bir
PushSubscription. - Örnek istekleri (ör. başlıklar dahil olmak üzere push hizmetine gönderilen ağ isteklerinin içeriği) ekleyin.
- Ağ isteklerinden gelen örnek yanıtları da ekleyin.
Yeniden üretilebilir bir örnek (kaynak kodu veya barındırılan bir web sitesi) sağlayabilirseniz sorunun teşhis edilmesi ve çözülmesi genellikle daha hızlı olur.
Sonraki adımlar
- Web Push Bildirimlerine Genel Bakış
- Push'un İşleyiş Şekli
- Kullanıcı abone etme
- İzin kullanıcı deneyimi
- Web Push kitaplıklarıyla mesaj gönderme
- Web Push Protokolü
- Push etkinliklerini işleme
- Bildirim gösterme
- Bildirim Davranışı
- Yaygın Bildirim Kalıpları
- Push bildirimleri ile ilgili SSS
- Sık Karşılaşılan Sorunlar ve Hata Bildirme