Sık karşılaşılan sorunlar ve hataları bildirme

Matt Gaunt

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

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 Authorization baş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:

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

Chrome'da sorunun 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 ş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:

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.

GCM dahili bileşenleri mesaj günlüğü alır.

Mesajın 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 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

Kod laboratuvarları