Notification API で通知を出してみる

ブラウザで Gmail のタブとかを開きっぱなしにしておいて、メールが来たらデスクトップのバナー通知を表示する、みたいなアレを実装してみた。

実装自体は簡単。new Notification とインスタンス化する感じなんだけど、この変数を後で使うことはなさそう。

// 初回は通知の許可を得る : 許可されていない場合は `denied` が返される
const permission = await Notification.requestPermission();
if(permission !== 'granted') return console.warn('通知が許可されていないので中止');

// バナー通知を表示する
const notification = new Notification('Hello World', {  // タイトルを改行すると Mac Chrome では「…」で2行目が省略表示された
  body: 'Hello Body\nほげほげ',  // タイトル下の本文・Mac Chrome では `\n` で改行できた
  requireInteraction: true,  // ユーザが操作するまで閉じなくなる
  data: 'My Data',  // テキトーに値を付与できる
  //icon: './icon.png',  // Mac Chrome の場合、通知バナーの右側に表示される
  //badge: './badge.png',  // Mac Chrome の場合、表示されず。表示領域が足りない場合に表示されるアイコンらしい
  
  renotify: true,  // 同じ通知を許可するかどうか
  tag: 'my-notification',  // `renotify: true` の場合は必須。同一のタグ名を使用すると同じ通知としてグループ化される
  
  vibrate: [200],  // バイブレーション
  //silent: true,  // `silent: true` と `vibrate` は併用不可
  
  //timestamp: 1600000000000,  // 指定のタイムスタンプが送れる
  //dir: 'auto',  // テキストの方向
  //lang: 'ja',  // 言語指定
});

Mac Chrome で動作確認したが、主に使うのは body で指定できる通知本文、requireInteraction、あとは後処理に使えそうな data プロパティぐらいだろうか。

最近はブラウザがデフォルトで通知を無効にしていたりして、エンドユーザからも煙たがられており、あえて通知させたい場面が少ないとは思うが、今更ながら試してみた。