Flutterで任意のタイミングで通知を送る
2024 年 9 月 18 日 by sugakirはじめに
今回はFlutterを使って通知を送る方法をまとめました。通知が送れると、
アプリを開かなくても状態が確認出来るので、スマホアプリ開発の技術
として重宝されています。
導入
今回はシンプルに画面に通知ボタンを配置し、ボタンを押すと通知が来る
アプリを作りました。
まずパッケージを導入します。
// pubspec.yaml
dependencies:
flutter:
sdk: flutter
+ webview_flutter:
// importするファイル
+ import 'package:{プロジェクト名}/flutter_local_notifications.dart';
これでFlutterで呼び出せるようになります。
通知の機能はOSに関わってくる部分なので、許可をする必要があります。
(Androidは特に追記不要です。)
// iOS AppDelegate.swift
GeneratedPluginRegistrant.register(with: self)
+ if #available(iOS 10.0, *) {
+ UNUserNotificationCenter.current().delegate
+ = self as? UNUserNotificationCenterDelegate
+ }
return super.application(
application,
didFinishLaunchingWithOptions: launchOptions
)
// Android
// nop
アプリの初期化処理で、通知処理も初期化します。
+ Future<void> _initNotifications() async {
+ const initAndroid = AndroidInitializationSettings('app_icon');
+ const initIOS = IOSInitializationSettings();
+ const initializationSettings = InitializationSettings(
+ android: initAndroid,
+ iOS: initIOS,
+ );
+ await localNotificationsPlugin
+ .initialize(initializationSettings);
+ tz.initializeTimeZones();
+ }
あとはライブラリ標準のプラグイン機能で呼び出してあげるだけです。
await localNotificationsPlugin.show(
0,
'お届け予定日 $displayDeadline曜日',
'ご注文された商品の納期は1週間後です。タップしてご確認ください。',
platformChannelSpecifics,
);
ここのlocalNotificationsPluginは通知を行うためのインスタンスです。
.show()で通知することができます。
引数はそれぞれ
第一引数:チャンネル(識別子)
第二引数:通知のヘッダー
第三引数:通知のメッセージ
第四引数:プラットフォームの種類を保持するインスタンス
です。
動作確認
割愛していますが、画面にボタンを配置し、onTap関数として
通知呼び出し処理を記載しています。
通知ボタンを押すと、通知が飛んできます。
通知のメッセージにもある通り、タップするとアプリを起動できます。
応用編
ボタン押した時のみ通知が来ても需要がないので、
時間指定で通知が飛ぶ機能も実装してみました。
以下のコードをアプリの初期化処理に組み込むだけです。
try{
await _initNotifications();
await localNotificationsPlugin.showDailyAtTime(
0,
'バッチテスト',
'アプリを閉じていても来る通知です',
// 時間設定
const Time(11,52,00),
platformChannelSpecifics,
);
} catch (e) {
if(kDebugMode) {
print('Error initializing app: $e');
}
}
指定した時間に通知が来ました!
これを使うことで、通知したいタイミングに送れるので
本来のリマインド的な用途で使えます。
まとめ
今回は、端末発信で自身の端末に通知する種類の通知を
実装しました。別システムから端末に通知するには
トークンと端末情報が必要なので、少しハードルが
高いですが、追々やってみようと思います。