2017-06-23 8 views
0

私はウェブプッシュ通知を送信しようとしています。しかし今、私は問題に直面しています。私は理由は分かりませんが、サービスワーカーは古いメッセージを全員に送っています。サービスワーカーが古いメッセージを購読者に送信しています

サービスworker.js

const applicationServerPublicKey = 'BFcmZ847NIPORvhzARrLcIFfShkxnHGsiKSlYvUe0WaPNHFHGH3FXRWwunSHjktJgcunbtteTu_xmDw6iugygic'; 

/* eslint-enable max-len */ 

function urlB64ToUint8Array(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; 
} 

self.addEventListener('push', function(event) { 
    self.skipWaiting(); 

    console.log('[Service Worker] Push Received.'); 
    console.log(`[Service Worker] Push had this data: "${event.data.text()}"`); 

    const title = 'Example Website'; 
    const options = { 
    body: 'Content', 
    icon: 'http://www.example.com/icon.jpg', 
    "image": "http://www.example.com/img.jpg", 
    }; 

    event.waitUntil(self.registration.showNotification(title, options)); 
}); 

self.addEventListener('notificationclick', function(event) { 
    console.log('[Service Worker] Notification click Received.'); 

    event.notification.close(); 

    event.waitUntil(
    clients.openWindow('http://www.example.com') 
); 
}); 

self.addEventListener('pushsubscriptionchange', function(event) { 
    console.log('[Service Worker]: \'pushsubscriptionchange\' event fired.'); 
    const applicationServerKey = urlB64ToUint8Array(applicationServerPublicKey); 
    event.waitUntil(
    self.registration.pushManager.subscribe({ 
     userVisibleOnly: true, 
     applicationServerKey: applicationServerKey 
    }) 
    .then(function(newSubscription) { 
     // TODO: Send to application server 
     console.log('[Service Worker] New subscription: ', newSubscription); 
    }) 
); 
}); 

私は、ブラウザのキャッシュこの静的なJSファイルだと思います。まだ分​​からない。しかし、私は加入者に新しいメッセージを送ることができません。それで私を助けてください。

私に助けてください。

ありがとうございました!

答えて

0

現時点でサービスワーカーを更新することは容易ではありません。デバッグのためにService worker: importScripts never updates scripts

  • :依存関係のために

    を基本的にはあなたが必要〜へ:

    1. 訪問のウェブサイトのページ(つまり、サービスワーカーを活性化させるか、serviceWorker.registerを呼び出す) - 時にはあなたも
    2. 今すぐ新しいサービスワーカーがインストールされているが、それはまでアクティブにすることができないページを更新する必要がありますあなたがserviceworker更新するために、3つのメカニズムを持ってい
  • 0

    ブラウザを閉じて再度開く:あなたは、以前のサービスワーカーを終了

    +0

    'サービス-worker.js'はなく、他のコンピュータ上で、自分のコンピュータ上で更新されます。私の加入者は古いメッセージを受け取っています(プッシュ通知)。 複数のデータ(タイトル、リンク、画像URLなど)を 'service-worker.js'に送信して通知を送信できる方法はありますか? –

    +0

    プッシュメッセージで送信するペイロードは、あなた次第です。理論的には、すべてのフィールドを送信することができます。あなたのサービス員はそれらが存在していることを知り、それに応じて通知を表示する必要があります。 –

    関連する問題