Câu hỏi thường gặp về thông báo đẩy

Tại sao thông báo đẩy không hoạt động khi trình duyệt đóng?

Câu hỏi này xuất hiện khá nhiều, chủ yếu là do có một vài trường hợp khiến bạn khó suy luận và hiểu được.

Hãy bắt đầu với Android. Hệ điều hành Android được thiết kế để theo dõi tin nhắn đẩy và khi nhận được tin nhắn đẩy, hệ điều hành này sẽ kích hoạt ứng dụng Android thích hợp để xử lý tin nhắn đẩy, bất kể ứng dụng đó có đang đóng hay không.

Điều này hoàn toàn giống với mọi trình duyệt trên Android, trình duyệt sẽ được đánh thức khi nhận được thông báo đẩy và sau đó trình duyệt sẽ đánh thức trình chạy dịch vụ của bạn và gửi sự kiện đẩy.

Trên hệ điều hành máy tính, điều này có nhiều sắc thái hơn và dễ giải thích nhất trên Mac OS X vì có một chỉ báo trực quan giúp giải thích các trường hợp khác nhau.

Trên Mac OS X, bạn có thể biết một chương trình có đang chạy hay không bằng dấu đánh dấu bên dưới biểu tượng ứng dụng trong thanh công cụ.

Nếu bạn so sánh hai biểu tượng Chrome trong thanh dock sau, thì biểu tượng bên trái đang chạy, như được minh hoạ bằng dấu đánh dấu bên dưới biểu tượng, trong khi Chrome bên phải không chạy, do đó không có dấu đánh dấu bên dưới.

Ví dụ về OS X

Trong bối cảnh nhận thông báo đẩy trên máy tính, bạn sẽ nhận được thông báo khi trình duyệt đang chạy, tức là có dấu đánh dấu bên dưới biểu tượng.

Điều này có nghĩa là trình duyệt có thể không mở cửa sổ nào và bạn vẫn sẽ nhận được thông báo đẩy trong trình chạy dịch vụ vì trình duyệt đang chạy ở chế độ nền.

Trường hợp duy nhất không nhận được thông báo đẩy là khi trình duyệt đóng hoàn toàn, tức là không chạy (không có dấu). Điều tương tự cũng áp dụng cho Windows, mặc dù việc xác định xem Chrome có đang chạy ở chế độ nền hay không sẽ khó hơn một chút.

Làm cách nào để mở ứng dụng web trên màn hình chính ở chế độ toàn màn hình từ một thông báo đẩy?

Trên Chrome dành cho Android, bạn có thể thêm ứng dụng web vào màn hình chính và khi mở ứng dụng web từ màn hình chính, ứng dụng có thể chạy ở chế độ toàn màn hình mà không có thanh URL, như minh hoạ bên dưới.

Biểu tượng màn hình chính sang toàn màn hình

Để duy trì trải nghiệm nhất quán này, nhà phát triển muốn các thông báo được nhấp vào cũng mở ứng dụng web ở chế độ toàn màn hình.

Chrome "gần như" đã triển khai tính năng này, mặc dù bạn có thể thấy tính năng này không đáng tin cậy và khó giải thích. Sau đây là thông tin chi tiết về cách triển khai có liên quan:

Điều này có nghĩa là trừ phi người dùng truy cập vào trang web của bạn thông qua biểu tượng màn hình chính khá thường xuyên, thông báo của bạn sẽ mở trong giao diện người dùng trình duyệt thông thường.

Chúng tôi sẽ tiếp tục xử lý vấn đề này.

Tại sao phương thức này lại tốt hơn ổ cắm web?

Trình chạy dịch vụ có thể hoạt động khi cửa sổ trình duyệt đóng. Web socket sẽ chỉ hoạt động khi trình duyệt và trang web được mở.

GCM, FCM, Web Push và Chrome có liên quan gì đến nhau?

Câu hỏi này có một số khía cạnh và cách dễ nhất để giải thích là bước qua lịch sử của thông báo đẩy trên web và Chrome. (Đừng lo, video này rất ngắn.)

Tháng 12 năm 2014

Khi lần đầu triển khai thông báo đẩy trên web, Chrome đã sử dụng Google Cloud Messaging (GCM) để hỗ trợ việc gửi thông báo đẩy từ máy chủ đến trình duyệt.

