OutSYstemsのモバイルアプリケーションに自動で付与されるApp Identifierを取得するJavaScript APIが追加されているようなので動作確認してみる。
(SAML認証をモバイルアプリケーションにも提供するSingle Sign-On Mobile Pluginの実装を見ているときに存在に気づいた)
結論から
モバイルアプリケーションへのDeep linkに使うApp IdentifierをJavaScript API「OutSystemsNative.ApplicationInfo.getAppPackageIdentifier」を利用することでプログラムから取得できるようになった(MABS9から)。
環境情報
Personal Environment(Version 11.18.1 (Build 37884))
Service Studio(Version 11.53.39)
MABS 9.0
App Identifier
Service CenterのApplicationページ > Distributeタブ > Configure
で開いたページで、App Identifier項目を確認できる。
設定可能項目であるが、デフォルトで、「(hostを.区切りで逆順にしたもの).モジュール名」というフォーマットの値が入っている。
Deep link
モバイルアプリケーションの特定の画面へのリンク(Deep link)は
「App Identifier://モジュール名/画面名」
の形式。このApp Identifierが今回問題としているもの。
モバイルアプリのディープリンクの設定
App Identifierを取得する新API(MABS 9)
MABS 9で追加された機能にJavaScriptの新しい関数「OutSystemsNative.OSApplicationInfo.getAppPackageIdentifier」というものがあり、App Identifierを取得できる。
It is now possible to obtain the application package identifier using the js method OSApplicationInfo.getAppPackageIdentifier. (RNMT-5784)
使い方は、Client Actionのフロー内にJavaScript要素を配置し、以下のように記述する。
function Success(appId) {
$parameters.AppIdentifier = appId;
$parameters.Success = true;
$resolve();
}
function Fail(message) {
$parameters.ErrorMessage = message;
$parameters.Success = false;
$resolve();
}
OutSystemsNative.ApplicationInfo.getAppPackageIdentifier(Success, Fail);
OutSystemsNative.ApplicationInfo.getAppPackageIdentifier関数に成功時のコールバックと失敗時のコールバックを渡す。成功すると、成功時のコールバック(1つ目)が動作し、その引数にApp Identifierが渡ってくる。
ただし、今のところドキュメントが無いようなので、公開で利用して良いものかどうかは不明。
公式サポートプラグインであるSingle Sign-On Mobileでは利用していた。
動作確認
実際にJavaScriptを組み込んで動作確認してみた。
PWAの場合、以下のエラーメッセージが表示される(つまり、OutSystemsNativeはPWAでは未定義になる)。
Can't find variable: OutSystemsNative
Native (android)ではService Centerで設定してあったApp Identifierが正しく取得できた。
用途
Single Sign-On Mobileでやっているように、外部の認証サーバーに認証をリクエストし、認証成功後アプリケーションに戻ってくる時に使う。
外部の認証サーバーにリクエストする際に、戻ってくる画面へのパスをDeep linkで渡すのにApp Identifierが必要になる。
私も、OpenID Connectの実装をする際にApp Identifierが必要になったことがある。そのときはこのAPIが利用できなかったために、利用側でApp Identifierを設定値として保持してもらった。このAPIが利用できれば、設定値が不要になりちょっと楽ができる。