ヘッダーをスキップ

Oracle® Mobile Application Framework Oracle Mobile Application Frameworkでのモバイル・アプリケーションの開発 2.1.1.0.0 E64867-01 |
| 目次

前 | 次 |

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

この章では、リモートURLからのコンテンツを使用するアプリケーション機能をデバイス・サービスにアクセス可能(またはアクセス不可)にする方法、ナビゲーション・バーを有効にする方法、およびMAFアプリケーションを起動する方法について説明します。

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

- 第20.1項「リモートURLアプリケーションの概要」

- 第20.2項「アプリケーション・コンポーネントのホワイトリストの作成」

- 第20.3項「リモートURLページでのブラウザ・ナビゲーション・バーの有効化」

- 第20.4項「カスタムURLスキームを使用したMAFアプリケーションの起動」

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

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

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

### 20.1.1 ホワイトリストを使用したリモート・アプリケーションによるデバイス・サービスへのアクセスの有効化

リモートで供給されるコンテンツのセキュリティを確保するために、MAFはホワイトリスト(GPS、カメラ、ファイル・システムなどの様々なデバイス・サービスにアクセスするためにアプリケーションのWebビュー内で開いているURLのレジストリ)の概念をサポートしています。Webページがホワイトリストに含まれていない(つまりホワイトリストされていない)場合は、そのかわりに、MAFのApache Cordova実装によってデバイス・ブラウザ(Safariなど)でWebページが開かれます。ホワイトリストがない場合、リモートWebページはMAF Webビュー内で開くことができないため、埋込みデバイス機能へのアクセスが制限されます。図20-2に示すように、MAF Webビュー内で開いているURLはアプリケーション機能として示されます。

図20-2 デバイス・ブラウザおよびMAF Webビュー内のURL

### 20.1.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をローカルに解決してネイティブ・リクエストとして処理します。次に、MAFがコンテナ・コード内のファイル・システムからファイルを読み取って、ローカル・ファイル・コンテンツをWebビューに送信します。詳細は、第B.1項「MAF APIを使用したカスタムHTML Springboardアプリケーション機能の作成」を参照してください。

### 20.1.3 ホワイトリストされたドメインによるデバイス機能へのアクセス方法

デフォルトでは、`connections.xml`ファイルに定義されているドメイン(モバイル・アプリケーションに定義されているすべての接続のリポジトリ)は、自動的にホワイトリストされます。リモートURLコンテンツのこれらのドメインは、図20-3に示すように、「URL接続の作成」ダイアログを使用して作成されます。MAFでは、各接続文字列からドメインを解析して、これらのドメインをホワイトリストに追加します。

図20-3 リモートURLアプリケーション機能のコンテンツを取得するための接続の作成

次に、JDeveloperは、「アプリケーション・リソース」パネルにある`connections.xml`ファイルに接続情報を入力し、さらに接続リソースも作成します。

`maf-application.xml`ファイルにホワイトリストされたドメインを構成することで、MAFが`connections.xml`ファイルから含めるドメインの他に、MAF Webビューで開くリモートURLコンテンツを有効化(または制限)できます。

### 20.1.4 13.1.4 ホワイトリストを作成(またはドメインを制限)する方法

`図20-4`に示すとおり、maf-application.xmlの「セキュリティ」ページでホワイトリストを構成します。

図20-4 ホワイトリストの構成

始める前に

モバイル・アプリケーションで構成された一部のURLが他のドメインで開かれる可能性があることに注意してください。

ホワイトリストを作成するには:

1. `maf-application.xml`ファイルを開いて、「セキュリティ」タブを選択します。

2. 「リモートURL Whitelist」セクションで「追加」をクリックし、アプリケーション機能のWebビュー内からコールできるドメインを入力します。これらのドメイン名にはアスタリスク(*)を含めることができますが、末尾に付けることはできません。たとえば、`*.example.com`は有効ですが、`*.example.*`は無効です。ドメイン名の前には`http://`または`https://`を付ける必要がある場合があります。

   注意: ワイルドカードのみを入力すると、Webビューではすべてのドメインをリクエストできるため、セキュリティ上のリスクを招く可能性があります。また、すべてのドメインをホワイトリストに追加すると、それらのすべてがWebビュー内で開けるのみではなく、それらのすべてがデバイスにアクセスできるようになります(そのように意図しているかどうかは無関係に)。

### 20.1.5 ホワイトリストにドメインを追加する場合の処理

ドメインを追加すると、JDeveloperでは、例20-1に示すとおり`<adfmf:remoteURLWhiteList>`要素が更新されます。

例20-1 ホワイトリストの構成

    ...
    <adfmf:remoteURLWhiteList>
      <adfmf:domain id="domain_1">*.oracle.com</adfmf:domain>
      <adfmf:domain id="domain_2">http://*.example.com</adfmf:domain>
      </adfmf:remoteURLWhiteList>
    ...

### 20.1.6 リモートURLに関する必知事項

一部のURLは、ホワイトリスト・ドメインの一部ではない可能性のあるURLにリダイレクトされます。これらのURLは、アプリケーションのWebビューよりもデバイス・ブラウザで開かれる可能性があります。たとえば、`www.oracle.com` (`<adfmf:domain>www.oracle.com<adfmf:domain>`)をホワイトリストした場合、MAFはこのサイトのモバイル・バージョン(`www.m.oracle.com`)をデバイス・ブラウザに開きますが、これはモバイル・バージョンがホワイトリストを通過しないためです。図20-5は、ホワイトリストに追加されていないWebページをデバイス・ブラウザ内で開いたものを示しています。

