【发布时间】:2018-03-15 01:03:49
【问题描述】:
我目前正在学习服务工作者,特别是订阅用户推送通知。我已经完成了 Google 发布的 Web Push NotificationsGuide 和 Adding Push Notifications to a Web AppCode Lab - 但我看到了两种不同的方式来请求用户的许可。
指南使用Notifications API like this的Notification接口询问,然后根据.requestPermission()的返回值调用subscribe():
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.');
}
});
}
代码实验室只通过直接在服务工作者注册的PushManagerlike this 上调用.subscribe()(这将显示通知提示)来询问:
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();
});
}
我已经查看了 PushManager.subscribe() 和 Notification.requestPermission() 的 mozilla 文档,但我努力确定每个 Google 流程的权衡,特别是 Notification.requestPermission(..) 的额外步骤是否是必要的。
值得注意的是,.subscribe() 目前被标记为实验性功能,而.requestPermission() 则没有。
【问题讨论】:
标签: javascript push-notification service-worker web-push web-notifications