いち早く動作を確認した方がYouTubeに動画をポストしていたので、その内容を参考にしました。
Push Notifications - Oracle APEX 23.1 New Features
https://www.youtube.com/watch?v=u_re_3cxz3U
apex.oracle.comのワークスペースを使用します。
アプリケーション作成ウィザードを起動し、新規にアプリケーションを作成します。
アプリケーション・アイコンと名前はプッシュ通知の表示に含まれます。後からでも変更できますが、通知に表示されることを意識して設定することをお勧めします。
機能に含まれるプログレッシブWebアプリケーションのインストールとプッシュ通知にチェックを入れます。
以上で、アプリケーションの作成を実行します。
アプリケーションが作成されます。機能としてプッシュ通知を含めたため、ページ番号20020として、プッシュ通知の設定を行うページが作成されています。
アプリケーションを実行します。
まだ何もアプリケーションには実装していません。
ナビゲーション・バーの一番右にユーザー名のメニューがあります。そのメニューから設定を開きます。
画面右よりドロワーが開きます。プッシュ通知をクリックすると設定画面が開きます。
ホーム・ページにプッシュ通知を送信する画面を作成します。作成した画面は以下のようになります。
通知先を指定するページ・アイテムを作成します。
識別の名前はP1_PUSH_TO、タイプは選択リストとします。ラベルはPush Toとしています。LOVのタイプにSQL問合せを選択し、SQL問合せとして以下を記述します。
select user_name d, user_name r from APEX_WORKSPACE_APEX_USERS where workspace_id = :WORKSPACE_ID
ワークスペースに作成されているユーザーから、通知の宛先を選択します。
通知のタイトルを記述するページ・アイテムを作成します。
識別の名前はP1_TITLE、タイプはテキスト・フィールド、ラベルはTitleとします。
同様に通知の本文を指定するページ・アイテムを作成します。
識別の名前はP1_MESSAGE、タイプはテキスト・フィールド、ラベルはMessageとします。
プッシュ通知を実行するボタンを作成します。
識別のボタン名をNOTIFY、ラベルをNotifyとします。動作のアクションはデフォルトのページの送信です。
プロセス・ビューを開き、プッシュ通知を行うプロセスを作成します。
識別の名前をプッシュ通知とします。タイプにプッシュ通知の送信を選択します。
設定の宛先は&P1_PUSH_TO.、タイトルは&P1_TITLE.、本文は&P1_MESSAGE.とします。リンク・ターゲットに、同じアプリケーションのページ番号1を指定します。
ボタンNotifyをクリックした時に実行されるように、サーバー側の条件のボタン押下時としてNOTIFYを選択します。
アプリケーションを実行し、アプリケーションのインストールを実施します。
Apple iOSのデバイスに作成したアプリをインストールし、通知を確認してみました。PWAのプッシュ通知はiOS/iPadOS 16.4以降のSafariでサポートされます。
動かないと思ったら?
select * from APEX_APPL_PUSH_SUBSCRIPTIONS;
Google Chromeから通知を設定した場合はSUBSCRIPTION_INTERFACEのendpointとしてfcm.googleapis.com、Appleのデバイスではweb.push.apple.comを呼び出すように設定されています。
一見してサブスクリプションが登録されているように見えても、プッシュ通知をONにしたままPWAとしてインストールしたアプリケーションを削除した場合など、無効なサブスクリプションが残っていることがあります。通知を受けるアプリケーションでプッシュ通知のオン・オフを行い、サブスクリプションが正しく登録されていることを確認します。
プッシュ通知は、APEXのインスタンスからfcm.googleapis.com、web.push.apple.comへHTTPのリクエストを発行することによって実施されています。
発行されたHTTPリクエストを確認することで、APEXからプッシュ通知が行われたかどうか確認できます。発行されたHTTPリクエストは、APEX_WEBSERVICE_LOGから確認します。
select id, url, http_method, status_code, to_char(request_date, 'RR/MM/DD HH24:MI:SS') request_date from apex_webservice_log order by request_date desc
apex.oracle.comでは、2分毎に通知を処理しているようです。そのため、プッシュ通知を実行して受信するまでに、最大で2分の遅延が発生します。
プッシュ通知の要求が成功していれば、HTTPのステータス・コードは200番台の値になります。
HTTPリクエストが成功しているにもかかわらず、プッシュ通知が受信できない場合、まずはデバイス側で通知が許可されているか確認します。
Google Chromeの場合は設定のプライバシーとセキュリティのサイトの設定に含まれる、apex.oracle.comの通知の設定を確認します。
iOSの場合は設定アプリの通知より、プッシュ通知(ホーム・ページにインストールしたアプリの名前です)を探します。
プッシュ通知の資格証明
プッシュ通知を組み込んでいるアプリケーションの、共有コンポーネントのプログレッシブWebアプリケーションのプッシュ通知のセクションは以下のようになっています。
アプリケーションにプッシュ通知を組み込む際に、Web資格証明が自動的に生成されてプッシュ通知の資格証明として設定されています。
ワークスペース・ユーティリティのWeb資格証明からも、自動的に作成されたWeb資格証明を確認できます。
このアプリケーションをエクスポートし、再度インポートした際には、この資格証明がWeb資格証明として存在しているかどうか、存在していない場合は資格証明の再生成の実施を検討する必要があります。
APIによる通知
作成したアプリケーションプッシュ通知のコピーを作ります。
タスクのこのアプリケーションをコピーを実行します。
新規アプリケーション名はプッシュ通知 - APIとします。
次へ進みます。
アプリケーションのコピーを実行します。
アプリケーションのコピーが作成されます。
ホーム・ページをページ・デザイナで開き、プロセスプッシュ通知を選択します。
識別のタイプをコードを実行に変更し、ソースのPL/SQLコードとして以下を記述します。p_application_idには、コピー元であるアプリケーションのIDを指定します。
begin
apex_pwa.send_push_notification(
p_application_id => [コピー元のアプリケーションID]
,p_user_name => :P1_PUSH_TO
,p_title => :P1_TITLE
,p_body => :P1_MESSAGE
);
end;
以上で、APIによるプッシュ通知ができるようになりました。プロセス・タイプがプッシュ通知の送信の場合、通知の送信先は同じアプリケーションでしたが、APIの場合は異なるアプリケーションに通知できます。
APIによるプッシュ通知を送信するアプリケーションは、プログレッシブWebアプリケーションが無効でも、通知を送信できます。
Oracle APEX 23.1の新機能、プッシュ通知の紹介は以上になります。
Oracle APEXのアプリケーション作成の参考になれば幸いです。
完