Trước khi tìm hiểu về API, hãy xem xét thông báo đẩy từ cấp cao, từ đầu đến cuối. Sau đó, khi chúng ta tìm hiểu từng chủ đề hoặc API riêng lẻ, bạn sẽ hiểu được cách thức và lý do tại sao điều đó lại quan trọng.
Ba bước chính để triển khai thông báo đẩy là:
- Thêm logic phía máy khách để đăng ký người dùng nhận thông báo đẩy (tức là JavaScript và giao diện người dùng trong ứng dụng web của bạn để đăng ký người dùng nhận thông báo đẩy).
- Lệnh gọi API từ phần phụ trợ/ứng dụng của bạn kích hoạt thông báo đẩy đến thiết bị của người dùng.
- Tệp JavaScript của trình chạy dịch vụ sẽ nhận được "sự kiện đẩy" khi thông báo đẩy đến thiết bị. Trong JavaScript này, bạn sẽ có thể hiển thị thông báo.
Hãy cùng tìm hiểu chi tiết hơn về từng bước.
Bước 1: Phía máy khách
Bước đầu tiên là "đăng ký" người dùng nhận thông báo đẩy.
Để đăng ký cho người dùng, bạn cần có hai thứ. Đầu tiên, bạn cần xin quyền của người dùng để gửi tin nhắn đẩy cho họ. Thứ hai, lấy PushSubscription từ trình duyệt.
PushSubscription chứa tất cả thông tin chúng ta cần để gửi thông báo đẩy cho người dùng đó.
Bạn có thể coi đây là mã nhận dạng cho thiết bị của người dùng đó.
Tất cả những việc này đều được thực hiện trong JavaScript bằng Push API.
Trước khi đăng ký người dùng, bạn cần tạo một bộ "khoá máy chủ ứng dụng". Chúng ta sẽ tìm hiểu về bộ khoá này sau.
Khoá máy chủ ứng dụng (còn gọi là khoá VAPID) là khoá riêng biệt cho máy chủ của bạn. Các khoá này cho phép dịch vụ đẩy biết máy chủ ứng dụng nào đã đăng ký người dùng và đảm bảo rằng chính máy chủ đó kích hoạt thông báo đẩy cho người dùng đó.
Sau khi người dùng đăng ký và bạn có PushSubscription, bạn cần gửi thông tin chi tiết về PushSubscription đến phần phụ trợ/máy chủ của mình. Trên máy chủ, bạn sẽ lưu gói thuê bao này vào cơ sở dữ liệu và dùng gói thuê bao đó để gửi thông báo đẩy cho người dùng.
Bước 2: Gửi thông báo đẩy
Khi muốn gửi thông báo đẩy cho người dùng, bạn cần thực hiện lệnh gọi API đến một dịch vụ đẩy. Lệnh gọi API này sẽ bao gồm dữ liệu cần gửi, người nhận tin nhắn và mọi tiêu chí về cách gửi tin nhắn. Thông thường, lệnh gọi API này được thực hiện từ máy chủ của bạn.
Một số câu hỏi bạn có thể tự đặt ra:
- Dịch vụ thông báo đẩy là gì và dành cho ai?
- API trông như thế nào? Đó là JSON, XML hay định dạng nào khác?
- API này có thể làm gì?
Dịch vụ thông báo đẩy là gì và dành cho ai?
Dịch vụ đẩy nhận được yêu cầu mạng, xác thực yêu cầu đó và gửi thông báo đẩy đến trình duyệt thích hợp. Nếu trình duyệt không có mạng, thông báo sẽ được đưa vào hàng đợi cho đến khi trình duyệt có mạng.
Mỗi trình duyệt có thể sử dụng bất kỳ dịch vụ đẩy nào mà họ muốn, đây là điều mà nhà phát triển không kiểm soát được. Đây không phải là vấn đề vì mọi dịch vụ đẩy đều yêu cầu cùng một lệnh gọi API. Điều này có nghĩa là bạn không cần quan tâm dịch vụ đẩy là gì. Bạn chỉ cần đảm bảo rằng lệnh gọi API của bạn là hợp lệ.
Để lấy URL thích hợp nhằm kích hoạt thông báo đẩy (tức là URL cho dịch vụ đẩy), bạn chỉ cần xem giá trị endpoint trong PushSubscription.
Dưới đây là ví dụ về các giá trị bạn sẽ nhận được từ PushSubscription:
{
"endpoint": "https://random-push-service.com/some-kind-of-unique-id-1234/v2/",
"keys": {
"p256dh": "BNcRdreALRFXTkOOUHK1EtK2wtaz5Ry4YfYCA_0QTpQtUbVlUls0VJXg7A8u-Ts1XbjhazAkj7I99e8QcYP7DkM=",
"auth": "tBHItJI5svbpez7KI4CCXg=="
}
}
Điểm cuối trong trường hợp này là https://random-push-service.com/some-kind-of-unique-id-1234/v2/. Dịch vụ đẩy sẽ là "random-push-service.com" và mỗi điểm cuối là duy nhất cho một người dùng, được biểu thị bằng "some-kind-of-unique-id-1234". Khi bắt đầu làm việc với thông báo đẩy, bạn sẽ nhận thấy mẫu này.
Chúng ta sẽ tìm hiểu về khoá trong gói thuê bao ở phần sau.
API trông như thế nào?
Tôi đã đề cập rằng mọi dịch vụ thông báo đẩy trên web đều yêu cầu cùng một lệnh gọi API. API đó là Giao thức đẩy web. Đây là một tiêu chuẩn của IETF, xác định cách bạn thực hiện lệnh gọi API đến một dịch vụ thông báo đẩy.
Lệnh gọi API yêu cầu đặt một số tiêu đề nhất định và dữ liệu phải là một luồng byte. Chúng ta sẽ xem xét các thư viện có thể thực hiện lệnh gọi API này cho chúng ta cũng như cách tự thực hiện.
API này có thể làm gì?
API này cung cấp một cách để gửi thông báo cho người dùng, có/không có dữ liệu, đồng thời cung cấp hướng dẫn về cách gửi thông báo.
Dữ liệu bạn gửi bằng thông báo đẩy phải được mã hoá. Lý do là vì việc này ngăn các dịch vụ đẩy (có thể là bất kỳ ai) xem dữ liệu được gửi cùng với thông báo đẩy. Điều này rất quan trọng vì trình duyệt là bên quyết định dịch vụ đẩy nào sẽ được sử dụng, điều này có thể mở ra cơ hội cho các trình duyệt sử dụng dịch vụ đẩy không an toàn hoặc không bảo mật.
Khi bạn kích hoạt thông báo đẩy, dịch vụ đẩy sẽ nhận được lệnh gọi API và đưa thông báo vào hàng đợi. Thông báo này sẽ vẫn nằm trong hàng đợi cho đến khi thiết bị của người dùng kết nối mạng và dịch vụ đẩy có thể gửi thông báo. Hướng dẫn mà bạn có thể cung cấp cho dịch vụ đẩy xác định cách thông báo đẩy được đưa vào hàng đợi.
Hướng dẫn này bao gồm các thông tin chi tiết như:
Thời gian tồn tại của thông báo đẩy. Thuộc tính này xác định thời gian một thông báo được đưa vào hàng đợi trước khi bị xoá và không được gửi.
Xác định mức độ khẩn cấp của thông báo. Điều này rất hữu ích trong trường hợp dịch vụ đẩy đang duy trì thời lượng pin của người dùng bằng cách chỉ gửi tin nhắn có mức độ ưu tiên cao.
Đặt tên "chủ đề" cho thông báo đẩy để thay thế mọi thông báo đang chờ xử lý bằng thông báo mới này.
Bước 3: Sự kiện đẩy trên thiết bị của người dùng
Sau khi chúng tôi gửi thông báo đẩy, dịch vụ thông báo đẩy sẽ lưu giữ thông báo của bạn trên máy chủ cho đến khi một trong các sự kiện sau xảy ra:
- Thiết bị kết nối mạng và dịch vụ đẩy sẽ gửi thông báo.
- Thông báo hết hạn. Nếu điều này xảy ra, dịch vụ đẩy sẽ xoá thông báo khỏi hàng đợi và thông báo đó sẽ không bao giờ được gửi.
Khi dịch vụ đẩy gửi thông báo, trình duyệt sẽ nhận được thông báo, giải mã mọi dữ liệu và gửi sự kiện push trong trình chạy dịch vụ của bạn.
Trình chạy dịch vụ là một tệp JavaScript "đặc biệt". Trình duyệt có thể thực thi JavaScript này mà không cần mở trang của bạn. Trình duyệt thậm chí có thể thực thi JavaScript này khi đóng. Trình chạy dịch vụ cũng có các API, chẳng hạn như thông báo đẩy, không có sẵn trên trang web (tức là các API không có sẵn bên ngoài tập lệnh trình chạy dịch vụ).
Bạn có thể thực hiện mọi tác vụ trong nền trong sự kiện "đẩy" của trình chạy dịch vụ. Bạn có thể thực hiện lệnh gọi phân tích, lưu trang vào bộ nhớ đệm khi không có mạng và hiện thông báo.
Đó là toàn bộ quy trình gửi thông báo đẩy.
Đ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 tính năng đẩy
- Đăng ký cho 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 thông báo đẩy trên 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à cách báo cáo lỗi