プライマリ・コンテンツに移動
Oracle® Mobile Application Framework Oracle Mobile Application Frameworkでのモバイル・アプリケーションの開発
2.3.3
E82940-01
目次へ移動
目次

前
次

22 リモートURLを使用したアプリケーション機能コンテンツの実装

この章では、デバイス・サービスに対して、リモートURLからのコンテンツを使用するアプリケーション機能をアクセス可能(または制限可能)にする方法について説明します。また、MAFでホワイトリストを実装する方法と、MAFアプリケーションのWebビューでレンダリングされるリモートURLページでナビゲーション・バーを有効にする方法についても説明します。

この章の内容は次のとおりです。

22.1 リモートURLアプリケーションの概要

図22-1に示すように、maf-feature.xmlファイルの概要エディタにあるアプリケーション機能のコンテンツ・タイプをリモートURLとして構成することで、指定されたURLから供給されるブラウザベースのアプリケーションを作成します。このようなサーバー・ホスト型のアプリケーションは、偶発的な使用を目的としている点およびデバイスのメモリーまたはサービス(カメラ、コンタクト先、GPSなど)に直接アクセスできない点で、MAF AMX、ローカルHTML、またはObjective-Cなどのプラットフォーム固有言語で記述されたクライアント・アプリケーションとは異なります。そのかわりに、これらのやり取りはデバイス・ブラウザの機能に左右されます。リモートURLコンテンツの構成の詳細は、「アプリケーション機能のコンテンツをリモートURLまたはローカルHTMLとして定義する方法」を参照してください。

図22-1 リモートURLコンテンツの構成

このイメージについては周囲のテキストで説明しています。

22.2 リモート・アプリケーションによるコンテナ・サービスへのアクセスの有効化

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のアプリケーション機能からコンテナ・サービスにアクセスできません。

22.3 MAFアプリケーションでのリモート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エントリを示します。

具体的な情報は次のリンクを参照してください。

図22-2 MAF WebビューのリモートURL

このイメージについては周囲のテキストで説明しています

22.3.1 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/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アプリケーションでのプラグインの使用方法の概要」を参照してください。

22.3.2 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アプリケーションに登録します。

22.3.3 ユニバーサル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アプリケーションでのプラグインの使用方法の概要」を参照してください。

22.4 リモートURLページでのブラウザ・ナビゲーション・バーの有効化

MAFでは、図22-3に示すように、MAFのWebビュー内で開く、リモートで供給されるWebコンテンツとして実装されるアプリケーション機能に対して、戻る、進むおよびリフレッシュの各アクション用のボタンが付いたナビゲーション・バーを追加できます。進むまたは戻るのいずれかの移動が不可能な場合は、進むと戻るのボタンが無効になります。

注意:

戻るボタンは、Androidデバイスでは無効になります。

図22-3 ナビゲーション・ボタンとリフレッシュ・ボタンを表示するリモートWebページ

この図は周囲のテキストで説明しています

22.4.1 リモートURLアプリケーション機能へのナビゲーション・バーの追加方法

maf-feature.xmlファイルの概要エディタの「コンテンツ」タブで、ユーザーがリモート・コンテンツを移動またはリフレッシュできるようにします。

始める前に:

「アプリケーション機能のコンテンツをリモートURLまたはローカルHTMLとして定義する方法」の説明に従って、まず「リモートURL」を選択し、次にホスト・サーバーへの接続を作成することにより、リモートでホストされるアプリケーションから配信されるアプリケーション機能のコンテンツを指定します。

ナビゲーション・バーを有効にするには:

  1. maf-feature.xmlファイルの「機能」表にリストされている「リモートURL」アプリケーション機能を選択します。
  2. 「コンテンツ」をクリックします。
  3. 図22-4に示すとおり、「ブラウザ・ナビゲーション・ボタンの表示」を選択します。

    図22-4 ナビゲーション・オプションの選択

    この図は周囲のテキストで説明しています

22.4.2 リモート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アプリケーション機能での移動

この図は周囲のテキストで説明しています