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

前
次

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

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

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

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

maf-feature.xmlファイルの概要エディタでリモートURLコンテンツ・タイプを使用するアプリケーション機能にURL接続を作成することにより、サーバー・ホスト型のアプリケーションにアクセスできます。

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

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

図20-1の説明が続きます
「図20-1 リモートURLコンテンツの構成」の説明

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

20.3 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エントリを示します。

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

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

図20-2の説明が続きます
「図20-2 MAF WebビューのリモートURL」の説明

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

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

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

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

MAFでは、MAFのWebビュー内で開く、リモートで供給されるWebコンテンツとして実装されるアプリケーション機能に対して、戻る、進むおよびリフレッシュの各アクション用のボタンが付いたナビゲーション・バーを追加できます。

図に示すように、進むまたは戻るのいずれかの移動が不可能な場合は、進むと戻るのボタンが無効になります。

注意:

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

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

図20-3の説明が続きます
「図20-3 ナビゲーション・ボタンとリフレッシュ・ボタンを表示するリモートWebページ」の説明

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

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

始める前に:

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

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

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

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

    図20-4の説明が続きます
    「図20-4 ナビゲーション・オプションの選択」の説明

20.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>

アプリケーションをデプロイすると、図に示すように、MAFでは、進む、戻るおよびリフレッシュの各ボタンがリモートURLアプリケーション機能のホームページから移動されるWebページに適用されます

Figure 20-5 リモートURLアプリケーション機能での移動

図20-5の説明が続きます
「図20-5 リモートURLアプリケーション機能での移動」の説明