20 リモートURLを使用したアプリケーション機能コンテンツの実装
この章の内容は次のとおりです。
リモートURLアプリケーションの概要
maf-feature.xml
ファイルの概要エディタでリモートURLコンテンツ・タイプを使用するアプリケーション機能にURL接続を作成することにより、サーバー・ホスト型のアプリケーションにアクセスできます。
次に示すように、このようなサーバー・ホスト型のアプリケーションは、偶発的な使用を目的としていて、デバイスのメモリーまたはサービス(カメラ、連絡先、GPSなど)に直接アクセスできない点が、MAF AMX、ローカルHTML、またはObjective-Cなどのプラットフォーム固有言語で記述されたクライアント・アプリケーションとは異なります。そのかわりに、これらのやり取りはデバイス・ブラウザの機能に左右されます。リモートURLコンテンツの構成の詳細は、「アプリケーション機能のコンテンツをリモートURLまたはローカルHTMLとして定義する方法」を参照してください。
リモート・アプリケーションによるコンテナ・サービスへのアクセスの有効化
MAFのWebビュー内で開かれるリモートURLアプリケーションは、Apache Cordova JavaScript APIを使用してデバイス機能にアクセスし、MAF JavaScript APIを使用してMAFコンテナ・サービスにアクセスします。
このアクセスを可能にするには、base.js
ライブラリを参照するJavaScriptの<script>
タグ使用します。
サーバーによってレンダリングされたWebアプリケーション内からMAFまたはCordova JavaScript APIにアクセスするには(たとえば、EL式の取得と設定、アプリケーションに関する情報の取得、写真の撮影、コンタクト先へのアクセスなど)、base.js
のインクルード時に仮想パス/~maf.device~/
を使用して、ブラウザがリクエストをリモート・サーバーではなくMAFリソースに対するものとして識別できるようにする必要があります。このアプローチはリモートとローカルの両方のHTMLページで機能するので、(提供元にかかわらず) base.js
をHTML機能にインクルードする方法として最適です。次の例に、デバイスのHTMLページまたはリモートのHTMLページからbase.js
をインクルードする方法を示します。
<html> <head> <script src="/~maf.device~/www/js/base.js"></script> ...
コンテナ・コードでは、リクエストされたURLの/~maf.device~/
を読み取ると、次の例に示すように、そのURLをローカルに解決してネイティブ・リクエストとして処理します。
<script src="http://your.domain.ip/~maf.device~/www/js/base.js"></script>
your.domain.ip
は、リモートURLからのドメインです。
次に、MAFがコンテナ・コード内のファイル・システムからファイルを読み取って、ローカル・ファイル・コンテンツをWebビューに送信します。
すでに説明したように、仮想パス/~maf.device~/
の使用に加え、そのコンテンツ・タイプとしてリモートURLのアプリケーションを指定するアプリケーション機能のmaf-application.xml
ファイルで、ネイティブ・アクセスを許可するプロパティ(allowNativeAccess
)がデフォルト値のtrue
に設定されていることを確認します。次の例は、maf-application.xml
ソース・ファイル内のこのプロパティを示しています。
<adfmf:featureReference refId="remoteAppfeature1" id="fr1" allowNativeAccess="true"/>
このプロパティがfalse
の場合、リモートURLアプリケーション機能はコンテナ・サービスにアクセスできません。
MAFアプリケーションでのリモートURLのホワイトリストへの追加
リモートURLアプリケーション機能にコンテナ・サービスへのアクセスを許可し、サービスにアクセスできるURLのリストを制限する場合に、ホワイトリストを使用します。
このタスクを実行することを一般に、ホワイトリストに追加すると言います。たとえば、図にはhttp://www.oracle.com
をレンダリングするリモートURLアプリケーションが示されています。次の図のオンデマンドでWebcastを見るリンクを使用すると、oracle.com以外のURLにナビゲートされると仮定します。oracle以外のURLにコンテナ・サービスへのアクセスを許可した場合、そのURLがどのようなアクションを実行するかわからず、また信頼できないため、これは望ましくありません。MAFアプリケーションでホワイトリストを実装すると、oracle.com URLへのアクセスを制限し、リモートURLアプリケーション機能にコンテナ・サービスへのアクセスを許可している場合に、信頼できないURLがコンテナ・サービスにアクセスできないようにすることができます。
MAFアプリケーションでホワイトリストを実装する場合は、Cordovaプラグインを使用します。Cordovaプラグインによるホワイトリストの実装方法の概要は、https://cordova.apache.org/docs/en/latest/guide/appdev/whitelist/index.htmlで、Apache Cordovaドキュメントの『Whitelist Guide』を参照してください。
Apache Cordovaからは、AndroidにデプロイするMAFアプリケーションでホワイトリストを実装するように構成できるプラグイン(cordova-plugin-whitelist
)が提供されています。このプラグインをダウンロードし、変更し、ホワイトリスト・エントリを構成して、MAFアプリケーションに登録します。iOSおよびUWPの場合は、自分で開発または変更したプラグインのplugin.xml
でホワイトリスト・エントリを構成します。
ヒント:
Android用のApache Cordovaプラグイン(cordova-plugin-whitelist
)のplugin.xml
ファイルを、Android、iOSおよびUWPそれぞれについてホワイトリスト・エントリを使用して構成します。このアプローチでは、MAFアプリケーションをデプロイするすべてのプラットフォームのホワイトリストを実装する1つのプラグインをMAFアプリケーションに登録します。次の各項では、各プラットフォームのホワイトリストの実装方法を示す、サンプルplugin.xml
エントリを示します。
具体的な情報は次のリンクを参照してください。
-
Androidプラットフォームの場合は、「AndroidプラットフォームでリモートURLをホワイトリストに追加する方法」を参照してください。
-
iOSプラットフォームの場合は、「iOSプラットフォームでリモートURLをホワイトリストに追加する方法」を参照してください。
-
ユニバーサルWindowsプラットフォームの場合は、「ユニバーサルWindowsプラットフォームでリモートURLをホワイトリストに追加する方法」を参照してください。
AndroidプラットフォームでリモートURLをホワイトリストに追加する方法
AndroidにデプロイするMAFアプリケーションでホワイトリストを実装するには、Cordovaプラグインを作成します。
または、cordova-plugin-whitelist
プラグインをダウンロードして、次のように変更します。
-
テキスト・エディタでファイル
src/android/WhitelistPlugin.java
を開きます。 -
次の各メソッドで、
return null;
をreturn false;
に変更します。-
shouldAllowNavigation(String url)
-
shouldAllowRequest(String url)
-
shouldOpenExternalUrl(String url)
-
-
変更したファイルを保存します
plugin.xml
ファイルでホワイトリスト・エントリを構成し、このファイルをMAFアプリケーションに登録します。cordova-plugin-whitelist
の詳細は、https://cordova.apache.org/docs/en/latest/guide/appdev/whitelist/index.htmlでApache Cordovaドキュメントを参照してください。後者のドキュメントでは、プラグインを使用して、ナビゲーションおよびネットワーク・リクエスト・ホワイトリストを実装する方法およびコンテンツ・セキュリティ・ポリシーを実装する方法を示すサンプルが提供されます。
次のサンプルは、oracle.comドメインからのHTTPおよびHTTPS URLをホワイトリストに追加するようにplugin.xml
ファイルを構成する方法を示しています。
<?xml version="1.0" encoding="UTF-8"?> <plugin xmlns="http://apache.org/cordova/ns/plugins/1.0" id="cordova-plugin-whitelist" version="1.2.2"> <name>Whitelist</name> <description>Cordova Network Whitelist Plugin</description> <license>Apache 2.0</license> <keywords>cordova,whitelist,policy</keywords> <engines> <engine name="cordova-android" version=">=4.0.0" /> </engines> <platform name="android"> <config-file target="res/xml/config.xml" parent="/*"> <allow-navigation href="http://*.oracle.com/*"/> <allow-navigation href="https://*.oracle.com/*"/> <feature name="Whitelist" > <param name="android-package" value="org.apache.cordova.whitelist.WhitelistPlugin"/> <param name="onload" value="true" /> </feature> </config-file> <source-file src="src/android/WhitelistPlugin.java" target-dir="src/org/apache/cordova/whitelist" /> <info> This plugin is only applicable for versions of cordova-android greater than 4.0. If you have a previous platform version, you do *not* need this plugin since the whitelist will be built in. </info> </platform> </plugin>
必要なホワイトリストの実装が完了したら、「MAFアプリケーションでの追加プラグインの登録」の説明に従って、プラグインをMAFアプリケーションに追加します。
MAFアプリケーションで使用するプラグインの開発の詳細は、「MAFアプリケーションでのプラグインの使用方法の概要」を参照してください。
iOSプラットフォームでリモートURLをホワイトリストに追加する方法
iOSにデプロイするMAFアプリケーションでホワイトリストを実装するには、Cordovaプラグインを作成します。
ホワイトリストを有効にするMAFアプリケーションで、Cordovaプラグインを開発または登録するか、その両方を行います。次のサンプルは、oracle.com
ドメインからのHTTPおよびHTTPS URLをホワイトリストに追加するために使用できるプラグインを示しています。
<?xml version="1.0" encoding="UTF-8"?> <plugin xmlns="http://apache.org/cordova/ns/plugins/1.0" id="maf-ios-whitelist-plugin" version="1.0.0"> <name>Whitelisting</name> <description>Plugin to white list remote URLs in a MAF app on iOS.</description> <platform name="ios"> <config-file target="config.xml" parent="/*"> <allow-navigation href="http://*.oracle.com/*"/> <allow-navigation href="https://*.oracle.com/*"/> <feature name="CDVIntentAndNavigationFilter"> <param name="ios-package" value="CDVIntentAndNavigationFilter"/> <param name="onload" value="true"/> </feature> </config-file> </platform> </plugin>
ホワイトリストは、ハイパーリンクおよび最上位レベルのURIに対して機能します。ホワイトリストは、XMLHttpRequestsを含むリソース・ローディングおよびHTML src
属性で使用されるURIに対しては機能しません。
MAFアプリケーションで使用するプラグインの開発の詳細は、「MAFアプリケーションでのプラグインの使用方法の概要」を参照してください。プラグインの開発が完了したら、「MAFアプリケーションでの追加プラグインの登録」の説明に従って、プラグインをMAFアプリケーションに登録します。
ユニバーサルWindowsプラットフォームでリモートURLをホワイトリストに追加する方法
UWPにデプロイするMAFアプリケーションでホワイトリストを実装するには、Cordovaプラグインを作成します。
ホワイトリストを有効にするMAFアプリケーションで、Cordovaプラグインを開発または登録するか、その両方を行います。
次の注釈付きサンプルで、プラグインでホワイトリストを実装する方法を示すいくつかの例を参照してください。
<?xml version="1.0" encoding="UTF-8"?> <plugin xmlns=http://apache.org/cordova/ns/plugins/1.0 xmlns:uap=http://schemas.microsoft.com/appx/manifest/uap/windows10 id="maf-cordova-plugin-windows-whitelist" version="1.0.0"> <name>MAF Windows Whitelist</name> <description>MAF Windows Plugin to whitelist URLs that have Window RT access</description> <keywords>cordova,whitelist</keywords> <!-- windows 10 --> <platform name="windows"> <!-- In a MAF application, local package URLs have access to all Windows Runtime(RT) API. Access to Windows RT API is essential for Cordova plugins that need to make device calls. External website URLs like: http:// and https:// do NOT have access to Windows RT API by default in MAF. This plugin allows modifications to the application manifest so that Windows RT API access and hence Cordova device access can be granted to external URLs. --> <config-file target="package.appxmanifest" parent="/Package/Applications/Application/uap:ApplicationContentUriRules"> <!-- The following example provides access to the Window RT API to a single page --> <uap:Rule Match="http://example.com/crmapp/contacts/contact.html" Type="include" WindowsRuntimeAccess="all" /> <!-- The following example denies access to Window RT API to specific directories inside the package --> <uap:Rule Match="ms-appx-web:///FARs/ViewController/public_html/noNativeAcessFeature/*" Type="include" WindowsRuntimeAccess="none" /> <!��� The following example allows everything in the oracle.com domain to access the Windows RT API in the application--> <uap:Rule Match="http://*.oracle.com/*" Type="include" WindowsRuntimeAccess="all" /> </config-file> </platform> </plugin>
必要なホワイトリストの実装が完了したら、「MAFアプリケーションでの追加プラグインの登録」の説明に従って、プラグインをMAFアプリケーションに追加します。
MAFアプリケーションで使用するプラグインの開発の詳細は、「MAFアプリケーションでのプラグインの使用方法の概要」を参照してください。
リモートURLページでのブラウザ・ナビゲーション・バーの有効化
MAFでは、MAFのWebビュー内で開く、リモートで供給されるWebコンテンツとして実装されるアプリケーション機能に対して、戻る、進むおよびリフレッシュの各アクション用のボタンが付いたナビゲーション・バーを追加できます。
図に示すように、進むまたは戻るのいずれかの移動が不可能な場合は、進むと戻るのボタンが無効になります。
注意:
戻るボタンは、Androidデバイスでは無効になります。
リモートURLアプリケーション機能へのナビゲーション・バーの追加方法
maf-feature.xml
ファイルの概要エディタの「コンテンツ」タブで、ユーザーがリモート・コンテンツを移動またはリフレッシュできるようにします。
始める前に:
「アプリケーション機能のコンテンツをリモートURLまたはローカルHTMLとして定義する方法」の説明に従って、まず「リモートURL」を選択し、次にホスト・サーバーへの接続を作成することにより、リモートでホストされるアプリケーションから配信されるアプリケーション機能のコンテンツを指定します。
ナビゲーション・バーを有効にするには:
リモートURLアプリケーション機能のブラウザ・ナビゲーション・ボタンを有効にする場合の処理
JDeveloperでは、showNavButtons
と呼ばれる属性でadfmf:remoteURL
要素を更新します。次の例に示すとおり、ここではtrue
に設定されています。
<?xml version="1.0" encoding="UTF-8" ?> <adfmf:features xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:adfmf="http://xmlns.oracle.com/adf/mf"> <adfmf:feature id="oraclemobile" name="oraclemobile"> <adfmf:content id="oraclemobile.1"> <adfmf:remoteURL connection="connection1" showNavButtons="true"/> </adfmf:content> </adfmf:feature> </adfmf:features>
アプリケーションをデプロイすると、図に示すように、MAFでは、進む、戻るおよびリフレッシュの各ボタンがリモートURLアプリケーション機能のホームページから移動されるWebページに適用されます