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

前
 
次
 

9 MAFアプリケーションでのプラグインの使用方法

この章では、MAFに用意されているコア・プラグインを有効にしてMAFアプリケーションで使用する方法、追加プラグインを登録する方法、FARからプラグインをインポートする方法、およびMAFアプリケーションのプラグインをパッケージ化してデプロイする方法について説明します。

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

9.1 MAFアプリケーションでのプラグインの使用方法の概要

MAFには様々なCordovaプラグインがパッケージ化されています。MAFアプリケーションはこれらのプラグインを使用してデプロイ先のデバイスと対話できます。コア・プラグインは、MAFに用意されているデフォルトのプラグインです。これらのプラグインは、MAFアプリケーション・エディタで表示します。たとえば、MAFアプリケーションでデバイスの電子メール機能やコンタクト先機能へのアクセスに使用する電子メールプラグインやコンタクト先プラグインなどがあります。

Android、iOSおよびWindowsプラットフォームで使用されるCordovaバージョンは、MAFアプリケーション・エディタで外部プラグインを選択して表示します。

各プラグインの説明を表示するには、「コア・プラグイン」リスト(図9-1を参照)でプラグインを選択します。新規作成したMAFアプリケーションでは、1つのコア・プラグイン(ネットワーク情報プラグイン)のみがデフォルトで有効になっています。第9.2項「MAFアプリケーションでのコア・プラグインの有効化」の説明に従って、これらのコア・プラグインを有効にします。


注意:

iOSデバイス上のすべてのアプリケーションにネットワーク・アクセスがデフォルトで許可されます。この動作は変更できません。Androidデバイスにデプロイされたアプリケーションでネットワーク・アクセスが不要な場合は、ネットワーク情報プラグインを無効にします。ネットワーク情報プラグインは、Androidエミュレータまたはデバイス上で実行されているアプリケーションのリモート・デバッグを容易にする場合は有効にする必要があります。

