ヘッダーをスキップ
Oracle® Fusion Middleware Oracle Application Development Frameworkモバイル開発者ガイド
11g リリース2 (11.1.2.4.0)
B70750-02
  目次へ移動
目次

前
 
次
 

14 アプリケーション機能に関する制約の設定

この章では、ユーザーのアクセス権限またはデバイス要件に基づいてアプリケーション機能を制限できる制約の設定方法について説明します。

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

14.1 制約の概要

制約には、アプリケーション機能またはアプリケーション・コンテンツを使用するタイミングが記述されています。制約では、ユーザーとユーザー・ロール、モバイル・アプリケーションの実行対象となるデバイス、およびデバイス上で使用可能なハードウェアに基づいて、アクセスを制限できます。制約は2つのレベルで設定できます。1つ目のアプリケーション機能レベルでは、ユーザーのデバイスにおけるアプリケーション機能の可視性を制御し、2つ目のコンテンツ・レベルでは、アプリケーション機能に対して配信できるADFモバイル・コンテンツのタイプを指定できます。adfmf-feature.xmlファイルの概要エディタを使用すると、これら両方のタイプの制約を設定できます。制約はADFモバイル・ランタイムによって評価され、エンド・ユーザーが特定のコンテンツを表示または使用したり、アプリケーション機能自体にアクセスできるようにするには、trueに評価される必要があります。

14.1.1 制約を使用したアプリケーション機能の表示または非表示

「制約」タブ(図14-1を参照)では、アプリケーション機能レベルの制約を設定できます。たとえば、デバイスのカメラを使用するアプリケーション機能は、そのデバイスで実際にカメラ機能が提供されることがADFモバイル・ランタイムによって確認された場合のみ、ADFモバイル・アプリケーションのナビゲーション・バーまたはSpringboard内に表示されます。また、機能レベルの制約を使用すると、ユーザー・ロールと権限に基づいてアプリケーションを保護することもできます。図14-1は、ADFモバイル・ランタイムによってtrueに評価されたときに、管理者権限を持つユーザーのみにアプリケーションへの
アクセスを許可する制約の作成方法を示しています。制約がランタイムによってfalseと評価された場合、アプリケーション機能はナビゲーション・バーまたはSpringboard内に表示されないため、エンド・ユーザーはそのアプリケーション機能にアクセスできません。

図14-1 アプリケーション機能レベルの制約の設定

アプリケーション機能の制約。

14.1.2 制約を使用した特定のコンテンツ・タイプの配信

デバイス・ハードウェア・プロパティやユーザー権限などのファクタに対応するため、単一のアプリケーション機能に複数のコンテンツ・タイプを指定し、ユーザー・インタフェースの様々なバージョンを配信できます。アプリケーション機能のコンテンツに関する制約を設定することによって、アプリケーション・ページを表示できるエンド・ユーザーや、そのページの使用方法を特定する条件を指定できます。

たとえば、「コンテンツ」タブ(図14-2を参照)を使用して、管理権限を付与されたユーザーに特定のタイプのユーザー・インタフェースを表示し、基本的なユーザー権限を持つユーザーに別のユーザー・インタフェースを表示できます。また、コンテンツ・レベルの制約によって、デバイスのレイアウトに関する考慮事項に対応できます。図14-2は、この例として、HRサンプル・アプリケーションで、デバイスの画面幅に基づく制約を使用して、iPhoneとiPadのレイアウトに合ったページをコールするAMXモバイル・タスク・フローを配信する方法を示しています。エンド・ユーザーがHRサンプル・アプリケーションを起動すると、ADFモバイル・ランタイムによって、Employeesアプリケーション機能用に設定された制約が評価されます。ランタイムでは、デバイスの画面幅が500ピクセルを超えることを確認した場合、iPad用に設計されたADFモバイルAMXページをコールする、Employees_pad_taskflow.xmlファイルを選択します。この制約がfalseに評価された(つまり、画面の幅が500ピクセル以下である)場合、ランタイムでは、iPhone固有のページをコールするADFモバイル・タスクフローである、Employees_phone_taskflow.xmlを選択します。さらに、「コンテンツ」タブを使用すると、ランタイムによって特定のコンテンツが選択されたときに表示されるナビゲーション・バーとSpringboardのイメージを選択できます。コンテンツ固有のイメージを選択しなかった場合、ADFモバイルでは、「一般」タブで指定されたアプリケーション機能レベルのイメージを使用します。


