Oracle® Mobile Application Framework Oracle Mobile Application Frameworkでのモバイル・アプリケーションの開発 2.3.3 E82940-01 |
|
前 |
次 |
この章の内容は次のとおりです。
MAFアプリケーションは、そのアプリケーションがデプロイされたデバイスとの対話にCordovaプラグインを使用します。
MAFには様々なCordovaプラグインがパッケージ化されています。MAFアプリケーションはこれらのプラグインを使用してデプロイ先のデバイスと対話できます。コア・プラグインは、MAFに用意されているデフォルトのプラグインです。これらのプラグインはmaf-application.xml
の概要エディタで確認します。たとえば、MAFアプリケーションでデバイスの電子メール機能やコンタクト先機能へのアクセスに使用する電子メールプラグインやコンタクト先プラグインなどがあります。
Android、iOSおよびWindowsプラットフォームで使用されているCordovaバージョンをmaf-application.xml
ファイルの概要エディタで確認します。
プラグインの説明を表示するには、「コア・プラグイン」リスト(図11-1を参照)でプラグインを選択します。新規作成したMAFアプリケーションでは、1つのコア・プラグイン(ネットワーク情報プラグイン)のみがデフォルトで有効になっています。「MAFアプリケーションでのコア・プラグインの有効化」の説明に従って、これらのコア・プラグインを有効または無効にします。
注意:
iOSデバイス上のすべてのアプリケーションにネットワーク・アクセスがデフォルトで許可されます。この動作は変更できません。Androidデバイスにデプロイされたアプリケーションでネットワーク・アクセスが不要な場合は、ネットワーク情報プラグインを無効にします。ネットワーク情報プラグインは、Androidエミュレータまたはデバイス上で実行されているアプリケーションのリモート・デバッグを容易にする場合は有効にする必要があります。
MAFに用意されているデフォルトのコア・プラグインではMAFアプリケーションの要件を満たさない場合は、追加プラグインを登録できます。「カスタムCordovaプラグイン開発の概要」(http://blogs.oracle.com/mobile/entry/introduction_to_custom_cordova_plugin)および「MAFアプリケーションでの追加プラグインの登録」を参照してください。MAFアプリケーションでコア・プラグインを有効にするかまたは任意の追加プラグインを登録したら、そのプラグインの機能にアクセスするアプリケーション機能内のコンテンツを作成します。「MAFアプリケーションでのプラグインの使用方法」を参照してください。
追加プラグインを登録するとMAFアプリケーションがデプロイできなくなる場合、MAFアプリケーションで使用されているプラグイン間でファイル名が競合している可能性があります。または、登録した追加のプラグインが正常に機能するために必要な依存プラグインが存在しないことが原因の可能性もあります。詳細は、「MAFアプリケーション組込みプラグインのデプロイ」を参照してください。MAFアプリケーションがiOSデバイス上のプライベート・データ(連絡先や写真など)にアクセスするプラグインを使用するときに、使用方法の説明を指定しておかないと、iOSプラットフォームへのデプロイに失敗することがあります。これに該当する使用方法の説明の詳細は、「iOSのデバイス機能にアクセスするプラグインの使用方法の説明の指定」を参照してください。
以前のリリースのMAFで作成したMAFアプリケーションを移行する場合は、『Oracle Mobile Application Frameworkのインストール』の前のリリースからMAF 2.3.0へのCordovaプラグインの移行に関する項を参照してください。
注意:
アプリケーションのプラグインを管理するためにmaf-application.xml
ファイルを編集すると、maf-plugins.xml
ファイルのリビジョンが作成されます。両方のファイルへのアクセスを行う「アプリケーション・リソース」ペインの「ADF-META-INF」ノードを図11-1に示します。
図11-1 maf-application.xmlの概要エディタに表示されたプラグイン
新しいアプリケーションは、ネットワーク情報コア・プラグインのみを使用できます。追加のプラグインは、使用する前に登録する必要があります。
新規作成したMAFアプリケーションでは、1つのコア・プラグイン(ネットワーク情報プラグイン)のみがデフォルトで有効になっています。他のコア・プラグインを有効または無効にして、関連するデバイスの機能にMAFアプリケーションがアクセスできるようにしてください。
MAFアプリケーションのmafapplication.xml
ファイルの概要エディタを使用して、コア・プラグインを有効化する手順を使用してください。
コア・プラグインは、MAFアプリケーションのmaf-application.xml
ファイルの概要エディタを使用して有効化します。
MAFアプリケーションでコア・プラグインを有効にする手順:
JDeveloperは、アプリケーションで有効化されたプラグインを識別するエントリで、アプリケーションのmaf-plugins.xml
ファイルを編集します。
概要エディタでプラグインを有効にすると、JDeveloperによってアプリケーションのmaf-plugins.xml
ファイルが編集され、MAFアプリケーションで有効なプラグインを特定するエントリが追加されます。例11-1に、電子メールおよびネットワーク情報の各プラグインが有効になっているMAFアプリケーションのエントリを示します。デバイスの電子メール・クライアントを使用し、インターネットにアクセスするMAFアプリケーションでは、これらのプラグインの有効化は必須です。
例11-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>
追加のプラグインは、そのプラグインの登録後にMAFアプリケーションで使用できるようになります。
MAFに用意されたコア・プラグインでは提供されていない機能がMAFアプリケーションで必要な場合は、MAFアプリケーションに追加プラグインを登録します。
MAFアプリケーションのmaf-application.xml
ファイルの概要エディタを使用して、プラグインを登録する手順を使用してください。追加のプラグインを使用する場合は、登録が必要になります。
MAFアプリケーションの追加プラグインを登録するには、アプリケーションのmaf-application.xml
ファイルの概要エディタを使用します。
開始する前に、アプリケーション、およびアプリケーションに登録されるプラグインが同じドライブに格納されていることを確認します。たとえば、Windows環境でC:
ドライブにアプリケーションが格納されている場合、そのアプリケーションに登録するプラグインもC:
ドライブに格納する必要があります。これにより、JDeveloperでは相対パスを使用してアプリケーションにプラグインを正常に登録できます。
MAFアプリケーションに追加プラグインを登録するには:
追加のプラグインが登録されると、JDeveloperは、MAFアプリケーションで有効化されたプラグインを識別するエントリで、アプリケーションのmaf-plugins.xml
ファイルを編集します。
MAFアプリケーションで使用するプラグインのソース・ファイルを選択すると、JDeveloperによってアプリケーションのmaf-plugins.xml
ファイルが編集され、MAFアプリケーションで有効なプラグインを特定するエントリが追加されます。例11-2は、MAFアプリケーションにグローバリゼーション・プラグイン(図11-2を参照)が登録されている場合のmaf-plugins.xml
ファイル内のエントリを示したものです。
図11-2 maf-application.xmlの概要エディタに表示された追加プラグイン
例11-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>
プラグインは、FAR、またはモバイル・アプリケーション・アーカイブ・ファイルにデプロイされることがあります。プラグインは、Android、iOS、またはWindowsのデプロイメント・プロファイルを使用してデプロイされることがあります。
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デプロイメント・プロファイルを使用したデプロイメント時、JDeveloperはアプリケーションをビルドおよびデプロイするツールを起動します。次に、これらのツールが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"/>
iOSにデプロイするMAFアプリケーションの使用方法の説明
デバイス機能(連絡先やカメラなど)へのアクセスを要求するプラグインを有効化すると、iOSプラットフォームへのMAFアプリケーションのデプロイメントは失敗します。「iOSのデバイス機能にアクセスするプラグインの使用方法の説明の指定」で説明するように、使用方法の説明を指定してください。
不足している依存プラグインの追加
MAFアプリケーションで使用する追加プラグインに必要なプラグイン(依存プラグイン)が検出されないと、デプロイメントに失敗する場合があります。このシナリオは、ファイアウォールの内側で作業している場合に発生する可能性があります。デプロイメント時に、JDeveloperは、プラグイン依存を管理するためにApache Cordovaのツールを起動します。これらのツールは、依存プラグインのダウンロードを許可するようにプロキシ設定が構成されていないと、依存プラグインのダウンロードに失敗する場合があります。このシナリオを回避するには、不足している依存プラグインをダウンロードして、MAFアプリケーションに追加します。不足している依存プラグインの追加は、MAFアプリケーションに他のプラグインを追加する場合と同じ方法で行います。「MAFアプリケーションでの追加プラグインの登録」を参照してください。依存するプラグインを追加したら、例11-3に示すように、maf-plugins.xml
ファイル内でそれを必要とするプラグインの前に追加されていることを確認します。
例11-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>
プラグインは、機能アーカイブ・ファイルからアプリケーションにインポートできます。
jar-maf-plugins.xml
ファイルが格納されたFARをアプリケーションにインポートすると、jar-maf-plugins.xml
ファイルの内容は使用するアプリケーションのmaf-plugins.xml
ファイルにマージされます。JDeveloperではマージに関する情報を「メッセージ」ウィンドウに記録します。
FARからインポートするプラグインがすでにコンシューマ・アプリケーションのmaf-plugins.xml
ファイルに存在する場合、プラグインはアプリケーションに存在するのでマージされないというメッセージがJDeveloperによってログに記録されます。
FARからインポートするプラグインがコンシューマ・アプリケーションのmaf-plugins.xml
ファイルに存在しない場合、JDeveloperはそのプラグインをアプリケーションのmaf-plugins.xml
ファイルに追加します。このシナリオでは、「MAFアプリケーションでの追加プラグインの登録」の説明に従って、新しくインポートしたプラグインへのパスを設定する必要があります。
登録または有効化されたプラグインは、アプリケーションにコンテンツを作成するために使用できます。
Java、MAF AMXページおよびローカルHTMLからプラグインを起動する方法の詳細は、「カスタムCordovaプラグインのMAFアプリへの統合」(http://blogs.oracle.com/mobile/entry/integrating_a_custom_cordova_plugin)を参照してください。
BarcodeDemo
サンプル・アプリケーションでは、このタスクを実現する方法も示しています。
図11-3 プラットフォーム固有コンテンツおよびプラグイン・アクセスの制約
図11-4は、BarcodeDemo
サンプル・アプリケーションの実行時にユーザーのデバイス上にレンダリングされるMAF AMXページのボタン(Scan)を示しています。このボタンは、管理対象Beanのメソッドを起動し、その管理対象のBeanメソッドは、BarcodeScannerプラグインをコールするJavaScript関数を起動します。
図11-4 プラグインにアクセスする管理対象Beanのメソッドを起動するコマンド・ボタン
例11-4に、BarcodeDemo
サンプル・アプリケーションから抽出したいくつかのコードを示します。
BarcodeDemo
サンプル・アプリケーション以外に、MAFアプリケーションで追加プラグインを使用する方法を示すその他のサンプル・アプリケーションとして、BeaconDemo
、FakeBeacon
およびDatePicker
があります。「サンプルのMAFアプリケーション」を参照してください。
例11-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); }
iOSにデプロイするMAFアプリケーションは、そのMAFアプリケーションがユーザーのデータにアクセス可能なハードウェア機能(デバイスのカメラなど)を使用する場合、使用方法の説明が必要になります。
iOSプラットフォームでは、アプリケーションが機能と潜在的に機密性の高いユーザー・データにアクセスする許可をエンド・ユーザーに求めるために使用するシステム・ダイアログに表示するために、こうした説明を必要とします。図11-5は、テキスト「This application allows the user to upload photos from their photo library
」がMAFアプリケーションからの使用方法の説明である場合の例を示しています。
図11-5 iOSにデプロイされたMAFアプリケーションのUIに示される使用方法の説明
MAFの基本的な使用方法では、使用方法の説明の指定が必要になる機能は有効化されていません。ただし、使用方法の説明が必要になるコア・プラグインや、使用方法の説明が必要になるその他のプラグインを有効化している場合は、アプリケーションを正常にデプロイするために使用方法の説明を指定する必要があります。使用方法の説明を指定していないと、アプリケーションがクラッシュすることや、Apple App Storeに拒否されることがあります。
カメラ、連絡先、地理的位置のコア・プラグインは、使用方法の説明を必要とします。MAFは、こうしたコア・プラグインに対して、次に示す汎用的な使用方法の説明を指定しています。
Camera
: カメラ・プラグインは、デバイスのカメラとフォト・ライブラリへのアクセスが可能です。
このプラグインは、CocoaキーのNSCameraUsageDescription
とNSPhotoLibraryUsageDescription
に対する使用方法の説明を必要とします。
Contacts
: 連絡先プラグインは、デバイス上のアドレス帳へのアクセスが可能です。
このプラグインは、CocoaキーのNSContactsUsageDescription
に対する使用方法の説明を必要とします。
Geolocation
: 地理的位置プラグインは、デバイス上のデバイス位置情報サービスを使用します。
このプラグインはCocoaキーのNSLocationWhenInUseUsageDescription
に対する使用方法の説明を必要とします。
これらの汎用的な使用方法の説明は、これらの汎用的な使用方法の説明は、MAFアプリケーションを正常にデプロイするためのiOSプラットフォームの技術的要件を満たしています。具体的な使用方法の説明を指定することをお薦めします(プラグインが要求する機能やデータへのアクセスをアプリケーションが必要としている理由を説明してください)。MAFアプリケーションに登録する追加のプラグインが使用方法の説明を必要とする場合は、使用方法の説明を指定する必要があります。
使用方法の説明は、アプリケーションのリソース・バンドル.XLF
ファイルで指定します。使用方法の説明は、trans-unit
要素のid
属性の値として、iOSプラットフォームのCocoaキーを使用します。次の例は、MAFアプリケーションがユーザーのフォト・ライブラリへのアクセス許可をエンド・ユーザーに求めるときに表示される使用方法の説明を示しています。
<?xml version="1.0" encoding="UTF-8" ?> <xliff version="1.1" xmlns="urn:oasis:names:tc:xliff:document:1.1"> <file source-language="en" original="mobile.ViewControllerBundle" datatype="x-oracle-adf"> <body> <trans-unit id="NSPhotoLibraryUsageDescription"> <source>This application allows the user to upload photos from their photo library.</source> ...
また、MAFアプリケーションで複数のロケールをサポートする場合は、ロケール固有のリソース・バンドルにも使用方法の説明を指定します。次の例は、対応する使用方法の説明を示しています。これは、ロケールがFrenchの場合にレンダリングされます。
... <file source-language="fr" original="mobile.ViewControllerBundle_fr" datatype="x-oracle-adf"> <body> <trans-unit id="NSPhotoLibraryUsageDescription"> <source>Cette application permet à l'utilisateur de télécharger des photos à partir de leur bibliothèque de photos.</source> ...
デプロイメント時に、MAFは、リソース・バンドルで定義されている使用方法の説明を、iOSデバイスにデプロイされるアプリケーションのinfo.plist
ファイルに移入します。
MAFアプリケーションのリソース・バンドルの作成の詳細と、ロケール固有のリソース・バンドルの作成方法は、「MAFアプリケーションのローカライズ」を参照してください。
使用方法の説明を識別するCocoaキーのリストは、Apple社のCocoaキーのドキュメントで、キーの名前にUsageDescription
が付加されたキーについて参照してください(https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html)。