HTML 通知と Service Worker の状態を調べていて、疑問に思っていました - 遅延時に通知を表示することは可能ですか? 基本的に、「30分後にリマインドして」(または何でも)と言ってから、30分後にユーザーに通知をプッシュできるようにしたいと考えています。それはすぐにスケジュールできますが、それを可能にする機能は見当たりません。
何か不足していますか、それとも (特に) Chrome API の現在の状態では不可能ですか?
HTML 通知と Service Worker の状態を調べていて、疑問に思っていました - 遅延時に通知を表示することは可能ですか? 基本的に、「30分後にリマインドして」(または何でも)と言ってから、30分後にユーザーに通知をプッシュできるようにしたいと考えています。それはすぐにスケジュールできますが、それを可能にする機能は見当たりません。
何か不足していますか、それとも (特に) Chrome API の現在の状態では不可能ですか?
これは可能ですが、少なくとも現在の形では Service Worker では簡単ではありません。setTimeout
Service Worker は 30 分間スリープ状態を維持したり、 または でスリープ状態を解除したりできないため、簡単ではありませんsetInterval
。ブラウザーはワーカーをシャットダウンするだけで、タイムアウトや間隔の記録は保持しません。開いているタブからのメッセージで起動することもできますが、開いたタブを維持する必要はないとおっしゃいました。また、開いているタブを想定している場合は、とにかく Service Worker に煩わされる必要はありません。Jeff Posnick がコメントで示唆したように、最終的には Sync または PeriodicSync API を使用できるかもしれませんが、彼も指摘しているように、それらはまだ実装されておらず、とにかくこれを意図したものではありません。
現在のバージョンの Chrome ではPush APIを使用して目的を達成できますが、サーバーをループに含めて、プッシュ通知サービス (つまり GCM) を設定する必要があります。これがどのように機能するかを大まかに示します。
この最後の部分は面倒です。現在のところ、プッシュで実際にペイロードを送信することはできないため、Service Worker は通知がどうあるべきかを理解する何らかの方法が必要になります。おそらく、サーバーにはスヌーズされた通知のリストがあり、Service Worker はそこからそれを取得できます。または、それらを IndexedDB に保存した可能性があります。
<script>
var Notification = window.Notification || window.mozNotification || window.webkitNotification;
function show() {
window.setTimeout(function () {
var instance = new Notification("Hello World!");
}, 5000);
return false;
}
</script>
<a href="#" onclick="return show()">Notify me!</a>