Yaygın Sorunlar ve Hata Bildirme

Matt Gaunt

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:
  • Mesaj Alma: Mesajı başarıyla gönderebiliyor ancak tarayıcıda mesaj almıyorsanız:

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:

Şifre çözme iletisi içeren Firefox Geliştirici Araçları.

Sorunun Chrome'da bu olup olmadığını kontrol etmek için aşağıdakileri yapın:

  1. about://gcm-internals sayfasına gidin ve "Kaydı Başlat" düğmesini tıklayın.

Chrome GCM dahili verileri kaydı.

  1. Push mesajını tetikleyin ve "Message Decryption Failure Log" (İleti Şifre Çözme Hata Günlüğü) altına bakın.

GCM dahili şifre çözme günlüğü.

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:

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.

GCM dahili kullanıcıları ileti günlüğünü alır.

İletinin zamanında ulaştığını görmüyorsanız tarayıcınızın bağlantı durumunun CONNECTED olduğundan emin olun:

GCM dahili bağlantı durumu.

"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

Code Labs