PushSubscription
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.
Giao diện PushSubscription của Push API cung cấp điểm cuối URL của một đăng ký, cùng với khóa công khai và các bí mật nên được dùng để mã hóa các thông điệp đẩy gửi đến đăng ký này.
Thông tin này phải được chuyển cho máy chủ ứng dụng bằng bất kỳ phương thức nào phù hợp với ứng dụng.
Giao diện này cũng cung cấp thông tin về thời điểm đăng ký sẽ hết hạn, và một phương thức để hủy đăng ký.
Thuộc tính thể hiện
PushSubscription.endpointRead only-
Một chuỗi chứa điểm cuối được liên kết với đăng ký đẩy.
PushSubscription.expirationTimeRead only-
Một
DOMHighResTimeStampcủa thời điểm hết hạn đăng ký được liên kết với đăng ký đẩy, nếu có, hoặcnulltrong trường hợp ngược lại. PushSubscription.optionsRead only-
Một đối tượng chứa các tùy chọn đã dùng để tạo đăng ký.
PushSubscription.subscriptionIdDeprecated Read only Non-standard-
Một chuỗi chứa mã định danh của đăng ký được liên kết với đăng ký đẩy.
Phương thức thể hiện
PushSubscription.getKey()-
Trả về một
ArrayBufferchứa khóa công khai của máy khách, sau đó có thể được gửi đến máy chủ và dùng để mã hóa dữ liệu thông điệp đẩy. PushSubscription.toJSON()-
Bộ tuần tự hóa chuẩn — trả về biểu diễn JSON của các thuộc tính đăng ký.
PushSubscription.unsubscribe()-
Bắt đầu quá trình bất đồng bộ để hủy đăng ký khỏi dịch vụ đẩy, trả về một
Promisesẽ phân giải thành một giá trị boolean khi đăng ký hiện tại được hủy đăng ký thành công.
Mô tả
Mỗi trình duyệt sử dụng một dịch vụ đẩy cụ thể.
Một service worker có thể dùng PushManager.subscribe() để đăng ký vào dịch vụ được hỗ trợ, rồi dùng PushSubscription được trả về để tìm ra điểm cuối nơi các thông điệp đẩy sẽ được gửi đến.
PushSubscription cũng được dùng để lấy khóa công khai và bí mật mà máy chủ ứng dụng phải dùng để mã hóa các thông điệp mà nó gửi đến dịch vụ đẩy.
Lưu ý rằng các khóa riêng dùng để giải mã thông điệp đẩy không được trình duyệt chia sẻ, và được dùng để giải mã thông điệp trước khi chúng được chuyển cho service worker.
Điều này bảo đảm rằng các thông điệp đẩy vẫn riêng tư khi đi qua hạ tầng máy chủ đẩy.
Service worker không cần biết gì về các điểm cuối hay cơ chế mã hóa, ngoài việc chuyển thông tin liên quan cho máy chủ ứng dụng. Bất kỳ cơ chế nào cũng có thể được dùng để chia sẻ thông tin với máy chủ ứng dụng.
Ví dụ
>Gửi thông tin mã hóa đến máy chủ
Khóa công khai p256dh và bí mật auth dùng để mã hóa thông điệp được cung cấp cho service worker thông qua đăng ký đẩy của nó, bằng phương thức PushSubscription.getKey(), cùng với điểm cuối đích để gửi các thông điệp đẩy trong PushSubscription.endpoint.
Kiểu mã hóa nên được dùng cho việc mã hóa được cung cấp bởi thuộc tính tĩnh PushManager.supportedContentEncodings.
Ví dụ này cho thấy cách bạn có thể đưa thông tin cần thiết từ PushSubscription và supportedContentEncodings vào một đối tượng JSON, tuần tự hóa nó bằng JSON.stringify(), rồi gửi kết quả đến máy chủ ứng dụng.
// Lấy một đối tượng PushSubscription
const pushSubscription =
await serviceWorkerRegistration.pushManager.subscribe();
// Tạo một đối tượng chứa thông tin mà máy chủ ứng dụng cần
const subscriptionObject = {
endpoint: pushSubscription.endpoint,
keys: {
p256dh: pushSubscription.getKey("p256dh"),
auth: pushSubscription.getKey("auth"),
},
encoding: PushManager.supportedContentEncodings,
/* dữ liệu khác dành riêng cho ứng dụng, chẳng hạn danh tính người dùng */
};
// Chuyển đối tượng thành chuỗi và gửi đến máy chủ ứng dụng
fetch("https://example.com/push/", {
method: "post",
body: JSON.stringify(subscriptionObject),
});
Hủy đăng ký khỏi push manager
navigator.serviceWorker.ready
.then((reg) => reg.pushManager.getSubscription())
.then((subscription) => subscription.unsubscribe())
.then((successful) => {
// Bạn đã hủy đăng ký thành công
})
.catch((e) => {
// Hủy đăng ký thất bại
});
Thông số kỹ thuật
| Specification |
|---|
| Push API> # pushsubscription-interface> |