注意:

イメージはプラットフォーム固有のガイドラインに準拠している必要があります(第5.8.1項「アプリケーション機能の基本情報の定義方法」を参照)。


図14-2 コンテンツ・レベルの制約の設定

コンテンツ固有の制約の設定。

HRサンプル・アプリケーションの詳細は、付録F「サンプルのADFモバイル・アプリケーション」を参照してください。HRサンプル・アプリケーションは、開発用コンピュータのJDeveloperインストール・ディレクトリ内の次の場所にある、PublicSamples.zipファイルに含まれています。

jdev_install/jdeveloper/jdev/extensions/oracle.adf.mobile/Samples

14.2 アプリケーション機能の制約の定義

アプリケーション機能レベルの制約を設定する際、<adfmf:constraint>要素(<adfmf:constraints>の子要素)のpropertyoperatorおよびvalue属性を使用すると、ユーザー、デバイスまたはハードウェアに基づいてアプリケーションの使用を制限できます。例14-1に示すこれらの属性の定義の例は、アプリケーション機能へのアクセスをField Repに制限し、さらにiOSデバイスでのみアプリケーションを実行するように制限する属性の定義を示しています。

例14-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>

14.2.1 アプリケーション機能に制約を定義する方法

図14-2に示すように、「機能」ページの「制約」タブを使用して、選択したアプリケーション機能の制約を宣言的に構成します。

図14-3 制約の定義

機能の制約を定義します。

アプリケーション機能の制約を定義するには:

  1. 「制約」タブをクリックします。

  2. 「追加」をクリックします。

  3. プロパティと適切な演算子を選択し、値を入力します。プロパティの使用の詳細は、第14.2.3項「property属性について」を参照してください。

14.2.2 制約を定義する場合の処理

例14-1と同様に、「制約」タブに値を入力すると、定義された<adfmf:constraint>要素を使用して、識別子ファイルの<adfmf:constraints>要素が更新されます。

14.2.3 property属性について

ADFモバイルでは、ユーザー、デバイスおよびハードウェアの各プロパティを反映するproperty属性のセットが提供されています。これらのプロパティを次の演算子と組み合せて使用することでアプリケーション機能の使用方法が決定されます。

  • contains

  • equal

  • less

  • more

  • not

14.2.4 ユーザー制約とアクセス制御について

ユーザーがADFモバイル・アプリケーションにログインした後、ADFモバイル・ランタイムでは、アプリケーション機能ごとに構成されたユーザー・ロール・ベースの制約を、アクセス制御サービス(ACS)によって取得されたユーザー・ロールと権限に対して調整します。その後ADFモバイルでは、制約を満たす権限を持つエンド・ユーザーにのみ、アプリケーション機能(またはアプリケーション機能のコンテンツ)を提供します。このようなユーザー権限とロールに関する制約を設定するだけでなく、「ADFモバイル・ログイン接続の作成」ダイアログに次の項目を入力することによって、ADFモバイル・アプリケーション用のアクセス制御を作成できます(図14-4および第18.4.2項「ログイン・ページの指定方法」を参照)。

  • ユーザー・ロールと権限を送信するREST WebサービスのURL。

  • アプリケーション機能によってチェックされるユーザー・ロールのリスト。

  • 権限のリスト。

第18.4.7項「アクセス制御サービスに関する必知事項」も参照してください。

図14-4 ユーザー・ロールと権限の取得の構成

アクセス制御ロール、権限、URL。

user.rolesおよびuser.privilegesに基づく制約を使用してアプリケーション機能へのアクセスを制御します。たとえば、アプリケーション機能へのアクセスをmanager_roleロールを持つユーザーのみに許可するには、user.roles contains manager_roleの制約をアプリケーション機能の定義に追加する必要があります。

