ローカルPush通知の実装例
実装例
実装ルール
-
契機の設定内容は契機1種類につき1つまでです。
-
通知タップイベントのハンドリングについて、 「実装者自身が、通知に含めた任意のデータによって処理をハンドリングする」という方針となっています。
-
詳しい通知についての説明はLocal Push Notificationに記載しています。
簡単な通知を用いた実装例
- タイマー契機(10秒)「2025/11/30 11:00」にそれぞれ1回だけ行うデフォルトの通知を登録し、通知タップ時のイベントを取得する例。
準備
- 通知情報の定義(ペイロード、契機)
- 通知を使用するための設定(ネイティブ側)
今回使用する関数
- 通知登録:Alier.Native.createNotification(payload,trigger)
- 通知削除:Alier.Native.deleteNotification(notificationId)
- 通知バッジ操作:Alier.Native.setbadgenumber(number)
通知情報の定義
-
以下は、通知情報および契機の定義の例です。通知作成に使用するデータを定義します。
//通知情報(ペイロード)の用意。 const payload = { manageId: "test", title: "タイマー", message: "時間になりました", badge:1,//バッジのカウンタ image:"対象リソースのパス", data: { name:"田中", type: "user", pageId:"aaaa-bbbb-cccc" }, appScheme: "userpage"//別アプリ立ち上げるためのスキーム } //契機の用意。 タイマ,カレンダ契機を指定。 const timerTrigger = { timer: { seconds: 10, //単位:秒 repeat: true }, calendar:{ year: 2025, month: 3, day: 21, hour: 11, minute: 30 seconds: 0 } }
ネイティブ側での準備
Android
-
AndroidManifest.xmlに通知利用のpermissionを追加します。
<uses-permission android:name\="android.permission.POST\_NOTIFICATIONS" \>
-
gradle(:app)にuserdataを使用するための依存関係を明記します。
implementation "androidx.datastore:datastore-preferences:1.1.5"
- Alierでは、通知管理のためにDataStoreを使用しています。
-
Android13以降の場合:通知許可のアラートの実装を行います。
//許可されているか確認し、処理の分岐を定義する。 private val requestPermissionLauncher = registerForActivityResult(ActivityResultContracts.RequestPermission()) { isGranted: Boolean -> if (isGranted) { //ユーザーが許可した場合 } else { //ユーザーが拒否した場合 } } //通知許可のアラートを表示する。 if (ContextCompat.checkSelfPermission( this, Manifest.permission.POST_NOTIFICATIONS ) != PackageManager.PERMISSION_GRANTED ) { requestPermissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS) }
iOS
-
info.plistに以下の通知利用の設定を追加します。
・Key: Privacy - User Notifications Usage Description ・value: 通知許可アラートに表示するための任意のメッセージ。
-
Push通知の許可確認の実装を行います。
//通知許可のアラートを表示する UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .badge, .sound]) { (granted, error) in if granted { print("許可") } }
JS側での実装
通知バナータップイベントの取得の実装
-
通知バナータップイベントは「Alier.SysEvent.addListener」を利用して取得します。
-
イベント名はnotifiedです。
//main関数 async function main(args) { Object.assign(window, await Alier.import("/alier_sys/AlierFramework.js")); //システムイベントの取得 Alier.SysEvent.addListener((param) => { const msg = JSON.parse(param); switch (msg.messageCode) { //3.通知タップ時のイベントの取得 case "notified": { const param = message.param; if(param && param.data){ //ペイロードのdata部分の取得 const data = param.data; console.log(data);//結果:{name: "田中", type:"user" , pageId: "aaaa-bbbb-cccc"} //ペイロードのdataから処理を分岐させる例。 switch (data.type) { case "user": console.log(data.name);//田中 console.log(data.pageId);//aaaa-bbbb-cccc //iOSのみ対応: 通知バッジの数字を変更する。 await Alier.Native.changeNotificationBadge(0); break; } } } break; } }); //1. 通知の登録: Alierが使用できる場所であれば、どこでも呼び出し可能。 const notificationIdMap = await Alier.Native.createNotification(payload,timerTrigger); console.log(notificationIdMap)//{契機名: 通知ID} { timer: "test__alier__xxxxxxx" } const timerNotificationId = notificationIdMap.timer; //2. 通知のキャンセル: Alierが使用できる場所であれば、どこでも呼び出し可能。 await Alier.Native.deleteNotification(timerNotificationId); }
-
「通知の登録」「通知のキャンセル」は、Alierが使用できる場所であればどこでも行えます。上記は例示のために、まとめてmain関数内で行なっています。