はじめに
個人開発でユーザーが設定した期日の三日前と期日の当日にプッシュ通知を送信する機能を実装しようと思っていました。
勉強も兼ねて、Push通知の実装にあたっては、FCM(Firebase Cloud Messaging)を利用しようと思いました。
FCM
とは、Firebase
というGoogleが提供しているクラウドサービスの一機能です。
Firebase
は、アプリケーションや Web サービスを開発する際に用いる、バックエンド機能を提供するクラウドサービスです。
公式ドキュメントや他の記事を参考にプッシュ通知を送信するところまで実装したところで、
どうやってUI側からPush通知の送信を登録するかわかりませんでした。
したがって、プッシュ通知について調べてみたので記事にして共有したいと思います。
※本記事では、詳細な実装方法について説明していません。
Flutterのプッシュ通知について知りたい方向けの記事です。
ただ、いきなりサンプルコードをみて実装するのではなく、
プッシュ通知について知ったうえで、実装していく方が結果早いと思います。
(普段、私はサンプルコードをみて実装するタイプで、今回のプッシュ通知の実装もそうしたのですが、プッシュ通知については仕組みから理解する必要があると思いました)
目次
Flutterのプッシュ通知
プッシュ通知には以下の二つの種類があります。
- ローカル通知
- リモート通知
ローカル通知
ローカル通知は、インターネット接続を必要とせずデバイス内部で完結する通知です。スケジュールの通知など、決まった時間をトリガーとする通知の際はこちらを使います。
flutter_local_notificationsというパッケージで実装できるみたいです。
動作確認していませんが、こちらの記事で実装できそうです。
リモート通知
リモート通知は、インターネットを通して届くプッシュ通知です。SNSのいいねやメッセージ受信時など、何かしらのユーザーのイベントを契機に通知したい際はこちらを使います。イベントの発行はバックエンド側で実装する必要はあります。
まとめると、
時間によるイベント→ローカル通知
ユーザーのアクションによるイベント→リモート通知
と使い分けるとよさそうです。
リモート通知の仕組み
この記事の発端であるFCM
を使ってリモート通知でどうやってUI側からPush通知の送信を登録するかを知るために、リモート通知の仕組みについて説明します。
こちらの記事が大変参考になりました。
リモート通知の送信の流れは以下です。
※通知を送信するにはトークンの発行と保持が必要になりますがその説明については上の記事をご参照ください。
- バックエンドサービスがプッシュ通知をプッシュ通知サービスに要求する
- 要求を受けたプッシュ通知サービスがデバイスにプッシュ通知を送信する
- デバイスが通知を受け取る
ここで重要なのは、プッシュ通知の送信はFCM
のようなプッシュ通知を送信するサービスで、
プッシュ通知の送信を要求するのはバックエンドの仕事だということです。
つまり、UI側からPush通知の送信を登録するには、以下の流れとなります
- 何らかのタイミングでデバイスからバックエンドにPush通知の送信を要求
-
バックエンドから
FCM
にPush通知の送信を要求 -
FCM
からデバイスにPush通知を送信
まとめ
私の実装したい機能は、時間ベースの通知になるのでローカル通知の方がよさそうでした。
ただ勉強のためにFCM
を使った実装もしてみたいです。
そのためには、プッシュ通知を要求するサーバーが必要ですね。
公式ドキュメントによると、Cloud Functions for Firebaseや、他のクラウド環境が使えるようです。