Yaygın Sorunlar ve Hata Bildirme

Matt Gaunt

Web push'iyle 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 bazı sorunlar ve Chrome ya da Firefox'ta bir hata bulursanız yapmanız gerekenler açıklanmaktadır.

İ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 hizmet çalışanlarında hata ayıklamayla ilgili harika bir doküman var. Bu dokümanı incelemenizi önemle tavsiye ederim.

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:
  • Mesaj alma: İleti başarıyla gönderebiliyorsanız ancak tarayıcıda ileti alınmıyorsa:

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 belirtmek istediğim bir nokta, Firefox ve Mozilla AutoPush Hizmeti'nin mükemmel hata mesajları olmasıdır. Sorunla karşılaşırsanız ve sorunun ne olduğundan emin değilseniz Firefox'ta test edin ve daha faydalı 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 sorun genellikle sitenin uygulama sunucusu anahtarlarının (VAPID anahtarları olarak da bilinir) yapılandırmasıyla ilgilidir.

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ı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 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 süre 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ı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ı yararlı değilse durum kodunun, ne zaman kullanılabileceğine dair 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 (ö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:

Şifre çözme mesajı 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 adresine gidin ve "Kaydı Başlat" düğmesini tıklayın.

Chrome GCM dahili kayıtları.

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

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

Yükün şifresini çözmeyle ilgili bir sorun varsa yukarıda gösterilene benzer bir hata görürsünüz. (Ayrıntılar sütunundaki AES-GCM decryption failedmesajına dikkat edin.)

Sorununuzun şifrelemeyle ilgili olması durumunda şifrelemeyle ilgili hataları ayıklamanıza yardımcı olabilecek birkaç araç vardır:

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.

GCM dahili birimleri ileti günlüğünü alır.

İletinin zamanında gelmediğini düşünü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 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 burada bildirebilirsiniz: https://bugs.chromium.org/p/chromium/issues/list Firefox için sorunu burada bildirmeniz gerekir: https://bugzilla.mozilla.org/

İyi bir hata raporu göndermek 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.

Yinelenebilir bir örnek (kaynak kod veya barındırılan bir web sitesi) sağlayabilirseniz bu, sorunun teşhis edilmesini ve çözülmesini genellikle hızlandırır.

Sonraki adımlar

Codelab uygulamaları