要求用户启用Web推送通知的权限的正确方法是什么?

时间:2017-10-03 18:37:02

标签: javascript push-notification service-worker web-push web-notifications

我目前正在了解服务工作者,特别是订阅用户推送通知。我已经完成了Google发布的Web Push Notifications 指南Adding Push Notifications to a Web App 代码实验室 - 但我看到了两种不同的方式要求用户的许可。

该指南要求使用通知API like thisNotification界面,然后根据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.');
    }
  });
}

代码实验室只会直接在服务工作人员注册.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();
  });
}

我已经查看了PushManager.subscribe()Notification.requestPermission()的mozilla文档,但努力确定每个Google流量的权衡,特别是是否需要额外的步骤Notification.requestPermission(..)是必要的

值得注意的是,.subscribe()目前被标记为实验性功能,其中.requestPermission()不是。

1 个答案:

答案 0 :(得分:3)

与大多数时候我最终在Stack Overflow上发帖一样,我通过重新审视所有内容找到了答案。实际上,Guide I referenced above answers this question directly

  

调用subscribe()有一个副作用。如果您的网络应用程序在调用subscribe()时没有显示通知的权限,浏览器将为您请求权限。如果您的UI使用此流程,这很有用,但如果您想要更多控制(我认为大多数开发人员会这样做),请坚持使用我们之前使用过的Notification.requestPermission()API。