Oracle® Fusion Middleware Oracle Mobile Application Frameworkでのモバイル・アプリケーションの開発 2.0 E56274-01 |
|
![]() 前 |
![]() 次 |
この章では、ユーザーのアクセス権限またはデバイス要件に基づいてアプリケーション機能を制限できる制約の設定方法について説明します。
この章には次の項が含まれます:
制約には、アプリケーション機能またはアプリケーション・コンテンツを使用するタイミングが記述されています。制約では、ユーザーとユーザー・ロール、モバイル・アプリケーションの実行対象となるデバイス、およびデバイス上で使用可能なハードウェアに基づいて、アクセスを制限できます。制約は2つのレベルで設定できます。1つ目のアプリケーション機能レベルでは、ユーザーのデバイスにおけるアプリケーション機能の可視性を制御し、2つ目のコンテンツ・レベルでは、アプリケーション機能に対して配信できるMAFコンテンツのタイプを指定できます。maf-feature.xml
ファイルの概要エディタでは、これら両方のタイプの制約を設定できます。制約はMAFランタイムによって評価され、エンド・ユーザーが特定のコンテンツを表示または使用したり、アプリケーション機能自体にアクセスできるようにするには、true
に評価される必要があります。
図15-1に示す「制約」タブでは、アプリケーション機能レベルの制約を設定できます。たとえば、デバイスのカメラを使用するアプリケーション機能は、そのデバイスに実際にカメラ機能があることがMAFランタイムによって確認された場合のみ、モバイル・アプリケーションのナビゲーション・バーまたはSpringboard内に表示されます。また、機能レベルの制約を使用すると、ユーザー・ロールと権限に基づいてアプリケーションを保護することもできます。図15-1に、MAFランタイムによって制約がtrue
に評価されたときに、管理者権限を持つユーザーのみにアプリケーション機能への
アクセスを許可する制約を作成する方法を示します。制約がランタイムによってfalse
と評価された場合、アプリケーション機能はナビゲーション・バーまたはSpringboard内に表示されないため、エンド・ユーザーはそのアプリケーション機能にアクセスできません。
デバイス・ハードウェア・プロパティやユーザー権限などのファクタに対応するため、単一のアプリケーション機能に複数のコンテンツ・タイプを指定し、ユーザー・インタフェースの様々なバージョンを配信できます。アプリケーション機能のコンテンツに関する制約を設定することによって、アプリケーション・ページを表示できるエンド・ユーザーや、そのページの使用方法を特定する条件を指定できます。
たとえば、「コンテンツ」タブ(図15-2を参照)を使用して、管理権限を付与されたユーザーに特定のタイプのユーザー・インタフェースを表示し、基本的なユーザー権限を持つユーザーに別のユーザー・インタフェースを表示できます。また、コンテンツ・レベルの制約によって、デバイスのレイアウトに関する考慮事項に対応できます。図15-2は、この例として、サンプル・アプリケーションで、デバイスの画面幅に基づく制約を使用して、iPhoneとiPadのレイアウトに合わせて調整されたページをコールするAMXモバイル・タスク・フローを配信する方法を示しています。エンド・ユーザーがサンプル・アプリケーションを起動すると、MAFランタイムによって、Employeesアプリケーション機能に対して設定された制約が評価されます。デバイス画面の対角線幅が6インチを超えることがランタイムによって確認されると、Employees_pad_taskflow.xml
ファイルが選択され、このファイルによって、iPad用に設計されたMAF AMXページがコールされます。この制約がfalse
に評価された(つまり、画面の対角線幅が6インチ未満の)場合は、ランタイムによって、iPhone固有のページをコールするMAFタスクフローであるEmployees_phone_taskflow.xml
が選択されます。さらに、「コンテンツ」タブを使用すると、ランタイムによって特定のコンテンツが選択されたときに表示されるナビゲーション・バーとSpringboardのイメージを選択できます。コンテンツ固有のイメージを選択しなかった場合、MAFでは、「一般」タブで指定されたアプリケーション機能レベルのイメージが使用されます。
サンプル・アプリケーションの詳細は、付録F「サンプルのモバイル・アプリケーション・フレームワーク・アプリケーション」を参照してください。
アプリケーション機能レベルの制約を設定する際、<adfmf:constraint>
要素(<adfmf:constraints>
の子要素)のproperty
、operator
およびvalue
属性を使用すると、ユーザー、デバイスまたはハードウェアに基づいてアプリケーションの使用を制限できます。例15-1に示すこれらの属性の定義の例は、アプリケーション機能へのアクセスをField Repに制限し、さらにiOSデバイスでのみアプリケーションを実行するように制限する属性の定義を示しています。
例15-1 <adfmf:constraint>要素
<adfmf:constraints> <adfmf:constraint property="user.roles" operator="contains" value="Field Rep"/> <adfmf:constraint property="device.model" operator="contains" value="ios"/> </adfmf:constraints>
図15-2に示すように、「機能」ページの「制約」タブを使用して、選択したアプリケーション機能の制約を宣言的に構成します。
アプリケーション機能の制約を定義するには:
「制約」タブをクリックします。
「追加」をクリックします。
プロパティと適切な演算子を選択し、値を入力します。プロパティの使用の詳細は、第15.2.3項「property属性について」を参照してください。
「制約」タブに値を入力すると、例15-1と同様に、定義された<adfmf:constraint>
要素で識別子ファイルの<adfmf:constraints>
要素が更新されます。
MAFでは、ユーザー、デバイスおよびハードウェアの各プロパティを反映する一連のproperty
属性が提供されています。これらのプロパティを次の演算子と組み合せて使用することでアプリケーション機能の使用方法が決定されます。
contains
equal
less
more
not
ユーザーがモバイル・アプリケーションにログインすると、MAFモバイル・ランタイムでは、アプリケーション機能ごとに構成されたユーザー・ロール・ベースの制約を、アクセス制御サービス(ACS)によって取得されたユーザー・ロールと権限に対して調整します。その後、MAFでは、制約を満たす権限を持つエンド・ユーザーにのみ、アプリケーション機能(またはアプリケーション機能のコンテンツ)を提供します。このようなユーザー権限とロールに関する制約を設定するだけでなく、「MAFログイン接続の作成」ダイアログに次の項目を入力することによって、モバイル・アプリケーション用のアクセス制御を作成できます(図15-3および第21.5.2項「ログイン・ページの指定方法」を参照)。
ユーザー・ロールと権限を送信するREST WebサービスのURL。
アプリケーション機能によってチェックされるユーザー・ロールのリスト。
権限のリスト。
第21.4.17項「アクセス制御サービスに関する必知事項」も参照してください。
user.roles
およびuser.privileges
に基づく制約を使用してアプリケーション機能へのアクセスを制御します。たとえば、アプリケーション機能へのアクセスをmanagerロールを持つユーザーのみに許可するには、user.roles contains manager
の制約をアプリケーション機能の定義に追加する必要があります。
user.roles
およびuser.privileges
では、contains
およびnot
の演算子を次のように使用します。
ハードウェア・オブジェクトは、カメラの有無、コンパス向首方向情報提供機能、ファイルの保存機能など、デバイスで使用可能なハードウェアを参照します。次のプロパティではequal
演算子が使用されます。
hardware.networkStatus
: アプリケーションの起動時にネットワークの状態が表示されます。NotReachable
、CarrierDataConnection
およびWiFiConnection
の3つの属性値を使用してこのプロパティを変更できます。例15-4は、この3つ目の値を示しています。その例に示すとおり、この値を設定することで、デバイス・ハードウェアがWi-Fi接続があることを示している場合にのみモバイル・アプリケーションにこのモバイル・アプリケーション機能が表示されることになります。つまり、デバイスにWi-Fi接続がない場合は、モバイル・アプリケーションをロードしても、そのアプリケーション機能は表示されません。
例15-4 hardware.networkStatusプロパティの定義
<feature ...> ... <constraints> <constraint property="hardware.networkStatus" operator="equal" value="WiFiConnection" /> </constraints> ... </feature>
注意: この制約は、iOSデバイスの起動時に評価されます。起動時にデバイスにWi-Fi接続がなく、その後その接続を取得した場合(ユーザーがWi-Fiのホットスポットに入った場合など)、アプリケーション機能は無効のままとなり、ユーザーがモバイル・アプリケーションを停止し再起動するまで利用できません。 |
hardware.hasAccelerometer
: デバイスに加速度計があるかどうかを示します。このプロパティは、true
またはfalse
の値で定義します。例15-5は、true
の値を示しており、ハードウェアに加速度計がある場合にのみこのアプリケーション機能が利用可能なことを示しています。
例15-5 hardware.hasAccelerometerプロパティの使用方法
<feature ...> ... <constraints> <constraint property="hardware.hasAccelerometer" operator="equal" value="true" /> </constraints> ... </feature>
注意: iOSベースのハードウェアにはすべて加速度計があるため、このプロパティは常に |
hardware.hasCamera
: デバイスにカメラがあるかどうかを示します。この制約は、true
またはfalse
の属性値を使用して定義します。例15-6は、値がtrue
に設定されており、デバイスにカメラが含まれている場合にのみアプリケーション機能が利用可能なことを示しています。
例15-6 hardware.hasCameraプロパティの使用方法
<feature ...> ... <constraints> <constraint property="hardware.hasCamera" operator="equal" value="true" /> </constraints> ... </feature>
注意: すべてのiOSベース・ハードウェアにカメラが搭載されているわけではありません。この値は、iOSデバイスでモバイル・アプリケーションを起動したときに動的に評価されます。そのときに、モバイル・アプリケーションでは、 |
hardware.hasCompass
: デバイスにコンパスがあるかどうかを示します。この制約は、例15-7に示すように、true
またはfalse
の属性値を使用して定義します。
例15-7 hardware.hasCompassプロパティの使用方法
<feature ...> ... <constraints> <constraint property="hardware.hasCompass" operator="equal" value="true" /> </constraints> ... </feature>
注意: すべてのiOSデバイスにコンパスがあるわけではありません。この値は、iOSデバイスでモバイル・アプリケーションを起動したときに動的に評価されます。そのときに、モバイル・アプリケーションでは、 |
hardware.hasContacts
: デバイスにアドレス帳またはコンタクト先があるかどうかを示します。この制約は、例15-8に示すように、true
またはfalse
の属性値を使用して定義します。
例15-8 hardware.hasContactsプロパティの使用方法
<feature ...> ... <constraints> <constraint property="hardware.hasContacts" operator="equal" value"=true" /> </constraints> ... </feature>
注意: iOSベースのハードウェアのコンタクト先はApache Cordova経由でアクセスされるため、iOSデバイスに対しては |
hardware.hasFileAccess
: デバイスでファイル・アクセスが可能かどうかを示します。この制約は、例15-9に示すように、true
またはfalse
の属性値を使用して定義します。ランタイムがこの制約をtrue
に評価した場合にのみ、アプリケーション機能を利用できます。
例15-9 hardware.hasFileAccessプロパティの使用方法
<feature ...> ... <constraints> <constraint property="hardware.hasFileAccess" operator="equal" value="true" /> </constraints> ... </feature>
注意: iOSベースのハードウェアのファイル・アクセスはApache Cordova経由でアクセスされるため、iOSデバイスに対しては |
hardware.hasGeoLocation
: デバイスが地理的位置情報サービスを提供しているかどうかを示します。この制約は、例15-10に示すように、true
またはfalse
の属性値を使用して定義します。デバイスが地理的位置情報をサポートする場合にのみ、アプリケーション機能を利用できます。
例15-10 hardware.hasGeoLocationプロパティの使用方法
<feature ...> ... <constraints> <constraint property="hardware.hasGeoLocation" operator="equal" value="true"/> </constraints> ... </feature>
注意: Apache Cordovaでは、すべてのiOSデバイスに対して地理的位置情報サービスへのアクセスを提供しているわけではありません。デバイスによっては、制約がランタイムにより評価された場合に、アプリケーション機能が利用できない可能性があります。 |
hardware.hasLocalStorage
: デバイスがファイルのローカル記憶域を提供するかどうかを示します。この制約は、例15-11に示すように、true
またはfalse
のvalue
属性を使用して定義します。デバイスがローカルでのファイルの格納をサポートする場合にのみ、アプリケーション機能が表示されます。
例15-11 hasLocalStorageプロパティの使用方法
<feature ...> ... <constraints> <constraint property="hardware.hasLocalStorage" operator="equal" value="true" /> </constraints> ... </feature>
注意: Apache CordovaではすべてのiOSハードウェアでローカル・ファイル記憶域へのアクセスが提供されるため、iOSデバイスに対する |
hardware.hasMediaPlayer
: デバイスにメディア・プレーヤがあるかどうかを示します。この制約は、例15-12に示すように、true
またはfalse
のvalue
属性を使用して定義します。デバイスにメディア・プレーヤがある場合にのみ、アプリケーション機能が表示されます。
例15-12 hardware.hasMediaPlayerプロパティの使用方法
<feature ...> ... <constraints> <constraint property="hardware.hasMediaPlayer" operator="equal" value="true" /> </constraints> ... </feature>
注意: Apache CordovaではiOSベースのハードウェアでメディア・プレーヤへのアクセスを提供しているため、iOSデバイスでは |
hardware.hasMediaRecorder
: デバイスにメディア・レコーダがあるかどうかを示します。この制約は、例15-13に示すように、true
またはfalse
のvalue
を使用して定義します。デバイス・ハードウェアがメディア・レコーダをサポートする場合にのみ、アプリケーション機能が含まれます。
例15-13 hardware.hasMediaRecorderプロパティの使用方法
<feature ...> ... <constraints> <constraint property="hardware.hasMediaRecorder" operator="equal" value="true" /> </constraints> ... </feature>
注意: すべてのiOSベースのハードウェアにApache Cordovaからアクセス可能なメディア・レコーダがあるため、すべてのiOSデバイスでこの値を |
hardware.hasTouchScreen
: ハードウェアにタッチ・スクリーン機能があるかどうかを示します。この制約は、例15-14に示すように、true
またはfalse
のvalue
属性を使用して定義します。デバイス・ハードウェアがタッチ・スクリーンをサポートする場合にのみ、アプリケーション機能が含められます。
例15-14 hardware.hasTouchScreenプロパティの使用方法
<feature ...> ... <constraints> <constraint property="hardware.hasTouchScreen" operator="equal" value="true" /> </constraints> ... </feature>
注意: すべてのiOSベースのハードウェアにタッチ・スクリーン機能があるため、iOSデバイスの |
hardware.screen.width
: デバイスの現在の向きでの画面幅を示します。画面幅を、デバイスに表示される実際のピクセルを表す物理デバイス・ピクセル単位ではなく、論理デバイス・ピクセル単位(例15-15では320)で示す数値を入力します。この値はデバイスの向きによって異なります。
例15-15 hardware.screen.widthプロパティの使用方法
<feature ...> ... <constraints> <constraint property="hardware.screen.width" operator="equal" value="320" /> </constraints> ... </feature>
注意: この値はモバイル・アプリケーションの起動時に評価され、その際にランタイムが制約を評価し、 |
hardware.screen.height
: デバイスの現在の位置における画面高さを示します。例15-16に示すように、320や480などの画面高さ(論理ピクセル単位)を示す数値を入力します。この値はデバイスの向きによって異なります。
例15-16 hardware.screen.heightプロパティの使用方法
<feature ...> ... <constraints> <constraint property="hardware.screen.height" operator="equal" value="480" /> </constraints> ... </feature>
注意: モバイル・アプリケーションの起動時に、 |
hardware.screen.availableWidth
: デバイスの現在の向きで利用可能な画面幅を示します。例15-17に示すように、320や480などの画面幅(論理ピクセル単位)を示す数値を入力します。この値はデバイスの向きによって異なります。
hardware.screen.availableHeight
: デバイスの現在の位置で利用可能な画面高さを示します。例15-18に示すように、320や480などの画面幅(論理ピクセル単位)を示す数値を入力します。この値はデバイスの向きによって異なります。
name
、operator
およびvalue
属性で定義された静的制約に基づいてアプリケーション機能またはユーザー・インタフェースの表示と非表示を設定する以外にも、EL式を使用して制約を定義することにより、アプリケーション機能およびコンテンツを動的にレンダリングできるようにモバイル・アプリケーションを設定できます。EL式に基づいて制約を動的に評価すると、独自のBeanロジックをコールできる式を記述したり、複雑なEL式を記述したり、アプリケーション・プリファレンスにアクセスするロジックを記述することもできます。制約をEL式として定義することで柔軟性が向上し、MAFランタイムで、EL式がfalse
として評価された場合は最初にアプリケーション機能を非表示にするが、後で同じEL式がtrue
として評価されたときには表示するようにできます。例15-19の遅延メソッド式に示しているように、<adfmf:constraintExpression>
要素を使用すると、EL式を使用してアプリケーション機能に対する制約を定義できます。
例15-19 EL式を使用した動的制約の定義
<adfmf:constraints> <adfmf:constraint id="c1" property="hardware.screen.dpi" operator="more" value="120"/> <adfmf:constraint id="c2" property="device.model" operator="equal" value="iPad"/> <adfmf:constraintExpression id="c3" value="#{myBean.checkConstraint}"/> </adfmf:constraints>
例15-19でも示されているように、maf-feature.xml
ファイルの<adfmf:constraints
要素内で定義された静的制約間でこの要素をネストできます。詳細は、Oracle Fusion Middleware Oracle Mobile Application Frameworkのタグ・リファレンスを参照してください。
MAFランタイムによる表示を有効にするには、静的制約のすべての条件がtrue
に評価される必要があります。制約EL式がtrue
として評価された場合はアプリケーション機能およびコンテンツが表示され、式がfalse
として評価された場合はそれらが非表示になります。
静的制約とは異なり、動的制約の作成(または更新)を行う場合は、maf-feature.xml
概要エディタを使用しません。かわりに、制約式コンポーネントをソース・エディタまたは「構造」ウィンドウにドラッグし、式ビルダーを使用してこのコンポーネントにEL式を移入することにより、<adfmf:constraintExpression>
を作成します。
制約式コンポーネントを定義するには:
maf-feature.xml
ファイルのソース・エディタを選択します。
<adfmf-constraints>
要素に移動します。
「コンポーネント」ウィンドウで、「共通」コンポーネントを選択します(図15-4を参照)。
制約式コンポーネントを選択し、次のいずれかの方法を使用して<adfmf-constraints>
要素に追加します。
「コンポーネント」ウィンドウで、制約式コンポーネントをダブルクリックします。
制約式コンポーネントをソース・エディタの<adfmf-constraints>
要素にドラッグします。
制約式コンポーネントを「構造」ウィンドウの「制約」ノードにドラッグします。
図15-5に示すように、「constraintExpressionの挿入」ダイアログでEL式を入力するか、式ビルダー(このダイアログ内の「プロパティ・メニュー」アイコン(ギア)をクリックしてアクセス)を使用してEL式を作成します。
例15-19は、「ADFマネージドBean」カテゴリからのEL式の作成を示しています。ただし、制約のEL式は、第7.3.5項「式ビルダーのカテゴリについて」で説明されているカテゴリのいずれからでも作成できます。
「OK」をクリックします。