Masalah Umum dan Bug Pelaporan

Saat Anda mengalami masalah dengan web push, mungkin akan sulit untuk men-debug masalah atau mencari bantuan. Dokumen ini menguraikan beberapa masalah umum dan apa yang harus Anda lakukan jika Anda menemukan bug di Chrome atau Firefox.

Sebelum kita mempelajari push proses debug, Anda mungkin mengalami masalah dengan proses debug pekerja layanan itu sendiri, file tidak diperbarui, gagal mendaftar, atau umumnya hanya perilaku yang tidak biasa. Terdapat dokumen yang bagus tentang proses debug pekerja layanan sangat disarankan agar Anda memeriksa jika Anda baru pengembangan pekerja layanan.

Ada dua tahap berbeda yang harus diperiksa saat mengembangkan dan menguji {i>web push<i}, masing-masing memiliki serangkaian masalah / masalah umumnya:

  • Mengirim Pesan: Pastikan bahwa pengiriman pesan berhasil. Anda seharusnya mendapatkan kode HTTP 201. Jika Anda bukan :
  • Menerima Pesan: Jika Anda berhasil mengirim pesan, tetapi pesan tidak diterima di browser:

Jika Anda tidak dapat mengirim dan menerima pesan push dan bagian yang relevan dalam dokumen ini tidak membantu men-{i>debug<i} masalah maka Anda mungkin menemukan {i>bug <i}dalam mekanisme {i>push<i} itu sendiri. Dalam hal ini, lihat Melaporkan Bug bagian untuk mengajukan laporan {i>bug<i} yang baik dengan semua informasi yang diperlukan untuk mempercepat proses perbaikan {i>bug<i}.

Satu hal yang ingin saya informasikan sebelum kita memulai adalah Firefox dan Mozilla AutoPush Service memiliki pesan error yang bagus. Jika Anda buntu dan tidak yakin apa masalahnya, lalu coba di Firefox dan lihat apakah Anda mendapatkan pesan {i>error<i} yang lebih membantu.

Masalah otorisasi

Masalah otorisasi adalah salah satu masalah paling umum yang dihadapi pengembang saat dimulai dengan web push. Ini biasanya adalah masalah dengan konfigurasi sebuah Kunci Server Aplikasi (alias kunci VAPID) di situs .

Cara termudah untuk mendukung {i>push<i} di Firefox dan Chrome adalah dengan menyediakan applicationServerKey dalam panggilan subscribe(). Kelemahannya adalah setiap perbedaan antara {i>front end<i} dan kunci server akan mengakibatkan error otorisasi.

Di Chrome dan FCM

Untuk Chrome, yang menggunakan FCM sebagai layanan push, Anda akan menerima UnauthorizedRegistration respons dari FCM untuk berbagai {i>error<i}, semuanya melibatkan kunci server aplikasi.

Anda akan menerima error UnauthorizedRegistration di salah satu hal berikut situasi:

  • Jika Anda gagal menentukan header Authorization dalam permintaan ke FCM.
  • Kunci aplikasi yang digunakan untuk membuat pengguna berlangganan tidak cocok dengan kunci yang digunakan untuk menandatangani {i> header<i} Otorisasi.
  • Masa berlaku tidak valid di JWT Anda, yaitu masa berlaku melebihi 24 jam atau JWT telah kedaluwarsa.
  • Format JWT salah atau nilai tidak valid.

Respons error lengkapnya akan terlihat seperti ini:

<html>
  <head>
    <title>UnauthorizedRegistration</title>
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <h1>UnauthorizedRegistration</h1>

    <h2>Error 400</h2>
  </body>
</html>

Jika Anda menerima pesan kesalahan ini di Chrome, pertimbangkan untuk mengujinya di Firefox untuk melihat apakah memberikan lebih banyak wawasan tentang permasalahannya.

Firefox dan Mozilla AutoPush

Firefox dan Mozilla AutoPush menyediakan serangkaian pesan {i>error<i} yang sesuai untuk Authorization masalah.

Anda juga akan menerima respons error Unauthorized dari Mozilla AutoPush jika header Authorization tidak disertakan dalam push Anda permintaan.

{
  "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"
}

Jika masa berlaku di JWT Anda telah kedaluwarsa, Anda juga akan menerima Error Unauthorized dengan pesan yang menjelaskan bahwa token telah kedaluwarsa.

{
  "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"
}

Jika kunci server aplikasi berbeda antara saat pengguna berlangganan dan saat header Otorisasi ditandatangani, Not Found akan dikembalikan:

{
  "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"
}

Terakhir, jika Anda memiliki nilai yang tidak valid di JWT (misalnya jika nilai "alg" adalah nilai yang tidak diharapkan), Anda akan menerima pesan error berikut dari Mozilla Push Otomatis:

