はじめに
本記事は無料で使用できるHTTPベースのpub-subサービス、ntfyについて記載しています。
サインアップ(アカウントの作成)も不要で1分もかからずにトピックを作成し、pub-subの仕組みを用いて簡単にWebやモバイルにプッシュ通知ができます。
オープンソースになるので自前でホスティングして、ローカル環境などクローズドな環境でも動かすことができます。
では、早速使っていきましょう。
ntfy
Web app
はじめにWebアプリから試してみます。
ntfyにアクセスし、画面右上の「Web app」を押します。
「+トピックを購読」を押します。
トピック名を入力します。
注意事項としてサインアップがないため、トピックはパスワードと同等です。
簡単に推測できないものをトピック名に入力してください。
ここではCyberChefで適当に生成したハッシュ値を入力しています。
本記事のブラウザ環境はChromeです。初回の場合、通知の許可が求められるため、「許可」を押します。
トピック作成後、プッシュ通知のテストをしてみます。
Macの場合はターミナルを起動し、画面中央の例に表示されているcurlコマンドをコピーして実行します。
デスクトップに通知音と共に知らせてくれます。
また、通知音はカスタム可能です。
Android/iOS
Androidは以前から利用できたようですが、iOSについても2022年5月25日にリリースされ利用できるようになりました。
App Storeからインストールできます。
iOSを例にApp Storeからアプリをインストール後、トピックの設定手順について以下に記載しています。
アプリを起動し、トピックを登録するためには「+」を押します。
Server URLにhttps://nfty.sh
を入力し、Topic Nameに通知したいトピック名を入力します。
テストメッセージを送るとプッシュ通知が届きます。
Self-hosting
セキュリティを確保する場合は自前でホスティングすることで、ローカル環境などクローズドな環境として使用することができます。
Installing ntfyの記載の通りに、Windows及びLinuxなど各種プラットフォームで使用可能です。
dockerを使用する場合は以下のコマンドで実行できます。(キャッシュなしの場合)
$ docker run -p 80:80 -it binwiederhier/ntfy serve
ローカル環境の場合、トピック名については適当な名前でも大丈夫です。
留意事項としてローカル環境でもアプリでメッセージを受信できますが、iOSについてはプッシュ通知がサポートされていません。iOS instant notificationsを参考にFirebase/APNSの対応が必要になります。
その他
その他、リマインダーや認証機能もありますが、本記事ではメッセージを加工する方法について一部紹介します。
Message priority
Message priorityはメッセージに対して優先度を定義します。
以下はアンチウイルスソフトウェアと組み合わせてスキャン結果からウイルスを検出した場合を想定した例です。
- 実行例
$ curl -H "X-Priority: 5" -d "FOUND" <サーバURL>/<トピック名>
Action buttons
Action buttonsは便利な機能です。
アクションを促したい通知に対して設定できます。
以下の例ではメッセージで通知したリンクの参照ができます。
- 実行例
$ curl -d "Somebody retweetet your tweet." -H "Actions: view, Open Twitter, <リンクURL>" <サーバURL>/<トピック名>
GitHub
リポジトリはhttps://github.com/binwiederhier/ntfyです。
新しいリリースについてiOSはTestFlightに参加できます。
Contributingについても歓迎しています。OSSに興味ある方にも良いと思います。
おわりに
デスクトップ等ブラウザに対するプッシュ通知を実現したい場合は、最適なサービスだと思います。
また、デザインもシンプルなUIで素敵です。