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