【问题标题】:What is the correct way to ask for a user's permission to enable web push notifications?请求用户允许启用网络推送通知的正确方法是什么?
【发布时间】:2018-03-15 01:03:49
【问题描述】:

我目前正在学习服务工作者,特别是订阅用户推送通知。我已经完成了 Google 发布的 Web Push NotificationsGuideAdding Push Notifications to a Web AppCode Lab - 但我看到了两种不同的方式来请求用户的许可。

指南使用Notifications API like thisNotification接口询问,然后根据.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


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-30
      • 1970-01-01
      • 2022-10-29
      相关资源
      最近更新 更多