Đây không phải là thông báo đẩy trên web. Có một vài lý do khiến việc thiết lập sớm Chrome và GCM không phải là thông báo đẩy "thực" trên web.

  • GCM yêu cầu nhà phát triển thiết lập tài khoản trên Google Developers Console.
  • Chrome và GCM cần một mã nhận dạng người gửi đặc biệt để ứng dụng web chia sẻ nhằm có thể thiết lập nhắn tin chính xác.
  • Máy chủ của GCM đã chấp nhận một yêu cầu API tuỳ chỉnh không phải là tiêu chuẩn web.

Tháng 7 năm 2016

Vào tháng 7, một tính năng mới trong thông báo đẩy trên web đã ra mắt – Khoá máy chủ ứng dụng (hoặc VAPID, như thông số kỹ thuật đã biết). Khi bổ sung tính năng hỗ trợ cho API mới này, Chrome đã sử dụng Giải pháp gửi thông báo qua đám mây của Firebase (còn gọi là FCM) thay vì GCM làm dịch vụ nhắn tin. Điều này rất quan trọng vì một số lý do:

  • Chrome và Khoá máy chủ ứng dụng không cần thiết lập bất kỳ loại dự án nào với Google hoặc Firebase. Mọi thứ sẽ hoạt động bình thường.
  • FCM hỗ trợ giao thức thông báo đẩy trên web, đây là API mà tất cả dịch vụ thông báo đẩy trên web sẽ hỗ trợ. Điều này có nghĩa là bất kể trình duyệt sử dụng dịch vụ đẩy nào, bạn chỉ cần đưa ra cùng một loại yêu cầu và dịch vụ đó sẽ gửi thông báo.

Tại sao hôm nay lại khó hiểu?

Hiện có rất nhiều nội dung gây nhầm lẫn về chủ đề thông báo đẩy trên web, trong đó có nhiều nội dung tham chiếu đến GCM hoặc FCM. Nếu nội dung tham chiếu đến GCM, bạn có thể coi đó là dấu hiệu cho thấy nội dung đó đã cũ HOẶC nội dung đó tập trung quá nhiều vào Chrome. (Tôi cũng từng mắc lỗi này trong một số bài đăng cũ.)

Thay vào đó, hãy coi thông báo đẩy trên web bao gồm một trình duyệt, sử dụng dịch vụ đẩy để quản lý việc gửi và nhận thông báo, trong đó dịch vụ đẩy sẽ chấp nhận yêu cầu "giao thức đẩy trên web". Nếu nghĩ theo những thuật ngữ này, bạn có thể bỏ qua trình duyệt và dịch vụ đẩy mà trình duyệt đó đang sử dụng và bắt đầu làm việc.

Hướng dẫn này được viết để tập trung vào phương pháp tiêu chuẩn của thông báo đẩy trên web và cố ý bỏ qua mọi nội dung khác.

Firebase có một SDK JavaScript. Nội dung và lý do

Đối với những người đã tìm thấy SDK web Firebase và nhận thấy SDK này có API nhắn tin cho JavaScript, bạn có thể thắc mắc về sự khác biệt giữa SDK này và thông báo đẩy trên web.

SDK nhắn tin (được gọi là SDK JS của Giải pháp gửi thông báo qua đám mây của Firebase) thực hiện một số thủ thuật nâng cao để giúp bạn dễ dàng triển khai thông báo đẩy trên web.

  • Thay vì lo lắng về PushSubscription và các trường khác nhau của nó, bạn chỉ cần quan tâm đến Mã thông báo FCM (một chuỗi).
  • Bằng cách sử dụng mã thông báo cho mỗi người dùng, bạn có thể dùng FCM API độc quyền để kích hoạt thông báo đẩy. API này không yêu cầu mã hoá tải trọng. Bạn có thể gửi tải trọng văn bản thuần túy trong nội dung yêu cầu POST.
  • API độc quyền của FCM hỗ trợ các tính năng tuỳ chỉnh, chẳng hạn như Chủ đề FCM (Tính năng này cũng hoạt động trên web, mặc dù tài liệu về tính năng này chưa đầy đủ).
  • Cuối cùng, FCM hỗ trợ Android, iOS và web, nên một số nhóm sẽ dễ dàng làm việc hơn trong các dự án hiện có.

Thư viện này sử dụng tính năng đẩy web trong nền, nhưng mục tiêu của thư viện là trừu tượng hoá tính năng này.

Như tôi đã nói trong câu hỏi trước, nếu bạn coi thông báo đẩy trên web chỉ là một trình duyệt và một dịch vụ thông báo đẩy, thì bạn có thể coi SDK nhắn tin trong Firebase là một thư viện để đơn giản hoá việc triển khai thông báo đẩy trên web.

Điểm đến tiếp theo

Lớp học lập trình