{
  "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"
}

Kode status HTTP

Ada berbagai masalah yang bisa menghasilkan kode respons non-201 dari layanan push. Di bawah ini adalah daftar kode status HTTP dan artinya sehubungan ke push web.

Kode Status Deskripsi
429 Terlalu banyak permintaan. Server aplikasi Anda telah mencapai batas kapasitas dengan layanan push. Respons dari layanan harus menyertakan perintah 'Retry-After' header ke menunjukkan berapa lama sebelum permintaan lain dapat dibuat.
400 Permintaan tidak valid. Salah satu header Anda tidak valid atau tidak diformat dengan baik.
404 Tidak Ditemukan. Dalam hal ini, Anda harus menghapus PushSubscription dari backend dan menunggu kesempatan untuk berlangganan pengguna kembali.
410 Pergi. Langganan ini tidak lagi valid dan harus dihapus dari back end. Hal ini dapat direproduksi dengan memanggil `unsubscribe()` pada `PushSubscription`.
413 Ukuran payload terlalu besar. Payload ukuran minimum yang harus dimiliki layanan push dukungan adalah 4096 byte (atau 4 kb). Ukuran yang lebih besar dapat menyebabkan error ini.

Jika kode status HTTP tidak ada dalam daftar ini dan pesan error tidak ada membantu, periksa Web Push Protocol spesifikasi untuk melihat apakah kode status dirujuk bersama dengan skenario saat kode status itu bisa sebaiknya digunakan.

Masalah enkripsi payload

Jika Anda berhasil memicu pesan push (yaitu mengirim pesan ke web {i>push<i} dan menerima kode respons 201), tetapi peristiwa {i>push<i} tidak pernah diaktifkan pekerja layanan Anda, hal ini biasanya menunjukkan bahwa browser gagal membongkar enkripsi pesan yang diterimanya.

Jika demikian, Anda akan melihat pesan error di DevTools Firefox konsol seperti berikut:

Firefox DevTools dengan pesan dekripsi.

Untuk memeriksa apakah ini yang menjadi masalah di Chrome, lakukan hal berikut:

  1. Buka about://cm-internals dan klik tombol "Start Recording" tombol.

Rekaman internal Chrome GCM.

  1. Picu pesan push, lalu lihat di bagian "Message Decryption Failure Log".

Log dekripsi internal GCM.

Jika ada masalah dengan dekripsi payload, Anda akan melihat error mirip dengan yang ditampilkan di atas. (Perhatikan AES-GCM decryption failed di kolom detail.)

Ada beberapa alat yang dapat membantu men-debug enkripsi jika ini adalah masalah Anda:

Masalah koneksi

Jika Anda tidak menerima peristiwa push di pekerja layanan dan Anda tidak melihat kesalahan dekripsi, maka browser mungkin gagal terhubung ke layanan push.

Di Chrome, Anda dapat memeriksa apakah browser menerima pesan dengan memeriksa bagian 'Terima Log Pesan' (sic) di about://gcm-internals.

Internal GCM menerima log pesan.

Jika Anda tidak melihat pesan tiba tepat waktu, pastikan status sambungan browser Anda adalah CONNECTED:

Status koneksi internal GCM.

Jika tidak 'TERHUBUNG', Anda mungkin perlu menghapus profil saat ini dan buat akun baru. Jika hal tersebut masih tidak menyelesaikan masalah, ajukan laporan {i>bug<i} seperti yang disarankan di bawah ini.

Mengajukan laporan bug

Jika petunjuk di atas tidak membantu mengatasi masalah Anda dan tidak ada tanda-tanda apa bisa jadi, sampaikan masalah pada browser yang Anda mengalami masalah terkait:

Untuk Chrome, Anda akan menyampaikan masalah di sini: https://bugs.chromium.org/p/chromium/issues/list Untuk Firefox, Anda harus menyampaikan masalah mengenai: https://bugzilla.mozilla.org/

Untuk memberikan laporan bug yang baik, Anda harus memberikan detail berikut:

  • Browser yang sudah Anda uji (misalnya Chrome versi 50, Chrome versi 51, Firefox versi 50, Firefox versi 51).
  • Contoh PushSubscription yang menunjukkan masalah.
  • Menyertakan semua contoh permintaan (yaitu konten permintaan jaringan ke push tambahan, termasuk header).
  • Sertakan juga contoh respons dari permintaan jaringan.

Jika Anda dapat memberikan contoh yang dapat direproduksi, baik kode sumber atau web yang dihosting situs Anda, seringkali dapat mempercepat diagnosa dan pemecahan masalah.

Langkah berikutnya

Lab kode