我目前正在学习有关服务人员的知识,尤其是订阅用户推送通知的知识。我已经完成了Google发布的Web Push Notifications指南和Adding Push Notifications to a Web App代码实验室的工作,但是我看到了两种不同的方式来请求用户的许可。
该指南要求使用Notifications API like this的Notification
接口(interface),然后根据subscribe()
的返回值调用.requestPermission()
:
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.');
}
});
}
然后,代码实验室仅通过直接在服务 worker 注册的
.subscribe()
like this上调用PushManager
(将弹出通知提示)来进行询问:function subscribeUser() {
const applicationServerKey = urlB64ToUint8Array(applicationServerPublicKey);
swRegistration.pushManager.subscribe({
userVisibleOnly: true,
applicationServerKey: applicationServerKey
})
.then(function(subscription) {
console.log('User is subscribed.');
updateSubscriptionOnServer(subscription);
isSubscribed = true;
updateBtn();
})
.catch(function(err) {
console.log('Failed to subscribe the user: ', err);
updateBtn();
});
}
我浏览了Mozilla文档中的
PushManager.subscribe()
和 Notification.requestPermission()
,但努力确定每种Google流量的折衷方案,尤其是Notification.requestPermission(..)
是否需要额外的步骤。值得注意的是,
.subscribe()
当前被标记为实验性功能,而.requestPermission()
没有标记。 最佳答案
与大多数情况下,我最终在Stack Overflow上发帖一样,我通过重新查看所有内容找到了答案。实际上,Guide I referenced above answers this question directly: