Tại sao tính năng đẩ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à vì có một vài tình huống khiến câu hỏi này trở nên khó suy nghĩ và khó hiểu.
Hãy bắt đầu với Android. Hệ điều hành Android được thiết kế để theo dõi thông báo đẩy và khi nhận được thông báo đẩy, hãy đánh thức ứng dụng Android thích hợp để xử lý thông báo đẩy, bất kể ứng dụng có đóng hay không.
Việc này cũng giống hệt như 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, sau đó trình duyệt sẽ đánh thức trình chạy dịch vụ và gửi sự kiện đẩy.
Trên hệ điều hành máy tính để bàn, cách tính này chi tiết 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.
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 cách đánh dấu bên dưới biểu tượng ứng dụng trên thanh Dock.
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 ký hiệu bên dưới biểu tượng, trong khi Chrome ở bên phải không chạy, do đó không có biểu tượng bên dưới.
![Ví dụ về OS X](https://web.developers.google.cn/static/articles/push-notifications-faq/image/example-os-x-72bc3d5fa52ff.png?authuser=6&hl=vi)
Trong trường hợp 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ó đánh dấu bên dưới biểu tượng.
Điều này có nghĩa là trình duyệt không thể mở cửa sổ nào nhưng 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 bạn không nhận được lệnh đẩy là khi trình duyệt đóng hoàn toàn, tức là hoàn toàn không chạy (không đánh dấu). Điều này 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 phức tạp hơn một chút.
Làm cách nào để ứng dụng web trên màn hình chính mở toàn màn hình chỉ bằng một lần đẩ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 ứng dụng web được mở từ màn hình chính, ứng dụng web đó có thể khởi chạy ở chế độ toàn màn hình mà không cần thanh URL, như minh hoạ dưới đây.
![Biểu tượng màn hình chính chuyển sang chế độ toàn màn hình](https://web.developers.google.cn/static/articles/push-notifications-faq/image/home-screen-icon-fullscr-e034b276ccc7e.png?authuser=6&hl=vi)
Để duy trì trải nghiệm nhất quán này, nhà phát triển cũng muốn thông báo được nhấp vào để mở ứng dụng web ở chế độ toàn màn hình.
Chrome đã "triển khai" cách 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 thức triển khai có liên quan:
Tức là trừ phi người dùng truy cập 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 thông thường của trình duyệt.
Vấn đề này sẽ được xử lý thêm.
Tại sao cổng này tốt hơn cổng web?
Một trình chạy dịch vụ có thể được đưa vào hoạt động khi cửa sổ trình duyệt đóng. Cổng web sẽ chỉ hoạt động miễn là trình duyệt và trang web luôn mở.
Thoả thuận với GCM, FCM, Web Push và Chrome như thế nào?
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à xem qua lịch sử đẩy web và Chrome. (Đừng lo, câu trả lời này rất ngắn.)
Tháng 12 năm 2014
Khi Chrome lần đầu triển khai tính năng đẩy trên web, Chrome đã dùng giải pháp Gửi thông báo qua đám mây của Google (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à tính năng đẩy trên web. Có một vài lý do khiến thiết lập Chrome và GCM sớm này không phải là thông báo đẩy web "thực".
- GCM yêu cầu nhà phát triển thiết lập tài khoản trên Bảng điều khiển dành cho nhà phát triển của Google.
- Chrome và GCM cần một mã người gửi đặc biệt được một ứng dụng web chia sẻ để có thể thiết lập tính năng nhắn tin chính xác.
- Máy chủ của GCM đã chấp nhận một yêu cầu API tùy 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 chế độ đẩy trên web đã ra mắt – Khoá máy chủ ứng dụng (hay VAPID, như đã biết). Khi Chrome 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 như một dịch vụ nhắn tin. Điều này rất quan trọng vì một số lý do:
- Khoá máy chủ của Chrome và ứ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. Cách đó sẽ vẫn hoạt động.
- FCM hỗ trợ giao thức đẩy web, đây là API mà tất cả dịch vụ đẩy 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à trình duyệt sẽ gửi thông báo.
Tại sao hôm nay vấn đề này lại khó hiểu?
Có rất nhiều nhầm lẫn khi nội dung được viết về chủ đề đẩy trên web, phần lớn trong số đó đề cập đến GCM hoặc FCM. Nếu nội dung tham chiếu đến GCM, thì có thể bạn nên coi đó là dấu hiệu cho thấy đó là nội dung cũ HOẶC tập trung quá nhiều vào Chrome. (Tôi có tội khi làm điều này trong một số bài đăng cũ.)
Thay vào đó, hãy xem tính năng đẩy trên web bao gồm một trình duyệt. Trình duyệt này 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 web". Nếu suy nghĩ theo các thuật ngữ này, bạn có thể bỏ qua trình duyệt cũng như dịch vụ đẩy mà trình duyệt đang sử dụng và bắt đầu hoạt động.
Hướng dẫn này được viết để tập trung vào phương pháp tiêu chuẩn của tính năng đẩy web và có chủ đích bỏ qua mọi nội dung khác.
Firebase có SDK JavaScript. Điều gì và tại sao?
Đối với những người đã tìm thấy SDK web của Firebase và nhận thấy SDK này có API nhắn tin cho JavaScript, có thể bạn sẽ muốn biết SDK này khác với tính năng đẩy trên web như thế nào.
SDK nhắn tin (còn gọi là Firebase Cloud Messaging JS SDK) thực hiện một vài thủ thuật để giúp bạn dễ dàng triển khai tính năng đẩy trên web.
- Thay vì lo lắng về
PushSubscription
và các trường khác nhau, bạn chỉ cần lo lắng về Mã thông báo FCM (một chuỗi). - Khi sử dụng mã thông báo cho từng người dùng, bạn có thể dùng API FCM độc quyền để kích hoạt thông báo đẩy. API này không yêu cầu mã hoá các tải trọng. Bạn có thể gửi tải trọng văn bản thuần tuý trong nội dung của yêu cầu POST.
- API độc quyền của FCM hỗ trợ các tính năng tuỳ chỉnh, ví dụ: Chủ đề FCM (Chủ đề FCM cũng hoạt động trên web, mặc dù API này không được ghi lại đầy đủ).
- Cuối cùng, FCM hỗ trợ Android, iOS và web. Vì vậy, đối với một số nhóm, bạn có thể dễ dàng hợp tác trong các dự án hiện tại.
Phương pháp này sử dụng tính năng đẩy trên web, nhưng mục tiêu của nó là loại bỏ thông tin đó.
Như đã nói trong câu hỏi trước, nếu coi tính năng đẩy web chỉ là một trình duyệt và dịch vụ đẩ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 tính năng đẩy trên web.
Điểm đến tiếp theo
- Tổng quan về thông báo đẩy trên web
- Cách tính năng đẩy hoạt động
- Đăng ký người dùng
- Trải nghiệm người dùng của quyền
- Gửi thông báo bằng Thư viện đẩy trên web
- Giao thức đẩy web
- Xử lý sự kiện đẩy
- Hiện 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