例えばiOSアプリをFlutterに移植する場合など、プッシュ通知の仕組みにFirebaseを採用していないことがあります。
基本的にFlutterではプッシュ通知を実装する場合にはFirebaseを利用するのが一般的で
情報を調べてもFirebaseMessagingを利用した方法以外見つからなかったのでそれ以外の方法を使った実装方法をメモしておきます。
Androidの場合はFirebaseを使ってください。
Platform.isIOS
などを使って処理を切り分けると良いです。
記事の対象
iOSアプリなどでプッシュ通知を実装したことがあり、基本的なセットアップは理解している方
flutter_apns
FireaseMessagingをベースに作成されたflutter_apnsを使います。
基本的に上記URLのREADMEを参照すれば実装できます。
connector.configure
などはmain.dart
のrunApp
より前に呼べば大丈夫です。
トークンの取得
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より前に処理が実行されます。
そのため、プッシュ通知のパラメータを受信してそのまま画面遷移を行ってしまうと
ルーティングが前後してしまうことがあります。
受信したパラメータを一時保管し、任意のタイミングで利用するなどをおすすめします。