プライマリ・コンテンツに移動
Oracle Enterprise Pack for Eclipse Oracle Mobile Application Framework (OEPE Edition)でのモバイル・アプリケーションの開発
リリース2.2.1
E72511-01
  目次へ移動
目次

前
 
次
 

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

この章では、デバイス・サービスに対して、リモートURLからのコンテンツを使用するアプリケーション機能をアクセス可能(または制限可能)にする方法について説明します。

この章には次の項が含まれます:

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

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

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

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

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

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

図21-2 デバイス・ブラウザとMAFのWebビューのURL

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

21.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をローカルに解決してネイティブ・リクエストとして処理します。

<script src="http://your.domain.ip/~maf.device~/www/js/base.js"></script>

your.domain.ipは、リモートURLからのドメインです。リモート・アプリケーション機能とリクエストを成功させるには、第21.1.4項「ホワイトリストの作成方法(ドメインの制限方法)」の説明に従ってドメインURLをMAFアプリケーションのホワイトリストに追加します。

次に、MAFがコンテナ・コード内のファイル・システムからファイルを読み取って、ローカル・ファイル・コンテンツをWebビューに送信します。

すでに説明した仮想パス/~maf.device~/の使用に加えて、リモートURLアプリケーションをコンテンツ・タイプとして指定するアプリケーション機能に対してネイティブ・アクセスの許可プロパティ(allowNativeAccess)がMAFアプリケーション・エディタでデフォルト値trueに設定されていることを確認します。次の例は、maf-application.xmlソース・ファイル内のこのプロパティを示しています。

<adfmf:featureReference refId="remoteAppfeature1" id="fr1" allowNativeAccess="true"/>

このプロパティがfalseの場合、リモートURLアプリケーション機能はコンテナ・サービスにアクセスできません。

21.1.3 ホワイトリスト内のドメインによるデバイス機能へのアクセス方法

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

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

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

次に、OEPEでは、adfMETA-INFのアセンブリ・プロジェクトにあるconnections.xmlファイルに接続情報が移入され、接続リソースが作成されます。

MAFによってconnections.xmlファイルから追加されるドメインに加えて、MAFアプリケーション・エディタでホワイトリストのドメインを構成することで、MAFのWebビューで開くリモートURLコンテンツを有効にする(または制限する)ことができます。

21.1.4 ホワイトリストの作成方法(ドメインの制限方法)

図21-4のように、MAFアプリケーション・エディタの「セキュリティ」ページでホワイトリストを構成します。

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

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

始める前に:

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

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

  1. MAFアプリケーション・エディタを開いて、アウトラインでセキュリティを選択します。

  2. 「リモートURL Whitelist」この図は周囲のテキストで説明していますをクリックし、ホワイトリストに含めるドメインの追加ダイアログで、アプリケーション機能のWebビュー内から呼び出せるドメインを入力して、「OK」をクリックします。ホワイトリストに含めるドメインの追加を続けます。

    これらのドメインでは、ドメイン名(末尾以外)にワイルドカード(*)を含めることができます。たとえば、*.example.comは有効なドメイン・エントリですが、*.example.*は無効です。完全修飾URLは入力できません。


    注意:

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

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

ドメインを追加すると、OEPEでは、次に示すとおり<adfmf:remoteURLWhiteList>要素が更新されます。

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

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

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

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

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

www.oracle.comを有効化してアプリケーションのWebビュー内で開くには、*.oracle.comまたはwww.oracle.comを指定する必要があります(第21.1.5項「ホワイトリストにドメインを追加する場合の処理」の例を参照)。

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

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

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

次の例は、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コンポーネントの作成と使用方法」も参照してください。

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

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


注意:

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

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

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

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

MAF機能エディタの「コンテンツ」タブで、ユーザーがリモート・コンテンツを移動またはリフレッシュできるようにします。

始める前に:

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

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

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

  1. MAF機能エディタのアウトラインの「機能」にリストされているリモートURLアプリケーション機能を選択します。

  2. 「コンテンツ」を展開してリモートURLコンテンツを選択します。

  3. 図21-7のように、「コンテンツ」セクションで、「ボタンの表示」を選択します。

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

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

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

OEPEでは、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>

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

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

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

21.4 MAFアプリケーションでのカスタムURLスキームの使用

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

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

  1. カスタムURLスキームを登録します。このURLスキームは、MAFアプリケーション・エディタの許可されるURLスキーム・フィールドを使用して構成します。次に、このスキームのURLを使用して、モバイル・アプリケーションを起動し、データを渡すことができます。

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

    このモバイル・アプリケーションを起動するのに使用されるURLで呼び出されたonMessage(Event e)メソッドをオーバーライドおよび実装します。Eventオブジェクトを使用して、URLペイロードおよびアプリケーションの状態に関する有用な情報を取得できます。URLペイロードを取得するには、Event.getPayloadメソッドを使用します。URLイベント発生時にアプリケーションの状態を取得するには、Event.getApplicationStateメソッドを使用します。詳細は、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アプリケーションでは、次の2つの方法で別のネイティブ・アプリケーションを起動できます。

  • ネイティブ・アプリケーションによって登録されたカスタム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>
    

    MAFアプリケーションがネイティブ・アプリケーションの起動に使用するカスタムURLスキームを、MAFアプリケーション・エディタの「セキュリティ」ページの許可されるURLスキーム・リストに追加します。この変更点は、アプリケーションが他のアプリケーションの起動に使用するURLスキームを宣言するというiOS 9の要件に対応しています。「セキュリティ」ページの許可されるURLスキーム・セクションの「追加」アイコンをクリックして、カスタムURLスキームを追加します。