Safari 中的 Web 推送 Django

Web Push Django in Safari

我在 Django 中使用推送通知,我在使用库 https://github.com/safwanrahman/django-webpush

它在 Chrome 和 Firefox 中正常工作,但在 Safari 中出现 JS 错误。

   TypeError: undefined is not an object (evaluating 'reg.pushManager.getSuscription')
   -suscribe
   -Anonymus Function

代码是这样的:

function subscribe(reg) {
  // Get the Subscription or register one
  reg.pushManager.getSubscription().then(
   function(subscription) {
     var metaObj, applicationServerKey, options;
     // Check if Subscription is available
     if (subscription) {
       return subscription;
     }

     metaObj = document.querySelector('meta[name="django-webpush-vapid-key"]');
     applicationServerKey = metaObj.content;
     options = {
     userVisibleOnly: true
     };
     if (applicationServerKey){
       options.applicationServerKey = urlB64ToUint8Array(applicationServerKey)
     }
     // If not, register one
     reg.pushManager.subscribe(options)
       .then(
       function(subscription) {
        postSubscribeObj('subscribe', subscription,
          function(response) {
            // Check the information is saved successfully into server
            if (response.status === 201) {
              // Show unsubscribe button instead
              subBtn.textContent = 'Eliminar suscripción';
              subBtn.disabled = false;
              isPushEnabled = true;
              showMessage('La suscripción se ha eliminado correctamente');
            }
          });
      })
    .catch(
      function() {
        console.log('Subscription error.', arguments)
      })
});
 }

这是因为在 Safari 或 IOS 设备中调用推送通知,需要 APNS(Apple 推送通知服务),而 django-web-push 的维护者尚未集成它们。

您需要通过为 IOS 设备和浏览器添加回退选项来自行添加 APNS 支持,或者您可以使用任何其他 apns 推送通知服务。