推播通知不管对 App 或是网站来说都是一种重新吸引用户来使用 App 的方法,所以目标是即使网站、App 关闭时也要能在背景接收推播。推播的目的是为了增加 engagement,在行销领域中 engagement 这个常见的指标就是指用户在网站或 APP 上的互动程度或者参与度。
後端可以选择自己实作也可以直接串接使用现有的服务,程序撰写上相关操作的 JavaScript API 也相对简单,接下来就来一步步完成最基本的推播吧。
if (!("serviceWorker" in navigator)) {
// Service Worker 不支援
return;
}
if (!("PushManager" in window)) {
// Push API 不支援
return;
}
function askPermission() {
return new Promise(function (resolve, reject) {
const permissionResult = Notification.requestPermission(function (result) {
resolve(result);
});
if (permissionResult) {
permissionResult.then(resolve, reject);
}
}).then(function (permissionResult) {
if (permissionResult !== "granted") {
throw new Error("We weren't granted permission.");
}
});
}
userVisibleOnly
目前 Chrome 只支援每次收到推送时显示通知,这代表没有办法在背景偷偷做事情,applicationServerKey 则是会用到後端给的 Public Vapid Key,产生出来的 subscription
可以看成是 client 端的 ID。subscription
传送到後端if ("serviceWorker" in navigator) {
// 3. 注册 serviceWorker
const register = await navigator.serviceWorker.register("/sw.js", {
scope: "/",
});
// 4. 使用 PushManager 订阅推播
const subscription = await register.pushManager.subscribe({
userVisibleOnly: true,
applicationServerKey: urlBase64ToUint8Array(publicVapidKey),
});
// 5. 向 Sever 发送订阅
await fetch("/subscribe", {
method: "POST",
body: JSON.stringify(subscription),
headers: {
"Content-Type": "application/json",
},
});
}
event.data.text()
event.data.json()
event.data.blob()
event.data.arrayBuffer()
event.waitUntil()
等待通知执行完成self.addEventListener("push", (event) => {
const data = event.data.json();
const promiseChain = self.registration.showNotification(data.title, {
body: "Yay it works!",
});
event.waitUntil(promiseChain);
});
这次的 Demo 连结如下也欢迎各位大大试玩看看:
https://linyencheng-push-notification.herokuapp.com/
<<: 【Day 22】病毒出得去,赎金进得来,勒索软件发大财 - Ransomware
经过了这次的铁人赛,收获颇丰,因为我本身的知识量无法凑足30天,有蛮多部分都是另外去学的,让我学到了...
...
我能同意职员上班不能看股票,因为起起伏伏的线图,也会跟随着心情曲线起伏,让当天无法专注於工作上,毕竟...
经历过一连串的Blue Prism实作,今天想让大家与自己都松口气, 看到上面的图案,是否有种机械...
注:发文日和截图的日期不一定是同一天,所以价格计算上和当日不同,是很正常的。 声明:这一系列文章并无...