Khi gặp sự cố liên quan đến việc thông báo đẩy trên web, bạn có thể gặp khó khăn khi khắc phục sự cố hoặc hãy tìm sự trợ giúp. Tài liệu này trình bày một số vấn đề thường gặp và những việc bạn nên làm thực hiện nếu bạn tìm thấy lỗi trong Chrome hoặc Firefox.
Trước khi chúng ta tìm hiểu sâu về thông báo đẩy gỡ lỗi, bạn có thể gặp phải sự cố khi gỡ lỗi bản thân trình chạy dịch vụ, tệp không cập nhật, không đăng ký được hoặc thường chỉ là hành vi bất thường. Có một tài liệu tuyệt vời về trình gỡ lỗi cho trình thực thi dịch vụ mà tôi đặc biệt khuyên bạn nên xem nếu bạn mới sử dụng phát triển trình chạy dịch vụ.
Có hai giai đoạn riêng biệt cần chọn khi phát triển và kiểm thử công cụ đẩy web: mỗi vấn đề có những vấn đề / vấn đề riêng:
- Gửi tin nhắn: Đảm bảo rằng bạn gửi tin nhắn thành công.
Bạn sẽ nhận được mã HTTP 201. Nếu bạn không phải là :
- Kiểm tra lỗi uỷ quyền: Nếu bạn nhận được lệnh uỷ quyền Hãy xem Mục Vấn đề về việc uỷ quyền.
- Các lỗi API khác: Nếu bạn nhận được phản hồi của mã trạng thái không phải là 201, hãy xem phần Mã trạng thái HTTP để biết hướng dẫn về nguyên nhân của vấn đề.
- Nhận tin nhắn: Nếu bạn có thể gửi tin nhắn thành công,
nhưng không nhận được tin nhắn trên trình duyệt:
- Kiểm tra sự cố mã hoá: Xem phần Mã hoá tải trọng phần Vấn đề.
- Kiểm tra các vấn đề về kết nối: Nếu sự cố xảy ra trên Chrome, thì có thể là một kết nối. Xem phần Các vấn đề về kết nối để biết thêm thông tin.
Nếu bạn không thể gửi và nhận thông báo đẩy cũng như các phần có liên quan trong tài liệu này không giúp gỡ lỗi thì bạn có thể đã tìm thấy lỗi trong chính cơ chế đẩy. Trong trường hợp này, hãy tham khảo Tăng báo cáo lỗi để gửi một báo cáo lỗi phù hợp chứa tất cả thông tin cần thiết để đẩy nhanh quy trình sửa lỗi.
Có một điều tôi muốn lưu ý trước khi chúng ta bắt đầu, đó là Firefox và Dịch vụ Mozilla AutoPush có thông báo lỗi lớn. Nếu bạn gặp khó khăn và không chắc chắn về vấn đề, hãy kiểm tra trong Firefox và xem liệu bạn sẽ nhận được thông báo lỗi hữu ích hơn.
Vấn đề về việc uỷ quyền
Vấn đề về việc uỷ quyền là một trong những vấn đề mà các nhà phát triển thường gặp nhất khi bắt đầu với thông báo đẩy trên web. Đây thường là vấn đề về cấu hình của Khoá máy chủ ứng dụng (còn gọi là khoá VAPID) của trang web
Cách dễ nhất để hỗ trợ đẩy trong cả Firefox và Chrome là cung cấp
applicationServerKey
trong lệnh gọi subscribe()
. Nhược điểm là
bất kỳ sự khác biệt nào giữa khoá giao diện người dùng của bạn và khoá của máy chủ sẽ dẫn đến
lỗi uỷ quyền.
Trên Chrome và FCM
Đối với Chrome, sử dụng FCM làm dịch vụ đẩy, bạn sẽ nhận được
UnauthorizedRegistration
phản hồi từ FCM cho một loạt các phản hồi khác nhau
tất cả đều liên quan đến khoá máy chủ ứng dụng.
Bạn sẽ gặp lỗi UnauthorizedRegistration
trong bất kỳ trường hợp nào sau đây
trường hợp:
- Nếu bạn không xác định được tiêu đề
Authorization
trong yêu cầu gửi tới FCM. - Khoá ứng dụng mà bạn dùng để đăng ký người dùng không khớp với khoá được dùng để ký tiêu đề Uỷ quyền.
- Thời gian hết hạn trong JWT không hợp lệ, tức là thời gian hết hạn vượt quá 24 giờ hoặc JWT đã hết hạn.
- JWT không đúng định dạng hoặc có các giá trị không hợp lệ.
Phản hồi lỗi đầy đủ sẽ có dạng như sau:
<html>
<head>
<title>UnauthorizedRegistration</title>
</head>
<body bgcolor="#FFFFFF" text="#000000">
<h1>UnauthorizedRegistration</h1>
<h2>Error 400</h2>
</body>
</html>
Nếu bạn nhận được thông báo lỗi này trong Chrome, hãy cân nhắc việc kiểm tra trong Firefox để xem về vấn đề sẽ được cung cấp thêm thông tin chi tiết.
Firefox và Mozilla AutoPush
Firefox và Mozilla AutoPush là một bộ thông báo lỗi thân thiện cho
Authorization
vấn đề.
Bạn cũng sẽ nhận được phản hồi Unauthorized
lỗi từ
Mozilla AutoPush nếu tiêu đề Authorization
không có trong thông báo đẩy của bạn
của bạn.
{
"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"
}
Nếu thời hạn trong JWT đã hết hạn, bạn cũng sẽ nhận được thông báo
Unauthorized
lỗi kèm theo thông báo giải thích rằng mã thông báo đã
đã hết hạn.
{
"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"
}
Nếu các khoá máy chủ ứng dụng khác nhau giữa thời điểm người dùng
đã được đăng ký và khi tiêu đề Uỷ quyền được ký, Not Found
sẽ được trả về:
{
"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"
}
Cuối cùng, nếu bạn có giá trị không hợp lệ trong JWT (ví dụ: giá trị "alg" là giá trị không mong muốn), bạn sẽ nhận được thông báo lỗi sau từ Mozilla Tự động đẩy:
{
"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"
}
Mã trạng thái HTTP
Có một loạt các vấn đề có thể dẫn đến mã phản hồi không phải 201 từ về thông báo đẩy. Dưới đây là danh sách mã trạng thái HTTP và ý nghĩa của từng mã cho việc đẩy web.
Mã trạng thái | Mô tả |
---|---|
429 | Quá nhiều yêu cầu. Máy chủ ứng dụng của bạn đã đạt đến giới hạn tốc độ với về thông báo đẩy. Phản hồi của dịch vụ phải có thông báo "Thử lại sau" tiêu đề đến cho biết khoảng thời gian trước khi có thể đưa ra một yêu cầu khác. |
400 | Yêu cầu không hợp lệ. Một trong các tiêu đề của bạn không hợp lệ hoặc được định dạng kém. |
404 | Không tìm thấy. Trong trường hợp này, bạn nên xoá PushSubscription khỏi và chờ có cơ hội đăng ký lại người dùng. |
410 | Không tồn tại. Gói thuê bao không còn hiệu lực nữa và cần được xoá khỏi phụ trợ. Thao tác này có thể được tái tạo bằng cách gọi lệnh "unsubscribe()" trên `PushSubscription`. |
413 | Kích thước tải trọng quá lớn. Tải trọng kích thước tối thiểu mà một dịch vụ đẩy phải hỗ trợ là 4096 byte (hoặc 4kb). Mọi kích thước lớn hơn đều có thể dẫn đến lỗi này. |
Nếu mã trạng thái HTTP không có trong danh sách này và thông báo lỗi thì không hữu ích, hãy xem Web Push Protocol (Giao thức đẩy web) spec để xem liệu mã trạng thái được tham chiếu cùng với một trường hợp mà mã trạng thái đó có thể để sử dụng.
Sự cố mã hoá tải trọng
Liệu bạn có thể kích hoạt thành công một thông báo đẩy (ví dụ: gửi thông báo trên web) dịch vụ đẩy và nhận mã phản hồi 201) nhưng sự kiện đẩy không bao giờ kích hoạt trong trình chạy dịch vụ của bạn, dấu hiệu này thường chỉ ra rằng trình duyệt không thể giải mã thư đã nhận được.
Nếu đúng như vậy, bạn sẽ thấy thông báo lỗi trong Công cụ cho nhà phát triển của Firefox bảng điều khiển như sau:
Để kiểm tra xem đây có phải là vấn đề trong Chrome hay không, hãy làm như sau:
- Truy cập about://gcm-internals và nhấp vào "Start recording" (Bắt đầu ghi) .
- Kích hoạt thông báo đẩy và xem trong "Nhật ký lỗi giải mã thư".
Nếu xảy ra sự cố với việc giải mã tải trọng, bạn sẽ thấy thông báo lỗi
tương tự như ví dụ hiển thị ở trên. (Lưu ý AES-GCM decryption failed
thông báo trong cột chi tiết.)
Nếu đây là vấn đề của bạn, có một số công cụ có thể giúp gỡ lỗi mã hoá:
- Công cụ Trình xác minh mã hoá đẩy của Peter Beverloo.
- Web Push: Trang thử nghiệm mã hoá dữ liệu của Mozilla
Sự cố kết nối
Nếu bạn không nhận được sự kiện đẩy trong trình chạy dịch vụ và bạn cũng không thấy bất kỳ lỗi giải mã nào thì trình duyệt có thể không kết nối được dịch vụ đẩy.
Trong Chrome, bạn có thể kiểm tra xem trình duyệt có nhận được thông báo hay không bằng cách kiểm tra
nút 'Nhận nhật ký tin nhắn' (sic) bằng about://gcm-internals
.
Nếu bạn không thấy thư đến kịp thời thì hãy đảm bảo rằng
trạng thái kết nối của trình duyệt của bạn là CONNECTED
:
Nếu trạng thái không được "ĐÃ KẾT NỐI", bạn có thể cần phải xoá hồ sơ hiện tại và tạo tài khoản mới. Nếu có vẫn không giải quyết được sự cố, vui lòng gửi báo cáo lỗi như được đề xuất bên dưới.
Tải báo cáo lỗi lên
Nếu không có cách nào ở trên giúp giải quyết vấn đề của bạn và không có dấu hiệu cho thấy có thể là, vui lòng nêu vấn đề đối với trình duyệt bạn đang gặp vấn đề với:
Đối với Chrome, bạn sẽ nêu vấn đề tại đây: https://bugs.chromium.org/p/chromium/issues/list Đối với Firefox, bạn nên nêu vấn đề trên: https://bugzilla.mozilla.org/
Để cung cấp một báo cáo lỗi phù hợp, bạn nên cung cấp các thông tin sau:
- Trình duyệt bạn đã thử nghiệm (ví dụ: Chrome phiên bản 50, Chrome phiên bản 51, Firefox phiên bản 50, Firefox phiên bản 51).
- Ví dụ
PushSubscription
minh hoạ vấn đề. - Bao gồm bất kỳ yêu cầu mẫu nào (ví dụ: nội dung của các yêu cầu mạng cho một lượt đẩy nhất, bao gồm cả tiêu đề).
- Ngoài ra, hãy đưa vào phản hồi mẫu từ các yêu cầu mạng.
Nếu bạn có thể cung cấp ví dụ có thể mô phỏng, mã nguồn hoặc trang web được lưu trữ trang web, công cụ này thường tăng tốc độ chẩn đoán và giải quyết vấn đề.
Điểm đến tiếp theo
- Tổng quan về thông báo đẩy trên web
- Cách hoạt động của chế độ đẩy
- Đăng ký người dùng
- Trải nghiệm người dùng về quyền
- Gửi thông báo bằng thư viện thông báo đẩy trên web
- Giao thức đẩy web
- Xử lý sự kiện đẩy
- Hiển thị thông báo
- Hành vi thông báo
- Các mẫu thông báo phổ biến
- Câu hỏi thường gặp về thông báo đẩy
- Các vấn đề thường gặp và lỗi báo cáo