PushManager: phương thức subscribe()

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since March 2023.

Secure context: This feature is available only in secure contexts (HTTPS), in some or all supporting browsers.

Note: This feature is available in Web Workers.

Phương thức subscribe() của giao diện PushManager đăng ký với một dịch vụ đẩy.

Phương thức này trả về một Promise giải quyết thành một đối tượng PushSubscription chứa chi tiết của subscription đẩy. Một subscription đẩy mới sẽ được tạo nếu service worker hiện tại chưa có subscription nào.

Cú pháp

js
subscribe(options)

Tham số

options Optional

Một object chứa các tham số cấu hình tùy chọn. Nó có thể có các thuộc tính sau:

userVisibleOnly

Một giá trị boolean cho biết subscription đẩy trả về sẽ chỉ được dùng cho các thông điệp có hiệu ứng được hiển thị cho người dùng.

applicationServerKey

Một chuỗi được mã hóa Base64 hoặc ArrayBuffer chứa một public key ECDSA P-256 mà push server sẽ dùng để xác thực máy chủ ứng dụng của bạn. Nếu được chỉ định, mọi thông điệp từ máy chủ ứng dụng của bạn phải dùng lược đồ xác thực VAPID và bao gồm một JWT được ký bằng private key tương ứng. Khóa này KHÔNG giống với khóa ECDH mà bạn dùng để mã hóa dữ liệu. Để biết thêm thông tin, xem "Using VAPID with WebPush".

Note: Tham số này là bắt buộc trong một số trình duyệt như Chrome và Edge. Chúng sẽ từ chối Promise nếu userVisibleOnly không được đặt thành true.

Giá trị trả về

Một Promise giải quyết thành một đối tượng PushSubscription.

Ví dụ

js
this.onpush = (event) => {
  console.log(event.data);
  // Từ đây chúng ta có thể ghi dữ liệu vào IndexedDB, gửi nó đến bất kỳ
  // cửa sổ nào đang mở, hiển thị thông báo, v.v.
};

navigator.serviceWorker.register("serviceworker.js");

// Dùng serviceWorker.ready để bảo đảm bạn có thể đăng ký push
navigator.serviceWorker.ready.then((serviceWorkerRegistration) => {
  const options = {
    userVisibleOnly: true,
    applicationServerKey,
  };
  serviceWorkerRegistration.pushManager.subscribe(options).then(
    (pushSubscription) => {
      console.log(pushSubscription.endpoint);
      // Các chi tiết đăng ký push cần cho máy chủ ứng dụng hiện đã
      // sẵn sàng và có thể được gửi tới đó bằng, chẳng hạn,
      // API fetch().
    },
    (error) => {
      // Trong quá trình phát triển, việc ghi lỗi ra console thường rất hữu ích.
      // Trong môi trường sản xuất, cũng có thể nên báo cáo thông tin lỗi
      // trở lại máy chủ ứng dụng.
      console.error(error);
    },
  );
});

Phản hồi với cử chỉ của người dùng

Các lời gọi subscribe() nên được thực hiện để đáp lại một cử chỉ của người dùng, ví dụ như nhấn nút:

js
btn.addEventListener("click", () => {
  serviceWorkerRegistration.pushManager
    .subscribe(options)
    .then((pushSubscription) => {
      // xử lý subscription
    });
});

Đây không chỉ là thực hành tốt nhất - bạn không nên làm phiền người dùng bằng những thông báo mà họ không đồng ý - mà trong tương lai trình duyệt sẽ còn chủ động chặn các thông báo không được kích hoạt bởi cử chỉ của người dùng. Firefox đã làm điều này từ phiên bản 72, chẳng hạn.

Thông số kỹ thuật

Specification
Push API
# dom-pushmanager-subscribe

Tương thích trình duyệt