user.rolesおよびuser.privilegesでは、containsおよびnotの演算子を次のように使用します。

  • contains: ロールまたは権限のコレクションに名前の付いたロールまたは権限が含まれる場合、ランタイムではその制約をtrueに評価します。例14-2には、contains演算子を使用したuser.rolesプロパティの使用の例が示されています。ユーザーのロールに従業員のロールが含まれている場合は、モバイル・アプリケーションにアプリケーション機能が表示されます。

    例14-2 ユーザー・ロール・コレクションに対するcontains演算子の使用方法

    <feature ...>
       ...
       <constraints>
          <constraint property="user.roles"  
                      operator="contains"
                      value="employee" />
       </constraints>
       ...
    </feature>
    
  • not: ロールまたは権限のコレクションに名前の付いたロールまたは権限が含まれない場合、ランタイムではその制約をtrueに評価します。例14-3では、ユーザーの権限に管理者権限が含まれる場合はアプリケーション機能が含められません。

    例14-3 not演算子とuser.privilegesプロパティを使用したアプリケーション機能へのアクセスの制限

    <feature ...>
       ...
       <constraints>
          <constraint property="user.privileges"  
                      operator="not"
                      value="manager" />
       </constraints>
       ...
    </feature>
    

14.2.5 ハードウェア関連の制約について

