ローカルPush通知の実装例

実装例

実装ルール

  • 契機の設定内容は契機1種類につき1つまでです。

  • 通知タップイベントのハンドリングについて、 「実装者自身が、通知に含めた任意のデータによって処理をハンドリングする」という方針となっています。

  • 詳しい通知についての説明はLocal Push Notificationに記載しています。

簡単な通知を用いた実装例

  • タイマー契機(10秒)「2025/11/30 11:00」にそれぞれ1回だけ行うデフォルトの通知を登録し、通知タップ時のイベントを取得する例。

準備

  • 通知情報の定義(ペイロード、契機)
  • 通知を使用するための設定(ネイティブ側)

今回使用する関数

  1. 通知登録:Alier.Native.createNotification(payload,trigger)
  2. 通知削除:Alier.Native.deleteNotification(notificationId)
  3. 通知バッジ操作: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

  1. AndroidManifest.xmlに通知利用のpermissionを追加します。

    <uses-permission android:name\="android.permission.POST\_NOTIFICATIONS" \>  
    
  2. gradle(:app)にuserdataを使用するための依存関係を明記します。

    implementation "androidx.datastore:datastore-preferences:1.1.5" 
    
    • Alierでは、通知管理のためにDataStoreを使用しています。
  3. 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

  1. info.plistに以下の通知利用の設定を追加します。
    ・Key: Privacy - User Notifications Usage Description
    ・value: 通知許可アラートに表示するための任意のメッセージ。  
    
  2. 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関数内で行なっています。