MAFに用意されているデフォルトのコア・プラグインではMAFアプリケーションの要件を満たさない場合は、追加プラグインを登録できます。詳細は、「カスタムCordovaプラグイン開発の概要」(http://blogs.oracle.com/mobile/entry/introduction_to_custom_cordova_plugin)および第9.3項「MAFアプリケーションでの追加プラグインの登録」を参照してください。MAFアプリケーションについてコア・プラグインを有効にするか、または任意の追加のプラグインを登録した場合は、プラグインの機能にアクセスするアプリケーション機能のコンテンツを作成します。詳細は、第9.6項「MAFアプリケーションでのプラグインの使用方法」を参照してください。

MAFアプリケーションのデプロイメントは、追加プラグインの登録後、次の理由で失敗する場合があります。

  • MAFアプリケーションが使用するプラグイン間でファイル名の競合があります。

  • 登録した追加プラグインは、適切に機能するために依存プラグインが必要です。

詳細は、第9.4項「MAFアプリケーション組込みプラグインのデプロイ」を参照してください。

以前のリリースのMAFで作成したMAFアプリケーションを移行する場合は、アプリケーションで使用されているすべてのプラグインをMAFアプリケーション・エディタに登録する必要があります。詳細は、Oracle Enterprise Pack Oracle Enterprise Pack for Eclipseのインストールの以前のリリースからのプラグインの移行に関する項を参照してください。

図9-1 MAFアプリケーション・エディタのプラグイン

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

9.2 MAFアプリケーションでのコア・プラグインの有効化

新規作成したMAFアプリケーションでは、1つのコア・プラグイン(ネットワーク情報プラグイン)のみがデフォルトで有効になっています。他のコア・プラグインを有効または無効にして、関連するデバイスの機能にMAFアプリケーションがアクセスできるようにしてください。

9.2.1 MAFアプリケーションでコア・プラグインを有効にする方法

MAFアプリケーション・エディタを使用してコア・プラグインを有効にします。

MAFアプリケーションでコア・プラグインを有効にする手順:

  1. プロジェクト・エクスプローラで、アセンブリ・プロジェクト・フォルダを展開し、次にMAFを展開し、「MAFアプリケーション・エディタ」をダブルクリックします。

  2. 「アウトライン」の下のエディタで、「コア・プラグイン」を展開してプラグイン有効化を選択します。アプリケーションに対してすでに有効化されているプラグインがリストされます。

  3. この図は周囲のテキストで説明していますをクリックしてモバイル・プラグイン選択ダイアログを開き、使用するコア・プラグインを選択します。「OK」をクリックします。

    たとえば、MAFアプリケーションでSMSメッセージを送信できるようにするには、SMSプラグインを選択します。

  4. MAFアプリケーション・エディタのプラグイン有効化領域でコア・プラグインが選択された状態で、そのプラグインをAndroidまたはiOS (あるいはその両方)で使用できるように選択します。変更を保存します。

    メモを追加することもできます(プラグインは有効になっているがそれに関連付けられた機能がないなど)。

9.2.2 MAFアプリケーションでコア・プラグインを有効にする場合の処理

MAFアプリケーション・エディタでコア・プラグインを有効にすると、そのプラグインがエディタのプラグイン有効化にリストされます。プラグイン有効化領域の「使用を宣言している登録された機能」で、選択されたプラグインを使用しているアプリケーションの機能を確認できます。例9-1に、電子メールおよびネットワーク情報の各プラグインが有効になっているMAFアプリケーションのエントリを示します。デバイスの電子メール・クライアントを使用し、インターネットにアクセスするMAFアプリケーションでは、これらのプラグインの有効化は必須です。

例9-1 maf-plugins.xmlファイル内の有効なコア・プラグイン

<?xml version="1.0" encoding="UTF-8" ?>
<maf-plugins xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.oracle.com/adf/mf">
  <cordova-plugins>
    <core-cordova-plugin id="c1" pluginId="cordova-plugin-network-information"/>
    <core-cordova-plugin id="c2" pluginId="com.oracle.maf.email"/>
 </cordova-plugins>
</maf-plugins>

9.3 MAFアプリケーションでの追加プラグインの登録

MAFに用意されたコア・プラグインでは提供されていない機能がMAFアプリケーションで必要な場合は、MAFアプリケーションに追加プラグインを登録します。

9.3.1 追加プラグインを登録する方法

MAFアプリケーション・エディタを使用して、MAFアプリケーションで使用する追加プラグインを登録します。

開始する前に、アプリケーション、およびアプリケーションに登録されるプラグインが同じドライブに格納されていることを確認します。たとえば、Windows環境でC:ドライブにアプリケーションが格納されている場合、そのアプリケーションに登録するプラグインもC:ドライブに格納する必要があります。これにより、OEPEでは、相対パスを使用して、プラグインがアプリケーションに正常に登録されます。

MAFアプリケーションに追加プラグインを登録するには:

  1. プロジェクト・エクスプローラで、アセンブリ・プロジェクト・フォルダを展開し、次にMAFを展開し、「MAFアプリケーション・エディタ」をダブルクリックします。

  2. 「アウトライン」の下のエディタで、「外部プラグイン」を右クリックして「新」→外部Cordovaプラグインを選択します。

  3. 「URI」にプラグインの場所を入力します。この図は周囲のテキストで説明していますをクリックしてモバイル・プラグインの場所ダイアログを開きます。Eclipseワークスペース・コンテナを入力するか、プラグインを含む外部フォルダに移動します。

  4. URIのコンテンツが変更されている場合にプラグインを再検査して情報を更新するには、この図は周囲のテキストで説明していますをクリックします。これにより、現在のプラグインのメタデータから使用可能な情報が取得されます。次のものが含まれます。

    • ID

    • 名前

    • 説明

    • バージョン

    • プラットフォームのサポート。これは、必要に応じてプラットフォームの可用性をオーバーライドするように編集できます。

    • メモ。アプリケーションに登録した履歴を確認しやすくするなど、様々な目的で情報を追加できます。

9.3.2 MAFアプリケーションに外部プラグインを登録する場合の処理

MAFアプリケーションで使用するプラグインのソース・ファイルを選択すると、OEPEによってアプリケーションのmaf-plugins.xmlファイルが編集され、MAFアプリケーションで有効なプラグインを特定するエントリが追加されます。例9-2は、MAFアプリケーションにグローバリゼーション・プラグイン(図9-2を参照)が登録されている場合のmaf-plugins.xmlファイル内のエントリを示したものです。

図9-2 MAFアプリケーション・エディタの追加プラグイン

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

例9-2 maf-plugins.xmlファイル内の追加プラグイン

<?xml version="1.0" encoding="UTF-8" ?>
<maf-plugins xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.oracle.com/adf/mf">
  <cordova-plugins>
    <core-cordova-plugin id="c1" pluginId="cordova-plugin-network-information"/>
    <cordova-plugin id="c2" pluginId="cordova-plugin-globalization"
                    path="../../../../CordovaPlugins/cordova-plugin-globalization/">
      <platform id="p1" name="android" enabled="true"/>
      <platform id="p2" name="ios" enabled="true"/>
      <platform id="p3" name="windows" enabled="true"/>
    </cordova-plugin>
  </cordova-plugins>
</maf-plugins>

9.4 MAFアプリケーション組込みプラグインのデプロイ

MAFアプリケーション組込みプラグインのデプロイメントは、選択したデプロイメント方法によって異なります。

FARへのデプロイメント

FARへのデプロイメントには、アプリケーションのmaf-plugins.xmlファイルのコピー(ファイル名: jar-maf-plugins.xml)が含まれます。これは、アプリケーションのmaf-plugins.xmlファイルと同じですが、各プラグインのpath属性値が空の文字列である点が異なります。FARデプロイメントにはプラグインのソース・ファイルは含まれません。

モバイル・アプリケーション・アーカイブ・ファイルへのデプロイメント

モバイル・アプリケーション・アーカイブ・ファイルへのデプロイメントには、すべてのpath属性が空の文字列に設定された、アプリケーションのmaf-plugins.xmlファイルのコピーが含まれます。

Android、iOSまたはWindowsのデプロイメント構成を使用したデプロイメント

Android、iOSまたはWindowsのデプロイメント構成を使用したデプロイメントでは、OEPEにより、アプリケーションを構築およびデプロイするツールが起動されます。次に、これらのツールがCordovaプラグイン・ツールを起動して、構成済のプラグインをそのソースの場所からデプロイメント・フォルダにインストールします。

プラグイン間における名前の競合の解決

MAFアプリケーションで使用されている複数のプラグインに同じ名前のリソース・ファイルが含まれている場合、名前の競合が原因でデプロイメントに失敗する可能性があります。たとえば、MAFアプリケーションで2つのプラグインを使用し、両方のリソース・ファイルがarrays.xmlである場合、デプロイメントは失敗します。

このような名前の競合を解決するには、他のプラグインのリソース・ファイル名と競合しているプラグインのリソース・ファイル名を変更します。1番目のプラグインのplugin.xmlファイル内で、リソース・ファイルへの参照を更新します。この例では、1番目のプラグインのarray.xmlリソース・ファイル名をpluginone_arrays.xmlに変更して、プラグインのplugin.xmlファイルを次のように編集する必要があります。

<source-file src="src/android/LibraryProject/res/values/pluginone_arrays.xml"
                                             target-dir="res/values"/>

不足している依存プラグインの追加

MAFアプリケーションで使用する追加プラグインに必要なプラグイン(依存プラグイン)が検出されないと、デプロイメントに失敗する場合があります。このシナリオは、ファイアウォールの内側で作業している場合に発生する可能性があります。デプロイメント時には、OEPEにより、プラグインの依存性を管理するApache Cordovaのツールが起動されます。これらのツールは、依存プラグインのダウンロードを許可するようにプロキシ設定が構成されていないと、依存プラグインのダウンロードに失敗する場合があります。このシナリオを回避するには、不足している依存プラグインをダウンロードして、MAFアプリケーションに追加します。不足している依存プラグインの追加は、MAFアプリケーションに他のプラグインを追加する場合と同じ方法で行います。詳細は、第9.3項「MAFアプリケーションでの追加プラグインの登録」を参照してください。依存プラグインを追加したら、maf-plugins.xmlファイルで、必要とされるプラグインの前にこのプラグインが表示されていることを確認してください(例9-3を参照)。

例9-3 MAFアプリケーションへの依存プラグインの追加

<maf-plugins xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://xmlns.oracle.com/adf/mf">
   <cordova-plugins>
     ....
    <cordova-plugin id="c2" pluginId="com.example.dependent.dependentPlugin"
                    path="../../../../../plugins/Dependent-Plugin-Required-By-PluginWithID_c3/">
      ...
    <cordova-plugin id="c3" pluginId="com.example.plugin"
                    path="../../../../../plugins/AdditionalPlugin/">
      ...
   </cordova-plugins>
</maf-plugins>

9.5 機能アーカイブ・ファイルからのプラグインのインポート

jar-maf-plugins.xmlファイルが格納されたFARをアプリケーションにインポートすると、jar-maf-plugins.xmlファイルの内容は使用するアプリケーションのmaf-plugins.xmlファイルにマージされます。OEPEでは、マージに関する情報を「メッセージ」ウィンドウに記録します。

FARからインポートするプラグインがすでにコンシューマ・アプリケーションのmaf-plugins.xmlファイルに存在する場合、プラグインはアプリケーションに存在するためマージされないというメッセージがOEPEによってログに記録されます。

FARからインポートするプラグインがコンシューマ・アプリケーションのmaf-plugins.xmlファイルに存在しない場合、OEPEはそのプラグインをアプリケーションのmaf-plugins.xmlファイルに追加します。このシナリオでは、第9.3項「MAFアプリケーションでの追加プラグインの登録」の説明に従って、新しくインポートしたプラグインへのパスを設定する必要があります。

9.6 MAFアプリケーションでのプラグインの使用方法

MAFアプリケーションでプラグインを登録する、またはコア・プラグインを有効にすると、MAFアプリケーションでプラグインを使用するコンテンツを作成できます。

Java、MAF AMXページおよびローカルHTMLからプラグインを起動する方法の詳細は、「カスタムCordovaプラグインのMAFアプリへの統合」(http://blogs.oracle.com/mobile/entry/integrating_a_custom_cordova_plugin)を参照してください。

BarcodeDemoサンプル・アプリケーションでは、このタスクを実現する方法も示しています。

図9-3 プラグインにアクセスするためのプラットフォーム固有コンテンツ

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

図9-3は、BarcodeDemoサンプル・アプリケーションの実行時にエンド・ユーザーのデバイス上にレンダリングされるMAF AMXページのボタン(Scan)を示しています。このボタンは、管理対象Beanのメソッドを起動し、その管理対象のBeanメソッドは、BarcodeScannerプラグインをコールするJavaScript関数を起動します。

図9-4 プラグインにアクセスする管理対象Beanのメソッドを起動するコマンド・ボタン

これについては前後のテキストで説明しています。

例9-4に、BarcodeDemoサンプル・アプリケーションから抽出したいくつかのコードを示します。

BarcodeDemoサンプル・アプリケーション以外に、MAFアプリケーションで追加プラグインを使用する方法を示すその他のサンプル・アプリケーションとして、BeaconDemoおよびDatePickerがあります。これらのサンプル・アプリケーションの入手方法や使用方法の詳細は、付録E「サンプルのMAFアプリケーション」を参照してください。

例9-4 バーコード・スキャナ・プラグインの使用方法

<!--  The following code snippet from the scanner.amx file shows how the Scan button invokes the scanBarcode method in the managed bean -->
<amx:commandButton text="Scan" id="cl2" actionListener="#{viewScope.BarcodeBean.scanBarcode}"/>
 
<!--  The following code snippet from the BarcodeBean.java file shows how the scanBarcode managed bean method invokes a JavaScript function -->
  public void scanBarcode (ActionEvent event)
  {
    // Invokes a JavaScript function named ”scanBarcodeFromJavaBean”
    AdfmfContainerUtilities.invokeContainerJavaScriptFunction(AdfmfJavaUtilities.getFeatureId(),
                                                               "scanBarcodeFromJavaBean",
                                                               new Object[] { });
  }
 
<!--  The following code snippet from the scanner.js file shows how the JavaScript function accesses the barcode scanner and sets the resulting value in a managed bean field.-->
function scanBarcodeFromJavaBean(options)
        {
            cordova.plugins.barcodeScanner.scan(
              function(result)
               function onSuccess(result) {
        adf.mf.api.setValue( { "name": "#{viewScope.BarcodeBean.barcodeError}", 
                               "value": ""}, 
                               function() {}, 
                               function() {});
 
        adf.mf.api.setValue( { "name": "#{viewScope.BarcodeBean.barcodeResult}", 
                               "value": result.text}, 
                               function() {}, 
                               function() {});
 
        adf.mf.api.setValue( { "name": "#{viewScope.BarcodeBean.barcodeFormat}", 
                               "value": result.format}, 
                               function() {}, 
                               function() {});
 
        adf.mf.api.setValue( { "name": "#{viewScope.BarcodeBean.barcodeCancelled}", 
                               "value": result.cancelled == 1 ? "Yes" : "No"}, 
                               function() {}, 
                               function() {});
    }
    
    function onError(error) {
        adf.mf.api.setValue( { "name": "#{viewScope.BarcodeBean.barcodeError}", 
                               "value": "ERROR: " + error.text}, 
                               function() {}, 
                               function() {});
    }
    
    // Callable externally
    scanBarcodeFromJavaBean = function() { 
        cordova.plugins.barcodeScanner.scan(onSuccess, onError);
    }