LoginSignup
2
4

More than 3 years have passed since last update.

FlutterでFirebaseを使わずにプッシュ通知を実装したい

Posted at

例えばiOSアプリをFlutterに移植する場合など、プッシュ通知の仕組みにFirebaseを採用していないことがあります。

基本的にFlutterではプッシュ通知を実装する場合にはFirebaseを利用するのが一般的で
情報を調べてもFirebaseMessagingを利用した方法以外見つからなかったのでそれ以外の方法を使った実装方法をメモしておきます。

Androidの場合はFirebaseを使ってください。
Platform.isIOSなどを使って処理を切り分けると良いです。

記事の対象

iOSアプリなどでプッシュ通知を実装したことがあり、基本的なセットアップは理解している方

flutter_apns

FireaseMessagingをベースに作成されたflutter_apnsを使います。

基本的に上記URLのREADMEを参照すれば実装できます。
connector.configureなどはmain.dartrunAppより前に呼べば大丈夫です。

トークンの取得

flutter_apnsではtokenのパラメータがValueNotifier<String>で定義されています。
なので、connector.configureなどの初期設定と同時に以下のように処理すれば取得できます。

connector.token.addListener(() async {
    final deviceToken = connector.token.value;
    print("receive token: $deviceToken");
});

また、任意のタイミングで使いたい場合は以下のように記述してnullでなければ利用可能です。

final token = connector.token.value.toString();

プッシュ通知受信時の処理

メモ程度に書いておくと、以下のような状態に対応しています。

onResume
アプリがバックグラウンドで起動中に受信した通知をタップしてForegroundに移動

onMessage
アプリが起動中にプッシュ通知を受信

onLaunch
アプリがタスクからも終了されているときに受信したプッシュ通知からアプリを起動

onLaunchを実装するときの注意

onLaunchはネイティブアプリと違ってmain.dartのrunAppより前に処理が実行されます。
そのため、プッシュ通知のパラメータを受信してそのまま画面遷移を行ってしまうと
ルーティングが前後してしまうことがあります。

受信したパラメータを一時保管し、任意のタイミングで利用するなどをおすすめします。

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4