ハードウェア・オブジェクトは、カメラの有無、コンパス向首方向情報提供機能、ファイルの保存機能など、デバイスで使用可能なハードウェアを参照します。次のプロパティではequal演算子が使用されます。

  • hardware.networkStatus: アプリケーションの起動時にネットワークの状態が表示されます。NotReachableCarrierDataConnectionおよびWiFiConnectionの3つの属性値を使用してこのプロパティを変更できます。例14-4 は、この3つ目の属性値を例示しています。その例に示すとおり、この値を設定することで、デバイス・ハードウェアがWi-Fi接続があることを示している場合にのみモバイル・アプリケーションにこのモバイル・アプリケーション機能が表示されることになります。つまり、デバイスにWi-Fi接続がない場合は、ADFモバイル・アプリケーションをロードしても、そのアプリケーション機能は表示されません。

    例14-4 hardware.networkStatusプロパティの定義

    <feature ...>
    ...
       <constraints>
          <constraint property="hardware.networkStatus" 
                      operator="equal" 
                      value="WiFiConnection" />
       </constraints>
    ...
    </feature>
    

    注意:

    この制約は、iOSデバイスの起動時に評価されます。起動時にデバイスにWi-Fi接続がなく、その後その接続を取得した場合(ユーザーがWi-Fiのホットスポットに入った場合など)、アプリケーション機能は無効のままとなり、ユーザーがモバイル・アプリケーションを停止し再起動するまで利用できません。


  • hardware.hasAccelerometer: デバイスに加速度計があるかどうかを示します。このプロパティは、trueまたはfalseの値で定義します。例14-5は、trueの値を示しており、ハードウェアに加速度計がある場合にのみこのアプリケーション機能が利用可能なことを示しています。

    例14-5 hardware.hasAccelerometerプロパティの使用方法

    <feature ...>
    ...
       <constraints>
          <constraint property="hardware.hasAccelerometer"  
                      operator="equal"
                      value="true" />
    </constraints>
    ...
    </feature>
    

    注意:

    iOSベースのハードウェアにはすべて加速度計があるため、このプロパティは常にtrueの値にして、iOSデバイスでアプリケーション機能が利用できるようにしておく必要があります。


  • hardware.hasCamera: デバイスにカメラがあるかどうかを示します。この制約は、trueまたはfalseの属性値を使用して定義します。例14-6は、値がtrueに設定されており、デバイスにカメラが含まれている場合にのみアプリケーション機能が利用可能なことを示しています。

    例14-6 hardware.hasCameraプロパティの使用方法

    <feature ...>
    ...
       <constraints>
          <constraint property="hardware.hasCamera"  
                      operator="equal"
                      value="true" />
    </constraints>
    ...
    </feature>
    

    注意:

    すべてのiOSベース・ハードウェアにカメラが搭載されているわけではありません。この値は、iOSデバイスでADFモバイル・アプリケーションを起動した際に動的に評価されます。そのときに、モバイル・アプリケーションでは、trueに評価されないアプリケーション機能が削除されます。


  • hardware.hasCompass: デバイスにコンパスがあるかどうかを示します。この制約は、例14-7に示すように、trueまたはfalseの属性値を使用して定義します。

    例14-7 hardware.hasCompassプロパティの使用方法

    <feature ...>
       ...
       <constraints>
          <constraint property="hardware.hasCompass"  
                      operator="equal"
                      value="true" />
       </constraints>
       ...
    </feature>
    

    注意:

    すべてのiOSデバイスにコンパスがあるわけではありません。この値は、iOSデバイスでADFモバイル・アプリケーションを起動した際に動的に評価されます。そのときに、モバイル・アプリケーションでは、trueに評価されないアプリケーション機能が削除されます。


  • hardware.hasContacts: デバイスにアドレス帳またはコンタクト先があるかどうかを示します。この制約は、例14-8に示すように、trueまたはfalseの属性値を使用して定義します。

    例14-8 hardware.hasContactsプロパティの使用方法

    <feature ...>
       ...
       <constraints>
          <constraint property="hardware.hasContacts"  
                      operator="equal"
                      value"=true" />
          </constraints>
       ...
    </feature>
    

    注意:

    iOSベースのハードウェアのコンタクト先はApache Cordova経由でアクセスされるため、iOSデバイスに対してはvalue属性は常にtrueに設定されます。


  • hardware.hasFileAccess: デバイスでファイル・アクセスが可能かどうかを示します。この制約は、例14-9に示すように、trueまたはfalseの属性値を使用して定義します。ランタイムがこの制約をtrueに評価した場合にのみ、アプリケーション機能を利用できます。

    例14-9 hardware.hasFileAccessプロパティの使用方法

    <feature ...>
       ...
       <constraints>
          <constraint property="hardware.hasFileAccess"
                      operator="equal"
                      value="true" />
       </constraints>
       ...
    </feature>
    

    注意:

    iOSベースのハードウェアのファイル・アクセスはApache Cordova経由でアクセスされるため、iOSデバイスに対してはvalue属性は常にtrueになります。


  • hardware.hasGeoLocation: デバイスが地理的位置情報サービスを提供しているかどうかを示します。この制約は、例14-10に示すように、trueまたはfalseの属性値を使用して定義します。デバイスが地理的位置情報をサポートする場合にのみ、アプリケーション機能を利用できます。

    例14-10 hardware.hasGeoLocationプロパティの使用方法

    <feature ...>
       ...
       <constraints>
          <constraint property="hardware.hasGeoLocation"  
                      operator="equal"
                      value="true"/>
       </constraints>
       ...
    </feature>
    

    注意:

    Apache Cordovaでは、すべてのiOSデバイスに対して地理的位置情報サービスへのアクセスを提供しているわけではありません。デバイスによっては、制約がランタイムにより評価された場合に、アプリケーション機能が利用できない可能性があります。


  • hardware.hasLocalStorage: デバイスがファイルのローカル記憶域を提供するかどうかを示します。この制約は、例14-11に示すように、trueまたはfalsevalue属性を使用して定義します。デバイスがローカルでのファイルの格納をサポートする場合にのみ、アプリケーション機能が表示されます。

    例14-11 hasLocalStorageプロパティの使用方法

    <feature ...>
       ...
       <constraints>
          <constraint property="hardware.hasLocalStorage"  
                      operator="equal"
                      value="true" />
       </constraints>
       ...
    </feature>
    

    注意:

    Apache CordovaではすべてのiOSハードウェアでローカル・ファイル記憶域へのアクセスが提供されるため、iOSデバイスに対するvalue属性は常にtrueになります。


  • hardware.hasMediaPlayer: デバイスにメディア・プレーヤがあるかどうかを示します。この制約は、例14-12に示すように、trueまたはfalsevalue属性を使用して定義します。デバイスにメディア・プレーヤがある場合にのみ、アプリケーション機能が表示されます。

    例14-12 hardware.hasMediaPlayerプロパティの使用方法

    <feature ...>
       ...
       <constraints>
          <constraint property="hardware.hasMediaPlayer"  
                      operator="equal"
                      value="true" />
       </constraints>
       ...
    </feature>
    

    注意:

    Apache CordovaではiOSベースのハードウェアでメディア・プレーヤへのアクセスを提供しているため、iOSデバイスではvalue属性は常にtrueになります。


  • hardware.hasMediaRecorder: デバイスにメディア・レコーダがあるかどうかを示します。この制約は、例14-13に示すように、trueまたはfalsevalueを使用して定義します。デバイス・ハードウェアがメディア・レコーダをサポートする場合にのみ、アプリケーション機能が含まれます。

    例14-13 hardware.hasMediaRecorderプロパティの使用方法

    <feature ...>
       ...
       <constraints>
          <constraint property="hardware.hasMediaRecorder"  
                      operator="equal"
                      value="true" />
       </constraints>
       ...
    </feature>
    

    注意:

    すべてのiOSベースのハードウェアにApache Cordovaからアクセス可能なメディア・レコーダがあるため、すべてのiOSデバイスでこの値をtrueに設定します。Apple iTouchなどのいくつかのデバイスにはマイクがありませんが、エンド・ユーザーは外部マイクを取り付けることでレコーディングが可能になります。


  • hardware.hasTouchScreen: ハードウェアにタッチ・スクリーン機能があるかどうかを示します。この制約は、例14-14に示すように、trueまたはfalsevalue属性を使用して定義します。デバイス・ハードウェアがタッチ・スクリーンをサポートする場合にのみ、アプリケーション機能が含められます。

    例14-14 hardware.hasTouchScreenプロパティの使用方法

    <feature ...>
       ...
       <constraints>
          <constraint property="hardware.hasTouchScreen" 
                      operator="equal"
                      value="true" />
       </constraints>
       ...
    </feature>
    

    注意:

    すべてのiOSベースのハードウェアにタッチ・スクリーン機能があるため、iOSデバイスのvalue属性をtrueに設定します。


  • hardware.screen.width: デバイスの現在の向きでの画面幅を示します。画面幅を、デバイスに表示される実際のピクセルを表す物理デバイス・ピクセル単位ではなく、論理デバイス・ピクセル単位(例14-15では320)で示す数値を入力します。この値はデバイスの向きによって異なります。

    例14-15 hardware.screen.widthプロパティの使用方法

    <feature ...>
       ...
       <constraints>
          <constraint property="hardware.screen.width" 
                      operator="equal"
                      value="320" />
       </constraints>
       ...
    </feature>
    

    注意:

    この値はモバイル・アプリケーションの起動時に評価され、その際にランタイムが制約を評価し、trueに評価されない制約を持つアプリケーション機能は削除されます。ADFモバイル・アプリケーションの起動後にユーザーがデバイスを回転させた場合、アプリケーション機能の設定はモバイル・アプリケーションの起動後に修正されるため、ADFモバイルのランタイムではこの制約は再評価されません。


  • hardware.screen.height: デバイスの現在の位置における画面高さを示します。例14-16に示すように、320や480などの画面高さ(論理ピクセル単位)を示す数値を入力します。この値はデバイスの向きによって異なります。

    例14-16 hardware.screen.heightプロパティの使用方法

    <feature ...>
       ...
       <constraints>
          <constraint property="hardware.screen.height"
                      operator="equal"
                      value="480" />
       </constraints>
       ...
    </feature>
    

    注意:

    モバイル・アプリケーションの起動時に、trueに評価されない制約を持つアプリケーション機能を削除するプロセスの一部として、ADFモバイル・ランタイムではこの制約の画面高さの値を評価します。ADFモバイル・アプリケーションの起動後にユーザーがデバイスの向きを変えた場合は、アプリケーション機能の設定はモバイル・アプリケーションの起動後に修正されるため、ランタイムではこの制約は再評価されません。


  • hardware.screen.availableWidth: デバイスの現在の向きで利用可能な画面幅を示します。例14-17に示すように、320や480などの画面幅(論理ピクセル単位)を示す数値を入力します。この値はデバイスの向きによって異なります。

    例14-17 hardware.screen.availableWidthプロパティの使用方法

    <feature ...>
       ...
       <constraints>
          <constraint property="hardware.screen.availableWidth"  
                      operator="equal"
                      value"320" />
       </constraints>
       ...
    </feature>
    
  • hardware.screen.availableHeight: デバイスの現在の位置で利用可能な画面高さを示します。例14-18に示すように、320や480などの画面幅(論理ピクセル単位)を示す数値を入力します。この値はデバイスの向きによって異なります。

    例14-18 hardware.screen.availableHeightプロパティの使用方法

    <feature ...>
       ...
       <constraints>
          <constraint property="hardware.screen.availableHeight"  
                      operator="equal"
                      value"480" />
       </constraints>
       ...
    </feature>