ローカル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

  4. info.plistに以下の通知利用の設定を追加します。

     ・Key: Privacy - User Notifications Usage Description
     ・value: 通知許可アラートに表示するための任意のメッセージ。  
  5. 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関数内で行なっています。