Push-уведомления Safari pushmanager не могут зарегистрироваться - PullRequest
0 голосов
/ 24 сентября 2018

Я использую webpush и столкнулся с проблемой.Я могу заставить его нормально работать с сервером и базой данных на Chrome.Но когда я пытаюсь зарегистрироваться / подписаться из моего браузера Safari, это выдает мне эту ошибку:

TypeError: undefined is not an object (evaluating 'n.pushManager.subscribe')
   (anonym funktion) — Header.vue:99
   r — runtime.js:62
   (anonym funktion) — runtime.js:296
   r — asyncToGenerator.js:17
   (anonym funktion) — asyncToGenerator.js:28
   promiseReactionJob

Вот мой код для регистрации программного обеспечения в Chrome.

notification () {
      var storeId = this.$session.get('user').accessId
      const publicVapidKey = 'PublicVAPID'
      if ('serviceWorker' in navigator) {
        send().catch(err => console.error(err))
      }
      async function send () {
        var register = await navigator.serviceWorker.register('/service-worker.js', {
          scope: '/'
        })
        const subscription = await register.pushManager.subscribe({
          userVisibleOnly: true,
          applicationServerKey: urlBase64ToUint8Array(publicVapidKey)
        })
        await axios({
          method: 'post',
          url: 'API',
          data: {
            subscription: JSON.stringify(subscription),
            storeId: storeId
          },
          headers: {
            'Content-Type': 'application/json'
          }
        }).then(response => {
          console.log(response)
        })
        alert('you are now getting notifications')
      }
      function urlBase64ToUint8Array (base64String) {
        console.log(base64String)
        const padding = '='.repeat((4 - base64String.length % 4) % 4)
        const base64 = (base64String + padding).replace(/-/g, '+').replace(/_/g, '/')
        const rawData = window.atob(base64)
        const outputArray = new Uint8Array(rawData.length)

        for (let i = 0; i < rawData.length; ++i) {
          outputArray[i] = rawData.charCodeAt(i)
        }
        return outputArray
      }
    },

1 Ответ

0 голосов
/ 18 декабря 2018

с использованием:

window.safari.pushNotification

вместо

window.PushManager

должно работать (не тестировать), но только после регистрации с яблоком.

как описано здесь

"Вы должны зарегистрироваться в разделе Сертификаты, идентификаторы и профили своей учетной записи разработчика, чтобы отправлять push-уведомления."

выглядит такSafari по-прежнему работает за пределами текущего стандарта и требует регистрации для их службы


, если вы хотите просто отфильтровать ошибку и не хотите использовать push-уведомления в safari, вы можете сделать следующее:

if (registration.pushManager)
  {
   //... do your pushManager.subscribe magic
  }
else
{
  console.log("pushManager not available via web standard")
  // either use apples own push service, do nothing or try local notifications
}

в противном случае: следуйте приведенному выше описанию яблок или проверьте возможности опроса (не уверен, что это работает) и локальные уведомления


информация найдена через:

посещение https://whatwebcando.today/push-notifications.html с рабочим столом Safari показало мне путь к упомянутому выше решению

...