図20-5 MAF Webビューではなくデバイス・ブラウザで開かれたWebページ

`www.oracle.com`をアプリケーションのWebビュー内で開けるようにするには、例20-1に示すように`*.oracle.com`または`www.oracle.com`を指定する必要があります。

MAFのホワイトリストはドメインレベルのため、アプリケーション機能のWebビューで開くことをホワイトリストされたドメイン内の個々のページについて制限することはできず、すべてのページが許可されます。

## 20.2 アプリケーション・コンポーネントのホワイトリストの作成

別のドメインを指すURLへのリンクを含むページにホワイトリストを使用します。このようなページは、MAF Webビューではなくデバイス・ブラウザで別途開かれます。このような場合、`例20-2`の`<goLink2>`にある`url`属性など、アプリケーションの外部を指す`<amx:goLink>`コンポーネントの`url`属性を使用して、アンカー・タグまたは<amx:goLink>コンポーネントを作成できます。

例20-2 URLパラメータを使用した<amx:goLink>

    <?xml version="1.0" encoding="UTF-8" ?>
    <amx:view xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xmlns:amx="http://xmlns.oracle.com/adf/mf/amx"
              xmlns:dvtm="http://xmlns.oracle.com/adf/mf/amx/dvt">
      <amx:panelPage id="pp1">
        <amx:panelGroupLayout id="panelGroupLayout1">
          <amx:goLink text="This opens in the device browser"
                      id="golink1"
                      url="http://www.example.com"
                      shortDesc="Opens in device browser"/>
          <amx:goLink text="This opens in the web view"
                      id="golink2"
                      url="http://www.example2.com"
                      shortDesc="Accesses device services"/>
        </amx:panelGroupLayout>
      </amx:panelPage>
    </amx:view>

また、第13.3項「UIコンポーネントの作成と使用方法」も参照してください。

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

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

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

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

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

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

始める前に

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

ドメインがホワイトリストに含まれていることを確認します。

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

1. `maf-feature.xml`ファイルの「機能」表にリストされている「リモートURL」アプリケーション機能を選択します。

2. 「コンテンツ」をクリックします。

3. 図20-7に示すとおり、「ブラウザ・ナビゲーション・ボタンの表示」を選択します。

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

### 20.3.2 リモートURLアプリケーション機能のブラウザ・ナビゲーション・ボタンを有効にする場合の処理

JDeveloperでは、`showNavButtons`と呼ばれる属性で`adfmf:remoteURL`要素を更新します。例20-3に示すとおり、ここでは`true`に設定されています。

例20-3 showNavButtons属性

    <?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>

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

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

## 20.4 カスタムURLスキームを使用したMAFアプリケーションの起動

カスタムURLスキームを使用して、他のアプリケーションからネイティブ・アプリケーションを起動できます。

別のアプリケーションからMAFモバイル・アプリケーションを起動するには、次の手順を実行します。

1. カスタムURLスキームを登録します。このURLスキームは、`maf-application.xml`ファイルの概要エディタで、「URLスキーム」フィールドを使用して構成します。このスキームを持つURLを使用すれば、MAFモバイル・アプリケーションを起動し、そのアプリケーションにデータを渡すことができます。

2. アプリケーション・コントローラ・プロジェクトで、URLを通知されるカスタムURLイベント・リスナー・クラス(`CustomURLEventListener`など)を作成します。このクラスには、イベント・リスナーを定義する`oracle.adfmf.framework.event.EventListener`インタフェースを実装する必要があります。`oracle.adfmf.framework.event.EventListener`インタフェースの詳細は、Oracle Fusion Middleware Oracle Mobile Application Framework Java APIリファレンスを参照してください。

   MAFモバイル・アプリケーションの起動に使用されるURLで呼び出される`onMessage(Event e)`メソッドをオーバーライドおよび実装します。`Event`オブジェクトを使用して、URLペイロードおよびアプリケーションの状態に関する有用な情報を取得できます。`URL`ペイロードを取得するには、`Event.getPayload`メソッドを使用します。URLイベント発生時にアプリケーションの状態を取得するには、`Event.getApplicationState`メソッドを使用します。詳細は、``Oracle Fusion Middleware Oracle Mobile Application FrameworkのJava APIリファレンスのEventクラスを参照してください。

3. アプリケーション・ライフサイクル・イベント・リスナー(ALCL)クラスを登録します。

   詳細は、第11章「MAFアプリケーションでのライフサイクル・リスナーの使用方法」を参照してください。

   ALCLクラスの`start`メソッド内の、カスタムURLイベントのソースを表す`EventSource`オブジェクトを取得します。

       EventSource openURLEventSource = EventSourceFactory.getEventSource(EventSourceFactory.OPEN_URL_EVENT_SOURCE_NAME);

   カスタムURLイベント・リスナー・クラスのオブジェクトを作成し、イベント・ソースに追加します。

       openURLEventSource.addListener(new CustomURLEventListener());

MAFアプリケーションでは、次の方法を使用して別のネイティブ・アプリケーションを起動することができます。

- ネイティブ・アプリケーションによって登録されたカスタムURLスキームで始まるURLを持つMAF AMXページで`amx:goLink`を使用します。次に例を示します。

      <amx:goLink text="Open App" id="gl1" url="mycustomurlscheme://somedata"/>

- ネイティブ・アプリケーションによって登録されたカスタムURLスキームで始まる`href`属性値を持つHTMLページで、HTMLリンク要素を使用します。次に例を示します。

      <a href="mycustomurlscheme://somedata">Open App</a>