10

Chrome の Web プッシュ API の実装に関するドキュメントを読んでいる、API に「プッシュを受信するたびに通知を表示することを約束する」と書かれていることに気付きまし。プッシュメッセージを受け取ります。」

この例をローカルホストに実装した後、cURL を使用してプッシュ通知を正常に送信しました。興味があったので、実際に showNotification 関数を呼び出している行をコメントアウトし、代わりに console.log を挿入したところ、プッシュ通知を実際に送信、受信、および完全に無視できることがわかりました。メインページから制御したグローバルブール値に基づいてそれらを表示するかどうかを制御するために if ステートメントを使用してみましたが、うまくいきました。では、通知を表示する必要があり、サイレント プッシュ通知が利用できないと言う意味を知っている人がいるかどうか疑問に思っていました。

これは単なる目的ではありません。Web アプリでこれらの通知を表示するかどうかを合法的に制御する必要がある可能性があるため、これが実際に可能であれば素晴らしいことです。興味がある場合は、以下のコードを参照してください。

self.addEventListener('push', function(event) {
  var title = 'New Message';
  var body = 'You have received a new message!';
  var icon = '/img/favicon.png';
  var tag = 'well-notification';
  console.log("DID RECEIVE NOTIFICATION")

  if(settingsShowNotification) {
    event.waitUntil(
      self.registration.showNotification(title, {
         body: body,
         icon: icon,
         tag: tag
      })
    );
  }
});

編集: 関連する場合は、Chrome 47 で。

更新: さらに実験した結果、ユーザーが移動してから同じページに再度移動すると、元のグローバル変数を更新できないという明らかな問題が見つかりました。ただし、サービスワーカー自体の変数を使用してこれを回避し、ここで説明する API を使用してメッセージをサービスワーカーに送信し、showNotifications ブール値を切り替えることができました。

4

1 に答える 1

14

通知を表示する必要があり、通知を表示しないと、ブラウザから「このサイトはバックグラウンドで更新されました」という強制通知が表示されます。ただし、怖いメッセージを表示する要件は若干緩和されています。

2016 年 1 月の時点で、最新の 10 件の通知まで、それぞれが通知を表示したかどうかを確認しているようです。過去 10 回の通知のうち 1 回でも通知が表示されなかっ場合、それは事故と見なされ、ブラウザは「このサイトはバックグラウンドで更新されました」という恐ろしいメッセージを表示しません。恐ろしいメッセージが表示されるようにするには、過去 10 回で2 回の通知を見逃す必要があります。

注: アクティブなブラウザー タブのアドレス バーの URL がページのオリジンと一致し、ブラウザーが最小化されていない場合は通知を表示する必要はありません。テストの実行中にページ自体にいた場合、これがおそらくテストが成功した理由です。

実装を追跡する Chromium バグ: https://code.google.com/p/chromium/issues/detail?id=437277

ソースコードの関連行: https://code.google.com/p/chromium/codesearch#chromium/src/chrome/browser/push_messaging/push_messaging_notification_manager.cc&l=249

于 2016-01-27T18:43:32.843 に答える