我目前正在学习有关服务人员的知识,尤其是订阅用户推送通知的知识。我已经完成了Google发布的Web Push Notifications指南和Adding Push Notifications to a Web App代码实验室的工作,但是我看到了两种不同的方式来请求用户的许可。

该指南要求使用Notifications API like thisNotification接口(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:

09-18 14:36