[Flutter] FCM vs Local Notification


はじめに

FlutterでAndroidとiOSのアプリを両方開発しているところで、Push Notificationを実装することになりました。
最初はFCMとLocal Notificationの機能に関して紛らわしいことがありましたので、今回はこれに関して整理しようと思います。

FCM (Firebase Cloud Messaging)

Firebase Cloud Messaging(FCM)は、メッセージを無料で確実に送信するためのクロスプラットフォーム メッセージング ソリューションです。

Firebaseサイトで定義されてる概念で、Firebaseサーバーを使って簡単にユーザーにメッセージを送信することができるとで理解すれば、大丈夫だと思います。

FlutterにFCMを適用する方法

Flutterでは、firebase_messagingのパッケージを追加して使用することができます。

注意することはiOSはAPNsキーもしくはAPNs認証書を登録を事前にしなければ、送信できないので、面倒だけどXcodeの方でAPNsの登録を含めてbundle ID設定やProvisioning Profile設定をしましょう。

あと、他のFirebaseパッケージ、例えば、firebase_authやfirebase_coreなどを使うことになったら、バージョンの互換性も考えないとビルドエラーが起こる可能性もあるので気をつけた方がいいです。

FlutterのLocal Notification

A cross platform plugin for displaying and scheduling local notifications for Flutter applications with the ability to customise for each platform.

これもFCMみたいにメッセージを送信するためのクロスプラットフォームです。

FlutterにLocal Notificationを適用する方法

Local Notificationもfirebase_messagingようにflutter_local_notificationsのパッケージを追加すれば使用することができます。

FCMとLocal Notificationの共通点

  • 両方Android,iOSにメッセージを無料で送信することができる
  • メッセージの予約可能
  • Notification許可ダイアログを出すことができる (これ以上何かあったら、Feedbackしてください😭)

FCMとLocal Notificationの相違点

  • FCMはiOSの方の追加的な対応が必要(bundle ID, Provisioning Profile, APNsキー, tokenなど)
  • FCMはメッセージの中に画像を表示したいなら、Flutter上にObjective-Cで対応しなければならない。

  • FCMはfirebaseをデータベースとして使用している場合は、クラウド機能を使用してデータベースに加えられた変更をlistenすることができる。
  • :pushpin:用語の違い:機能がほぼ同じでFCMとLocal Notificationを話すとき、プッシュ通知もしくはPush Notificationと言われるですが、これは正しくないです。

Local Notificationはデバイス上にローカルにアプリ自体から送信、予約されたNotificationです。
Push NotificationはiOSやAndroidのクラウドシステム(APNs,FCMなど)を通じてアプリに送信されたNotificationです。

まとめ

つまり、用語的にFCMはPush Notification, ローカルで送信する通知はLocal Notificationです。FCMはユーザーのデータベースをもとにAPNsとトークンを通してメッセージを送信、Local Notificationはこれに関係なくてメッセージを送信することができます。もちろん、Push Notificationの方がLocal Notificationより細かい設定や実装が必要です。実装したいことによって、ちゃんと検討して実装した方がいいと思いますね。

参考

いつもFeedback歓迎

Feedbackはコメントでお願いします。
では、Happy coding!👋🏻