Web push ile ilgili bir sorunla karşılaştığınızda sorunun hata ayıklamasını yapmak veya yardım almak zor olabilir. Bu dokümanda, sık karşılaşılan sorunlardan bazıları ve Chrome veya Firefox'ta bir hata bulduğunuzda yapmanız gerekenler özetlenmektedir.
İtme işlemini hata ayıklama konusuna geçmeden önce, hizmet işçilerinin hata ayıklamasıyla ilgili sorunlarla karşılaşabilirsiniz. Dosya güncellenmeyebilir, kaydedilmeyebilir veya genel olarak alışılmadık davranışlar görebilirsiniz. Hizmet çalışanı geliştirme konusunda yeniyseniz mutlaka göz atmanızı önerdiğim hizmet çalışanlarında hata ayıklamayla ilgili muhteşem bir doküman var.
Web push'i geliştirirken ve test ederken kontrol edilmesi gereken iki farklı aşama vardır. Her aşamanın kendine özgü ortak sorunları vardır:
- Mesaj gönderme: Mesaj göndermenin başarılı olduğundan emin olun.
201 HTTP kodu alırsınız. Aksi takdirde:
- Yetkilendirme Hataları olup olmadığı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 bilgi edinmek için HTTP Durum Kodları bölümüne bakın.
- Mesaj alma: İleti başarıyla gönderebiliyorsanız ancak tarayıcıda ileti alınmıyorsa:
- Ş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ıyla ilgili 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ında 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 göndermek üzere Hata Raporu Gönderme bölümüne bakın.
Başlamadan önce Firefox ve Mozilla AutoPush Hizmeti'nin harika hata mesajları olduğunu hatırlatmak isterim. Takılırsanız ve sorunun ne olduğundan emin değilseniz Firefox'ta test edip daha yararlı bir hata mesajı alıp almadığınızı kontrol edin.
Yetkilendirme sorunları
Yetkilendirme sorunları, geliştiricilerin web push'i kullanmaya başlarken karşılaştığı en yaygın sorunlardan biridir. Bu genellikle sitelerin Uygulama Sunucusu Anahtarlarının (VAPID anahtarları) yapılandırmasıyla ilgili bir sorundur.
Hem Firefox hem de Chrome'da push'i desteklemenin en kolay yolu, subscribe()
çağrısında bir applicationServerKey
sağlamaktır. Bunun dezavantajı, ön uç ile sunucunuzun anahtarları arasındaki herhangi bir tutarsızlığın yetkilendirme hatasına yol açmasıdır.
Chrome ve FCM'de
Push hizmeti olarak FCM kullanan Chrome için, tümünün uygulama sunucusu anahtarlarını içeren çeşitli farklı hatalar için FCM'den bir 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
başlığı tanımlamazsanız. - Kullanıcıyı abone etmek için kullanılan uygulama anahtarınız, Authorization başlığını imzalamak için kullanılan anahtarla eşleşmiyor.
- JWT'nizdeki süre geçersizdir. Yani süre 24 saati aşıyor veya JWT'nin süresi dolmuş.
- JWT hatalı biçimlendirilmiş veya geçersiz değerlere sahip.
Hata yanıtı tam olarak 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 sorunun daha iyi anlaşılıp anlaşılamayacağını görmek için Firefox'ta test yapmayı deneyin.
Firefox ve Mozilla AutoPush
Firefox ve Mozilla AutoPush, Authorization
sorunları için kullanıcı dostu bir hata mesajı grubu sağlar.
Ayrıca, Authorization
üstbilgisi push isteğinize dahil edilmezse 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 geçerlilik süresi dolduysa jetonun süresinin dolduğunu belirten 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ındaki 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 (ör. "alg" değeri beklenmedik bir değerse) Mozilla AutoPush'ten 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 201 olmayan 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, bir push hizmetinde hız sınırına ulaştı. Hizmetten gelen yanıtta, başka bir istek gönderilebilmesi için ne kadar süre geçmesi gerektiğini belirten bir "Retry-After" üstbilgisi bulunmalıdır. |
400 | Geçersiz istek. Başlıklarınızdan biri geçersiz veya kötü biçimlendirilmiş. |
404 | Bulunamadı. Bu durumda, PushSubscription'ı arka uçtan silmeniz ve kullanıcıyı yeniden abone etme fırsatı için beklemeniz gerekir. |
410 | Gitti. Abonelik artık geçerli değil ve arka uçtan kaldırılmalıdır. Bu durum, bir "PushSubscription" üzerinde "unsubscribe" çağrısı yapılarak yeniden üretilebilir. |
413 | Yük boyutu çok büyük. Bir push hizmetinin desteklemesi gereken minimum yük boyutu 4.096 bayttır (veya 4 kb). Daha büyük bir dosya bu hataya neden olabilir. |
HTTP durum kodu bu listede yoksa ve hata mesajı yardımcı değilse durum koduna başvurup başvurulmadığını ve durum kodunun ne zaman kullanılabileceğine dair bir senaryoyu görmek için Web Aktarma Protokolü spesifikasyonunu kontrol edin.
Yük şifreleme sorunu
Bir push mesajını başarıyla tetikleyebiliyorsanız (ör. 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 genellikle 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:
Sorunun Chrome'da 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 ş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ç vardır:
- Peter Beverloo tarafından geliştirilen Push Encryption Verifier aracı.
- Web Push: Mozilla'nın Veri Şifreleme Test Sayfası
Bağlantı sorunu
Hizmet çalışanınızda bir push etkinliği almıyorsanız ve şifre çözme hatası görmüyorsanız tarayıcı bir push hizmetine bağlanamıyor olabilir.
Chrome'da, about://gcm-internals
bölümündeki "Mesaj Alma Günlüğü"nü inceleyerek tarayıcının mesaj alıp almadığını kontrol edebilirsiniz.
İletinin zamanında gelmediğini düşünü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 sorunu çözmezse lütfen aşağıda önerilen şekilde bir hata raporu gönderin.
Hata raporu gönderme
Yukarıdakilerin hiçbiri sorununuzla ilgili yardımcı olmadıysa ve sorunun ne olabileceğine dair bir işaret yoksa lütfen sorun yaşadığınız tarayıcı için sorun bildirin:
Chrome için sorunu şu adresten bildirebilirsiniz: https://bugs.chromium.org/p/chromium/issues/list Firefox için sorunu şu adrese giderek iletebilirsiniz: 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 50 sürümü, Chrome 51 sürümü, Firefox 50 sürümü, Firefox 51 sürümü).
- Sorunu gösteren bir örnek
PushSubscription
. - Örnek istekler (ör. üstbilgiler dahil olmak üzere bir push hizmetine gönderilen ağ isteklerinin içeriği) ekleyin.
- Ağ isteklerinden alınan örnek yanıtları da ekleyin.
Tekrarlanabilir bir örnek (kaynak kodu ya da 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 Bildirimlerine Genel Bakış
- Push bildirimleri nasıl çalışır?
- Kullanıcıları abone etme
- İzin kullanıcı deneyimi
- Web Push Kitaplıklarıyla Mesaj Gönderme
- Web Push Protokolü
- Push Etkinliklerini İşleme
- Bildirim Görüntüleme
- Bildirim Davranışı
- Yaygın Bildirim Kalıpları
- Push Bildirimleri ile ilgili SSS
- Sık Karşılaşılan Sorunlar ve Hata Bildirme