Oracle® Mobile Application Framework Oracle Mobile Application Frameworkでのモバイル・アプリケーションの開発 2.3.3 E82940-01 |
|
前 |
次 |
この章の内容は次のとおりです。
図22-1に示すように、maf-feature.xml
ファイルの概要エディタにあるアプリケーション機能のコンテンツ・タイプをリモートURLとして構成することで、指定されたURLから供給されるブラウザベースのアプリケーションを作成します。このようなサーバー・ホスト型のアプリケーションは、偶発的な使用を目的としている点およびデバイスのメモリーまたはサービス(カメラ、コンタクト先、GPSなど)に直接アクセスできない点で、MAF AMX、ローカルHTML、またはObjective-Cなどのプラットフォーム固有言語で記述されたクライアント・アプリケーションとは異なります。そのかわりに、これらのやり取りはデバイス・ブラウザの機能に左右されます。リモートURLコンテンツの構成の詳細は、「アプリケーション機能のコンテンツをリモートURLまたはローカルHTMLとして定義する方法」を参照してください。
図22-1 リモートURLコンテンツの構成
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のアプリケーション機能からコンテナ・サービスにアクセスできません。
リモートURLアプリケーション機能にコンテナ・サービスへのアクセスを許可し、サービスにアクセスできるURLのリストを制限する場合に、ホワイトリストを使用します。
このタスクを実行することを一般に、ホワイトリストに追加すると言います。たとえば、図22-2には、http://www.oracle.com
をレンダリングするリモートURLアプリケーションが示されています。図22-2のオンデマンドで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をホワイトリストに追加する方法」を参照してください。
図22-2 MAF Webビューのリモート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/cordova-plugin-whitelist/で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にデプロイする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アプリケーションに登録します。
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アプリケーションでのプラグインの使用方法の概要」を参照してください。
MAFでは、図22-3に示すように、MAFのWebビュー内で開く、リモートで供給されるWebコンテンツとして実装されるアプリケーション機能に対して、戻る、進むおよびリフレッシュの各アクション用のボタンが付いたナビゲーション・バーを追加できます。進むまたは戻るのいずれかの移動が不可能な場合は、進むと戻るのボタンが無効になります。
注意:
戻るボタンは、Androidデバイスでは無効になります。
図22-3 ナビゲーション・ボタンとリフレッシュ・ボタンを表示するリモートWebページ
maf-feature.xml
ファイルの概要エディタの「コンテンツ」タブで、ユーザーがリモート・コンテンツを移動またはリフレッシュできるようにします。
始める前に:
「アプリケーション機能のコンテンツをリモートURLまたはローカルHTMLとして定義する方法」の説明に従って、まず「リモート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>
アプリケーションをデプロイすると、図22-5に示すとおり、MAFでは、進む、戻るおよびリフレッシュの各ボタンがリモートURLアプリケーション機能のホームページから移動されるWebページに適用されます。
Figure 22-5 リモートURLアプリケーション機能での移動