2023年4月21日金曜日

Oracle APEX 23.1のプッシュ通知を使ってみる

apex.oracle.comのAPEXが23.1のプレリリース版にアップグレードされました。APEX 23.1にて提供される新機能のひとつである、プッシュ通知を確認してみます。

いち早く動作を確認した方が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.とします。リンク・ターゲットに、同じアプリケーションのページ番号を指定します。

ボタンNotifyをクリックした時に実行されるように、サーバー側の条件ボタン押下時としてNOTIFYを選択します。


アプリケーションを実行し、アプリケーションのインストールを実施します。


アプリケーションのインストールができたら、プッシュ通知の設定を再度確認します。


Push ToTitleMessageを指定して、Notifyをクリックして通知を実行します。


Apple iOSのデバイスに作成したアプリをインストールし、通知を確認してみました。PWAのプッシュ通知はiOS/iPadOS 16.4以降のSafariでサポートされます。


プッシュ通知の実装の確認は以上です。

動かないと思ったら?


通知のサブスクリプションが登録されているかどうか、ビューAPEX_APPL_PUSH_SUBSCRIPTIONSを検索して確認します。

select * from APEX_APPL_PUSH_SUBSCRIPTIONS;


Google Chromeから通知を設定した場合はSUBSCRIPTION_INTERFACEendpointとして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のアプリケーション作成の参考になれば幸いです。