ローカル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) {
import * as AlierFramework from "/alier_sys/AlierFramework.js";
Object.assign(globalThis, AlierFramework);
//システムイベントの取得
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関数内で行なっています。