pushManager не запрашивает разрешение на мобильные устройства - PullRequest
0 голосов
/ 24 октября 2019

Я пытаюсь внедрить push-уведомления на свой веб-сайт, мне удалось сделать это на настольном компьютере, но не запрашивается разрешение пользователей на мобильные устройства.

Я пытался использовать safari наiphone, chrome на iphone (не могу даже зарегистрировать работника службы поддержки), браузер duckduckgo на iphone, и на рабочем столе нет всплывающего окна, которое отлично работает.

Мой код:

async function registerSw () {
    if ('serviceWorker' in navigator) {
        alert('supported'); // this pops up in safari
        navigator.serviceWorker.register('./sw.js').then(function(registration) {
        subscribeToPush();
    }).catch(error => console.log(error));
    } else {
         // I get this on iphone version of chrome
         alert('Service workers not supported');
    }
 }

Функция подписки:

async function subscribeToPush () {
   navigator.serviceWorker.ready.then(function(registration) {
   alert('inside subscribe'); // this shows up too
   registration.pushManager.subscribe({

       userVisibleOnly: true,

       applicationServerKey: urlB64ToUint8Array('BL9qxdhqL_CM1ROLo6AUfeBvEyUuD7EHT3lAz8ksBZSYPsdE6q__uU2FoX9lr5FtmWtlHs-HRMHen3Ki8WWSVA4')

  })

  .then(function(subscription) {
    alert('sub'); // this doesnt show up
    // The subscription was successful
    // let key = new Uint8Array(subscription.getKey('p256dh'));
    // let auth = new Uint8Array(subscription.getKey('auth'));
    let key =   btoa(String.fromCharCode.apply(null, new Uint8Array(subscription.getKey('p256dh')))) ;
    let auth =   btoa(String.fromCharCode.apply(null, new Uint8Array(subscription.getKey('auth')))) ;
    let endpoint = subscription.endpoint;
    let contentEncoding = (PushManager.supportedContentEncodings || ['aesgcm'])[0];
    let data = {
        'p256dh': key,
        'auth': auth,
        'endpoint': endpoint,
        'contentEncoding': contentEncoding,
    };
    alert('Before request')
    setTimeout(function() {
      ajax(data);
    }, 2000);


  })

  .catch(function(e) {
    console.log( alert('permission missing') );
    console.log( e );

  });

});

}

Ответы [ 2 ]

1 голос
/ 24 октября 2019

В настоящее время (2019 г.) ни один браузер на iOS не поддерживает push-уведомления.

Также Safari на настольном компьютере поддерживает уведомления для веб-сайтов с использованием запатентованной технологии APN, а не стандарта Push API.

0 голосов
/ 24 октября 2019

Все ведущие браузеры, за исключением Safari для iOS, поддерживают службу поддержки и API веб-push. Хотя Safari поддерживает push-уведомления в Mac OS

...