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 :
- Periksa Error Otorisasi: Jika Anda menerima otorisasi lihat Bagian Masalah Otorisasi.
- Error API Lainnya: Jika Anda menerima respons kode status non-201, lihat bagian Kode Status HTTP untuk panduan tentang penyebab masalah.
- Menerima Pesan: Jika Anda berhasil mengirim pesan,
tetapi pesan tidak diterima di browser:
- Memeriksa Masalah Enkripsi: Lihat Enkripsi Payload Bagian Masalah.
- Periksa Masalah Koneksi: Jika masalahnya ada di Chrome, mungkin sebuah koneksi. Lihat bagian Masalah Koneksi untuk mengetahui info selengkapnya.
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:
Untuk memeriksa apakah ini yang menjadi masalah di Chrome, lakukan hal berikut:
- Buka about://cm-internals dan klik tombol "Start Recording" tombol.
- Picu pesan push, lalu lihat di bagian "Message Decryption Failure Log".
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:
- Alat Push Encryption Verifier oleh Peter Beverloo.
- Web Push: Halaman Pengujian Enkripsi Data oleh Mozilla
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
.
Jika Anda tidak melihat pesan tiba tepat waktu, pastikan
status sambungan browser Anda adalah CONNECTED
:
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
- Ringkasan Notifikasi Push Web
- Cara Kerja Push
- Berlangganan Pengguna
- UX Izin
- Mengirim Pesan dengan Library Web Push
- Protokol Push Web
- Menangani Peristiwa Push
- Menampilkan Notifikasi
- Perilaku Notifikasi
- Pola Notifikasi Umum
- FAQ Notifikasi Push
- Masalah Umum dan Melaporkan Bug