Yaygın Sorunlar ve Hata Bildirme

Matt Gaunt

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:
  • 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 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:

Ş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 ş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 failedmesajına dikkat edin.)

Sorununuz buysa şifrelemede hata ayıklamaya 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 ş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

Codelab uygulamaları