モデル駆動型アプリでのアプリ内通知は2021年8月末にパブリックプレビューが開始された新機能です。 これまでもPush通知は提供されてきましたが、これはモバイルアプリ限定で動作するものでした。
アプリ内通知はモバイルアプリ利用中のみならず、ブラウザーでアプリを利用している場合にもユーザーに通知を送ることができる機能です。
通知はユーザー単位で送られます。(今のところ) 複数のアプリを使っている場合には、通知を有効にしたすべてのアプリで通知が表示されます。
本投稿ではアプリ内通知の設定方法、解除方法、カスタムページからの通知、Power Automateを使った通知について紹介します。
公式のDocsは以下を参照してください。
アプリ内通知を設定する
アプリ内通知はアプリ単位で有効にします。事前にアプリの"名前"を控えておいてください。アプリの"名前"はソリューションエクスプローラで確認できます。
通知の設定を有効にするにはブラウザーのデベロッパーツールを使います。
対象のアプリを実行(編集ではなく実行)した状態でデベロッパーツールを起動します。(ChromeならCtrl+Shift+I)
デベロッパーツールのコンソールに以下Javascriptコードをコピペします。その際、"Your app unique name"の部分を先ほど控えておいたアプリの名前と置き換えてください。
fetch(window.origin + "/api/data/v9.1/SaveSettingValue()",{ method: "POST", headers: {'Content-Type': 'application/json'}, body: JSON.stringify({AppUniqueName: "Your app unique name", SettingName:"AllowNotificationsEarlyAccess", Value: "true"}) });
エンターを押してコードを実行します。
アプリが存在するソリューションを開き (どこのソリューションにも追加していない場合には既定のソリューション)、すべてのカスタマイズの発行を行います。(ここ大事!)
以上で設定は完了です。
設定状況を確認するには既定のソリューション内にある「モデル駆動型アプリの設定」テーブルのデータを表示して、この中でSettingDefinitionId が Allow notifications early access になっている行を見てください。
一意の名前 の列に設定したアプリの名前が入っていれば設定成功です。
設定の解除
通知を解除する場合にも「モデル駆動型アプリの設定」テーブルにある対象のレコードを削除することで解除できます。
通知の作成 (Power Automate の利用)
アプリ内通知は「通知」テーブルのレコードを介して実行されます。通知テーブルを確認するには既定のソリューション内で「通知」で検索してください。
通知テーブルにはさまざまな列が含まれますが、利用するのは「IconType」、「タイトル」、「データ」、「本文」です。また、通知の送信先はレコードの「所有者」で決まります。
通知のテストは Power Automate のクラウドフローを使うのが簡単です。
「通知」テーブルにレコードを追加するアクションを実行すれば、通知設定をしておいたアプリのベルマークをクリックしたときに通知内容が表示されることが確認できます。
また、通知を X で消すとレコードも消えていることが確認できると思います。
カスタムページからの通知
「通知」テーブルにレコードが作成できれば良いので、プレビュー提供されている「カスタムページ」(モデル駆動型の上で動くキャンバスアプリ) からも通知を送ることができます。
カスタムページを追加し、そのページ (キャンバス) 上で「通知」テーブルをデータソースとして追加、ボタンに以下の関数を設定します。
Patch(通知, { タイトル:"Out of stock", 本文: "THIS ONE WON'T BE USED", IconType: 'IconType (通知)'.情報, データ: JSON({ body : "HERE I OVERWRITE THE BODY" }) });
日本語環境だと列名がところどころ日本語なので気をつけましょう。
また、「データ」列を設定する場合には、JSONを文字列化したものを指定する必要があるので、JSON()
関数を利用します。
あとはモデル駆動型アプリを発行し、カスタムページ内でボタンを押してみてください。下図のような通知が表示されれば成功です。
その他、本文のMarkdownによる装飾や、カスタムアイコンの利用に関しては Diana の以下のブログを参考にしてください。
Send In-App Notifications from Custom Pagesdianabirkelbach.wordpress.com
おわり
まだプレビュー提供を開始したばかりのアプリ内通知ですが、カスタムページ内での処理の結果を通知したり、クラウドフローでの処理結果の通知を送ったりと活用の幅が広そうです。
モデル駆動型アプリに限定はされていますが、レコードを起点にした通知の仕組みはキャンバスでも応用できるかもしれません。