Các vấn đề thường gặp và lỗi báo cáo

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

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:

Công cụ của Firefox có thông báo giải mã.

Để kiểm tra xem đây có phải là vấn đề trong Chrome hay không, hãy làm như sau:

  1. Truy cập about://gcm-internals và nhấp vào "Start recording" (Bắt đầu ghi) .

Bản ghi nội bộ Chrome GCM.

  1. Kích hoạt thông báo đẩy và xem trong "Nhật ký lỗi giải mã thư".

Nhật ký giải mã nội bộ của GCM.

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

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ội bộ GCM nhận nhật ký tin nhắn.

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:

Trạng thái kết nối nội bộ GCM.

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

Phòng thí nghiệm lập trình