プライマリ・コンテンツに移動
Oracle® Mobile Application Framework Oracle Mobile Application Frameworkでのモバイル・アプリケーションの開発
2.3.3
E82940-01
目次へ移動
目次

前
次

25 通知の有効化と使用方法

この章では、MAFアプリケーションにおけるローカル通知の表示、プッシュ通知メッセージの登録、およびそれらの処理方法を説明します。

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

25.1 通知の概要

通知とは、ユーザーの操作なしで(アプリケーションの実行中はアプリケーション外部で)ユーザーが受信する警告やバナーなどのオーディオ信号、ビジュアル信号、またはオーディオ/ビジュアル信号のことです。プッシュ通知は、サーバーなどの外部ソースからモバイル・デバイス上の登録済アプリケーションに送信されます。また、ローカル通知は、アプリケーションによって送信され、そのアプリケーションによって受信されます。

通知は、モバイル・アプリケーションの標準のユーザー・インタフェース以外でユーザーに提供されるシグナルです。これらの通知は、アプリケーションの状態とユーザー設定に応じて、アラート・メッセージやバナーとして表示されます。通知は、視覚的に、または音で(あるいはその両方で)配信できます。

主な通知のタイプには、次の2つがあります。

  • プッシュ通知は、サーバーなどの外部ソースからモバイル・デバイス上のアプリケーションに送信されます。通知を受信したユーザーは、アプリケーションを起動するか、その通知を無視できます。無視した場合はアプリケーションがアクティブになりません。

    図25-1は、iOSデバイスにおけるプッシュ通知アラートを示しています。

    図25-1 プッシュ通知

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

    プッシュ通知を受信するには、アプリケーションを通知サービスに登録する必要があります。登録が成功すると、通知サービスからアプリケーションにトークンが発行されます。アプリケーションでは、このトークンを(リモート・サーバー上の)プロバイダと共有します。これにより、プロバイダから、通知サービスを通じてアプリケーションに通知を送信できるようになります。「プッシュ通知の有効化」で説明されているように、アプリケーションから提供された登録構成を使用して、アプリケーションのかわりにMAFによって登録が行われます。登録は、有効なトークンを確保するため、MAFアプリケーションのすべての起動時に発生します。登録が成功すると、MAFでは、プラットフォーム固有の通知サービスから取得したトークンをプロバイダと共有します。iOSの場合、この通知サービスはApple Push Notification Service (APNs)です。Google Cloud Messaging (GCM) for Androidでは、Androidデバイスにインストールされたアプリケーション用の通知サービスが提供されます。

    MAFアプリケーションでは、その状態にかかわらずプッシュ通知を受信できます。これらのメッセージは、アプリケーションがフォアグラウンドで実行されていなくても表示される場合があり、その表示形式はMAFアプリケーションの状態とユーザー設定によって異なります。表25-1では、iOSオペレーティング・システムで、MAFアプリケーションの状態に応じて、どのようにプッシュ通知が処理されるかを説明します。


    表25-1 iOSデバイスにおけるプッシュ通知の処理

    状態 アクション

    MAFアプリケーションはインストールされているが、実行されていない。

    通知メッセージが登録済の通知スタイル(なし、バナーまたはアラート)で表示されます。ユーザーがメッセージをタップ(バナー・スタイルの通知の場合)するか、アクション・ボタンをタッチ(メッセージがアラートとして表示される場合)すると、MAFアプリケーションが起動し、アプリケーション通知ハンドラが呼び出されます。

    MAFアプリケーションがバックグラウンドで実行されている。

    通知メッセージが登録済の通知スタイル(なし、バナーまたはアラート)で表示されます。ユーザーがメッセージをタップ(バナー・スタイルの通知の場合)するか、アクション・ボタンをタッチ(メッセージがアラートとして表示される場合)すると、MAFアプリケーションが起動し、アプリケーション通知ハンドラが呼び出されます。

    MAFアプリケーションがフォアグラウンドで実行されている。

    通知メッセージは表示されません。アプリケーション通知ハンドラが呼び出されます。


    iOSおよびAndroidプラットフォームでは、アプリケーションがフォアグラウンドで実行されていない場合、そのアプリケーションに関連付けられているすべてのプッシュ通知メッセージが、iOS Notification CenterやAndroidデバイス上の通知ドロワーなど、特定の場所に格納されます。

  • ローカル通知は、モバイル・アプリケーション内から発信され、同じアプリケーションによって受信されます。通知は、モバイル・デバイスのプラットフォームでサポートされる標準メカニズム(バナーやサウンドなど)を通じてユーザーに配信されます。

    MAFに附属するローカル通知抽象化APIを使用してアプリケーションを構成し、即座に通知を起動するか、将来の日時に通知するようスケジュールできます。また、通知の繰返しパターンを設定したり(毎日や毎週など)、スケジュール済の通知を取り消すことができます。

    iOSとAndroidプラットフォームの両方で、MAFアプリケーションがフォアグラウンドで実行されている場合、通知はユーザーとの対話なしでアプリケーションに直接配信されます。アプリケーションがバックグラウンドで実行されているか、まったく実行されていない場合、通知はユーザーが通知をタップした後でアプリケーションに配信されます。

    ユニバーサルWindowsプラットフォーム上のMAFアプリケーションは、ローカル通知またはプッシュ通知をサポートしていません。

25.2 プッシュ通知の有効化

プッシュ通知を有効化するには、PushPluginを有効化してからアプリケーション機能に関連付けて、プッシュ通知イベント・リスナー・クラスを作成して、オブジェクトをイベント・ソースに追加します。さらに、アプリケーション・ライフサイクル・イベント・リスナー・クラスを登録し、oracle.adfmf.application.PushNotificationConfigインタフェースを実装して、そのクラスのstartメソッドにEventSourceオブジェクトを追加します。

次のタスクを実行することで、プッシュ通知を有効にできます。

  1. MAFアプリケーションは、次の図に示すように、概要エディタでmaf-application.xml「プラグイン」ページの「コア・プラグイン」セクションで、PushPluginを選択することによってプッシュ通知を受信できます。

    注意:

    デフォルトでは、MAFアプリケーションはプッシュ通知を許可されていません。

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

    「MAFアプリケーションでのプラグインの使用方法」を参照してください。

  2. アプリケーション・コントローラ・プロジェクトで、アプリケーション・ライフサイクル・イベント・リスナー(ALCL)・クラスを登録します。「アプリケーション機能の表示プロパティの設定」および「MAFアプリケーションでのライフサイクル・リスナーの使用方法」を参照してください。
  3. ALCLにoracle.adfmf.application.PushNotificationConfigインタフェースを実装します。このインタフェースは、プッシュ通知サービスに正常に登録するのに必要な構成を提供します。

    PushNotificationConfigインタフェースのgetNotificationStyleおよびgetSourceAuthorizationIdメソッドをオーバーライドおよび実装します。getNotificationStyleメソッドを使用すると、アプリケーションが登録する通知スタイルを指定できます。getSourceAuthorizationIdメソッドを使用すると、MAFアプリケーションへのメッセージの送信を許可されたアカウントのGoogleプロジェクト番号を入力できます。詳細は、Oracle Mobile Application Framework Java APIリファレンスを参照してください。

  4. アプリケーション・コントローラ・プロジェクトで、プッシュ通知イベントを処理するプッシュ通知イベント・リスナー・クラス(NativePushNotificationListenerなど)を作成します。このクラスには、イベント・リスナーを定義するoracle.adfmf.framework.event.EventListenerインタフェースを実装する必要があります。oracle.adfmf.framework.event.EventListenerインタフェースの詳細は、Oracle Mobile Application Framework Java APIリファレンスを参照してください。

    通知イベントを登録および受信するために、onOpenonMessageおよびonErrorメソッドをオーバーライドおよび実装します。プッシュ通知サービスへの登録が成功すると、MAFでは、アプリケーション開発者がプロバイダと共有する必要がある登録トークンを使用して、onOpenメソッドをコールします。通知サービスへの登録時にエラーが発生した場合、onErrorメソッドが呼び出され、プッシュ通知サービスによって返されるエラーがAdfExceptionとしてカプセル化されます。

    MAFでは、アプリケーションが通知を受信するたびに、通知ペイロードを使用してonMessage(Event e)メソッドをコールします。Eventオブジェクトは、通知ペイロードおよびアプリケーションの状態に関する有用な情報を取得するために使用できます。通知ペイロードを取得するには、Event.getPayloadメソッドを使用します。通知時にアプリケーションの状態を取得するには、Event.getApplicationStateメソッドを使用します。詳細は、Oracle Mobile Application Framework Java APIリファレンスEventクラスを参照してください。

  5. ALCLクラスのstartメソッド内に、ネイティブ・プッシュ通知イベントのソースを表すEventSourceオブジェクトを取得します。
    EventSource evtSource = EventSourceFactory.getEventSource(
            EventSourceFactory.NATIVE_PUSH_NOTIFICATION_REMOTE_EVENT_SOURCE_NAME);
    
  6. プッシュ通知イベント・リスナー・クラスのオブジェクトを作成し、イベント・ソースに追加します。
    evtSource.addListener(new NativePushNotificationListener());
    

注意:

iOS用MAFのデプロイメント・プロファイルには、プッシュ通知環境ドロップダウン・リストが表示されます。このドロップダウン・リストでは、ProductionまたはDevelopmentを選択して、デプロイ済アプリケーションをApple Push Notification Service (APNs)に登録できます。デフォルト値はProductionです。iOSにデプロイするMAFアプリケーションに、この値を適切に設定します。プッシュ通知を有効にするためにPushPluginプラグインも選択しないと、MAFは選択した値を無視します。詳細は、「iOSビルド・オプションの定義」を参照してください。

MAFサンプル・アプリケーション(PushDemoおよびPushServer)によって、プッシュ通知の処理方法を示します。これらのサンプル・アプリケーションは、開発コンピュータ上のjdev_install/jdeveloper/jdev/extensions/oracle.maf/SamplesディレクトリのPublicSamples.zipファイル内にあります。

25.2.1 MCSからのプッシュ通知のためのデバイスの登録方法

MAFアプリケーションでプッシュ通知を有効にし、デバイスをMCSに登録して、デバイスのMCSからプッシュ通知を受信します。

MCSからのプッシュ通知をデバイスで受信できるようにするには、デバイスをMCSに登録する必要があります。登録はアプリケーションに固有であるため、各MAFアプリケーションをMCSに登録する必要がります。これを行う前に、プッシュ通知の有効化で説明されているように、MAFアプリケーションでプッシュ通知を有効にします。

MCSPersistenceManager内の次のメソッドを使用して、デバイスとアプリケーションの組合せをMCSに登録します。次のコードは、アプリケーションにmobile-persistence-config.propertiesファイルが含まれていることを前提にしています。このファイルは、MAFクライアント・データ・モデルの各ウィザードの使用時に生成され、MAFアプリケーションのデータ・モデルを作成します(「MAFアプリケーションでのクライアント・データ・モデルの作成」を参照)。

public String registerDevice(String token, String appId, String appVersion)

このメソッドは、プッシュ通知の有効化で説明されているように、EventListenerインタフェースを実装するプッシュ通知イベント・リスナー・クラスから呼び出すことができます。

このクラスでは、onOpenメソッドがMAFによって自動的に呼び出され、このメソッドにより、デバイスに登録する必要があるトークンが渡されます。サンプル・コードを次に示します。

public void onOpen(String token) {
  try {
    String result = new MCSPersistenceManager().registerDevice(token, "com.company.MyMAFApp", "1.0");
  }
  catch (Exception e) {
    throw new AdfException(e.getLocalizedMessage(), AdfException.ERROR);
  }
}

登録が成功したかどうかを確認するには、図25-2に示すように、MCS UIでデバイス登録ボタンをクリックします。

図25-2 MCSでのデバイス登録

このイメージについては周囲のテキストで説明しています。

図25-2に示すように、登録には、MCSに対する認証に使用されたユーザー名が含まれます。これは、前述のようにデバイスを直接onOpenメソッドで登録する場合、RESTサービスへの接続によるクライアント・データ・モデルの作成で説明されているように、登録では、「接続」ページで無名アクセス・キーを使用して指定した無名ユーザーが使用されるということです。これは、保護されている機能にユーザーがアクセスしようとすると、MAFログイン画面のみが表示されるためです。保護されている機能へのアクセスは、onOpenメソッドの実行を次に引き起こすライフサイクル・リスナーstartメソッドが実行されると行われます。登録済のすべてのデバイスにプッシュ通知を送信するだけの場合は、これは問題ではありません。ただし、ユーザー名に基づいてターゲット・デバイスにプッシュ通知を送信する場合は、MAFログイン後まで登録を延期する必要があります。これは、onOpenメソッドでは、トークンをアプリケーション・スコープの変数に格納してから、保護されている最初の機能において、デバイスを登録するためのコールを行う必要があるということです。

デバイスを登録解除するには、MCSPersistenceManagerクラス内の次のメソッドを使用します。

public String deregisterDevice(String token, String appId)

25.2.2 プッシュ通知ペイロードに関する必知事項

JSON形式のプッシュ通知ペイロードには、alertキー、soundキーおよびbadgeキーが含まれています。

MAFでは、JSON形式のペイロードに対して、次のキーを尊重します。

  • alert: 通知プロンプトに表示されるテキスト・メッセージ。

  • sound: 通知を受信したときに再生されるサウンド。

  • badge: iOSのアプリケーション・アイコンに表示する番号。

    注意:

    Androidでは、ペイロードはキー値ペアを持つJSONオブジェクトである可能性があります。GCMサーバーは非文字列値をアプリケーションに送信する前に文字列に変換するため、値は常に文字列化されます。これは、値の型を保持するAPNには当てはまりません。詳細は、『Google Cloud Messaging』のImplementing GCM Serverで、「data」メッセージ・パラメータの説明を参照してください。このドキュメントは、Android開発者のWebサイト(http://developer.android.com/index.html)またはAndroid SDKドキュメントから入手できます。

25.3 ローカル通知の管理

ローカル通知は、Java API、JavaScript APIおよびMAFが提供するDeviceFeaturesデータ・コントロールのメソッドを使用して管理します。

ローカル通知は、次のものを使用して管理できます。

LocalNotificationDemoというMAFサンプル・アプリケーションは、ローカル通知のスケジュールおよび処理方法を示します。このサンプル・アプリケーションは、開発コンピュータ上のjdev_install/jdeveloper/jdev/extensions/oracle.maf/Samplesディレクトリ内のPublicSamples.zipファイル内にあります。

25.3.1 Javaを使用してローカル通知を管理する方法

oracle.adfmf.framework.api.AdfmfContainerUtilitiesクラスのメソッドを使用して、ローカル通知をスケジュールします。

ローカル通知は、oracle.adfmf.framework.api.AdfmfContainerUtilitiesクラスの次のメソッドを使用してスケジュールできます。

  • addLocalNotification(MafNativeLocalNotificationOptions options)。このメソッドは、スケジュールされる通知のIDを表すStringを戻します。

    Javaコードでは、次のような方法でこのメソッドを使用します。

    try {
      // Configure local notification
      MafNativeLocalNotificationOptions options =
                    new MafNativeLocalNotificationOptions();
    
      options.setTitle("some title text");
      options.setAlert("some alert text");
    
      // Set the date in UTC
      options.setDate(LocalDateTime.now(Clock.systemUTC()).plusSeconds(5));
      // Set the notification to repeat every minute
      options.setRepeat(MafNativeLocalNotificationOptions.RepeatInterval.MINUTELY);
      // Set the application badge to be '1' everytime notification is triggered
      options.setBadge(1);
      // Play the default system sound when notification triggers
      options.setSound(MafNativeLocalNotificationOptions.SYSTEM_DEFAULT_SOUND);
      // Vibrate using default system vibration motion when notification triggers
      options.setVibration(
                 MafNativeLocalNotificationOptions.SYSTEM_DEFAULT_VIBRATION);
    
      // Add custom payload that is to be delivered through the local notification
      HashMap<String,Object> payload = new HashMap<String, Object>();
    
      payload.put("somenumber", 1);
      payload.put("somestring", "value2");
      payload.put("someboolean", true);
      options.setPayload(payload);
    
      // Schedule local notification
      String notificationID = AdfmfContainerUtilities.
                              addLocalNotification(options); 
      System.out.println("Notification added successfully. ID is "+notificationID);
    }
    catch(Exception e) {
      System.err.println("There was a problem adding notification");
    }
    

    通知オプションがアプリケーションの動作に与える影響は、ターゲット・プラットフォームに応じて異なります。「ローカル通知オプションとアプリケーション動作に関する必知事項」を参照してください。

  • cancelLocalNotification(String notificationId)。このメソッドは、正常に取り消された通知のIDを表すStringを戻します。

    Javaコードでは、次のような方法でこのメソッドを使用します。

    try {
      String cancelledNotificationId = AdfmfContainerUtilities.
             cancelLocalNotification("a83b696d-53e7-4242-ab4d-4a771d8d178f");
      System.out.println("Notification successfully canceled"); 
    }
    catch(AdfException e) {
      System.err.println("There was a problem canceling notification");
    }

Oracle Mobile Application Framework Java APIリファレンスを参照してください。

25.3.2 JavaScriptを使用してローカル通知を管理する方法

JavaScript APIを使用したローカル通知の管理に使用できるメソッドを使用します。

MAFでは、adf.mf.api.localnotificationネームスペースのJavaScript APIを使用してローカル通知を管理できます。次のメソッドを使用できます。

  • add: 定義は次のとおりです。

    /**
    * Schedule a local notification
    *
    * @param {Object} options - notification options
    * @param {string} options.title - notification title
    * @param {string} options.alert - notification alert
    * @param {Date} options.date - date at which notification is to be triggered
    * @param {Number} options.badge - application icon is to be badged by this 
    *                                 number when notification is triggered
    * @param {string} options.sound - set it to 'SYSTEM_DEFAULT' to play the
    *                                 default system sound upon a notification
    * @param {string} options.vibration - set it to 'SYSTEM_DEFAULT' for default 
    *                                     system vibration upon a notification
    * @param {Object} options.payload - custom payload to be sent via notification
    * @param {successCallback} scb - success callback
    * @param {errorCallback} ecb - error callback
    */
    adf.mf.api.localnotification.add(options,scb,ecb);
    
    {Object} options : json representing notification options
            {
               // notification title (only Android and iOS 8.2 or later)
               "title" : String,  
               // notification alert text
               "alert" : String,  
               // date-time at which notification should be fired (UTC time zone) 
               "date" : Date,  
               // either 'minutely', 'hourly', 'daily',
               // 'weekly', 'monthly', or 'yearly'
               "repeat" : String,  
               // badge application icon with this number (iOS only)
               "badge" : Number,  
               // if set, the default system sound is played
               "sound" : "SYSTEM_DEFAULT",  
               // if set to "SYSTEM_DEFAULT", the default vibration is 
               // enabled upon an incoming notification (Android only)
               "vibration" : String,  
               // custom JSON data to be passed through the notification
               "payload" : Object,  
            }
    
    
    /**
    * Success Callback
    *
    * @param {Object} request - request
    * @param {Object} response - response
    * @param {string} response.id - id of the scheduled notification
    */
    function scb(request, response) {}
    
    
    /**
    * Error Callback
    *
    * @param {Object} request - request
    * @param {Object} response - response
    */
     function fcb(request, response) {}
    

    通知オプションがアプリケーションの動作に与える影響は、ターゲット・プラットフォームに応じて異なります。詳細は、「ローカル通知オプションとアプリケーション動作に関する必知事項」を参照してください。

  • cancel: 定義は次のとおりです。

    /**
    * Cancel a scheduled local notification
    *
    * @param {string} notificationId - id of the scheduled notification 
    *                                  that needs to be canceled
    * @param {successCallback} scb - success callback
    * @param {errorCallback} ecb - error callback 
    */
    adf.mf.api.localnotification.cancel(notificationId, scb, ecb);
    
    {var} notificationId : id of notification that is to be canceled.
    
    
    /**
    * Success Callback
    *
    * @callback successCallback
    * @param {Object} request - request
    * @param {Object} response - response
    * @param {string} response.id - id of the notification
    */
    
    
    /**
    * Error Callback
    *
    * @callback errorCallback
    * @param {Object} request - request
    * @param {Object} response - response
    */
    

    詳細は、Oracle Mobile Application Framework JSDocリファレンスを参照してください。

25.3.3 DeviceFeaturesデータ・コントロールを使用してローカル通知を管理する方法

図25-3に示すDeviceFeaturesデータ・コントロールのaddLocalNotificationおよびcancelLocalNotificationメソッドを使用してローカル通知をスケジュールおよび取消しできます。

図25-3 DeviceFeaturesデータ・コントロールのメソッド

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

DeviceFeaturesデータ・コントロールの詳細は、「DeviceFeaturesデータ・コントロールの使用方法」を参照してください。

25.3.4 ローカル通知オプションとアプリケーション動作に関する必知事項

MAFアプリケーションのローカル通知動作は、通知設定によって決まります。ローカル通知オプションの表を確認してください。

表25-2で、ローカル通知オプションをリストし、各オプションに特定の値を設定した場合または値を設定しない場合にMAFアプリケーションの通知動作がどのような影響を受けるかについて説明します。

表25-2 ローカル通知オプション

オプション iOSでの動作 Androidでの動作

title

次のいずれかです。

  • null

  • 未指定

アプリケーション名が通知タイトルとして表示されます。

通知センターの通知タイトルは、空白で表示されます。

alert

次のいずれかです。

  • null

  • 未指定

通知にbadgesoundなどの他のプロパティが指定されている場合、通知はオペレーティング・システムに配信されるため、サウンドの再生やアプリケーション・アイコン・バッジの更新が行われますが、通知は通知センターに表示されません。

通知の配信時にアプリケーションがフォアグラウンドで実行されている場合、通知はアプリケーションのローカル通知リスナーに配信されます。

通知は、タイトル付きのバナーとして表示されますが、アラート・テキストは表示されません。

date

次のいずれかです。

  • null

  • 未指定

  • 過去の時刻または日付

通知は即座にトリガーされます。

通知は即座にトリガーされます。

repeat

次のいずれかです。

  • null

  • 未指定

通知は繰り返されません。

通知は繰り返されません。

badge

次のいずれかです。

  • null

  • 未指定

  • 負の数値

通知では、アプリケーション・アイコンにバッジが設定されません。

既存のバッジは維持されます。

該当なし脚注1

badge

0

既存のバッジがアプリケーション・アイコンから削除されます。

該当なし脚注2

sound

SYSTEM_DEFAULT_SOUND以外

エラー・メッセージが表示されます。

通知では、サウンドが再生されません。

エラー・メッセージが表示されます。

通知では、サウンドが再生されません。

sound

未指定

通知では、サウンドが再生されません。

通知では、サウンドが再生されません。

vibration

SYSTEM_DEFAULT_VIBRATION以外

該当なし脚注3

エラー・メッセージが表示されます。

通知では、モバイル・デバイスのバイブレーションがトリガーされません。

vibration

未指定

該当なし脚注4

通知では、モバイル・デバイスのバイブレーションがトリガーされません。

脚注1

アプリケーション・バッジの概念はありません。設定は無視されます。

脚注2

アプリケーション・バッジの概念はありません。設定は無視されます。

脚注3

バイブレーションは制御できません。設定は無視されます。ただし、通知の受信時にデフォルトのシステム・サウンドを再生することを指定した場合、また、エンド・ユーザーがモバイル・デバイスの「着信時のバイブレーション」設定を有効にした場合、デバイスは通知の受信時にバイブレーションも適用します。

脚注4

バイブレーションは制御できません。設定は無視されます。ただし、通知の受信時にデフォルトのシステム・サウンドを再生することを指定した場合、また、エンド・ユーザーがモバイル・デバイスの「着信時のバイブレーション」設定を有効にした場合、デバイスは通知の受信時にバイブレーションも適用します。

25.4 MAFが通知イベントをトリガーしたときのアプリケーション状態の判断

MAFには、通知イベントをリスニングするために実装する、EventListenerインタフェースがあります。この実装のonMessageメソッドには、イベントを受信したときのMAFアプリケーションの状態に関する情報を取得できるイベント・パラメータが含まれています。この情報を取得するには、Event.getApplicationlicationState()メソッドを使用します。

次の例(LocalNotificationDemo MAFサンプル・アプリケーションから取得)は、通知イベントのペイロードを取得して、通知イベントを受信したときのMAFアプリケーションの状態を判断する方法を示しています。

NativeLocalNotificationListener implements EventListener {
...

    public void onMessage(Event event) {
	...
	      //MAF application state at the time of this notification
        String appState = stringifyAppState(event.getApplicationState());
        String payload = event.getPayload();
        ...
        
        HashMap<String, Object> payloadMap = ((NativeLocalNotificationEvent)event).getPayloadObject();
        ...
        JSONObject jsonPayload = (JSONObject)payloadMap.get("payload");
        ...
        AdfmfJavaUtilities.setELValue("#{applicationScope.notificationAppState}", appState);
        AdfmfJavaUtilities.setELValue("#{applicationScope.notificationPayload}", jsonPayload != null ? jsonPayload.toString() : "");
        AdfmfContainerUtilities.gotoFeature("Notification");
    }
    ...
}

getApplicationState()の戻り値は、次のとおりです。

  • APPLICATION_STATE_UNKNOWN (0)。通知を受信したときにMAFアプリケーションがメモリーに常駐していても、MAFアプリケーションがフォアグラウンドまたはバックグラウンドで実行されていたかどうかを判断できない場合。このケースはiOSプラットフォームにのみ適用されます。イベント・ペイロードには、アプリケーションの正しい状態を示す追加のforeground属性が含まれます。属性は、1 (フォアグラウンド)または0 (バックグラウンド)のいずれかに設定します。イベント・ペイロードの形式は、次のようになります。

    {"alert":"My message","foreground":1}
  • APPLICATION_STATE_NOT_RUNNING (1)。MAFアプリケーションがメモリーに常駐せず、オペレーティング・システムがMAFアプリケーションを起動してイベントを処理する場合。

  • APPLICATION_STATE_BACKGROUND (2)。通知を受信したときにMAFアプリケーションがメモリーに常駐していて、バックグランドで実行されている場合。

  • APPLICATION_STATE_FOREGROUND (3)。通知を受信したときにMAFアプリケーションがメモリーに常駐していて、フォアグランドで実行されている場合。

前述の例に示す、NativeLocalNotificationEventクラスを使用します。このクラスは、oracle.adfmf.framework.event.Eventを拡張してローカル・イベントを管理します。MAFはNativePushEventクラスは提供します。このクラスもoracle.adfmf.framework.event.Eventを拡張しますが、ネイティブのプッシュ・イベントを管理します。

次のLocalNotificationDemo MAFサンプル・アプリケーションの例に示すように、MAFアプリケーション・ライフサイクル・リスナーのstart()メソッドにリスナーを追加して、ローカル通知に関連するイベントを受信します。

public class LifeCycleListenerImpl implements LifeCycleListener
{
...
  public void start()
  {
    // Listen for local notifications
    EventSource evtSource = EventSourceFactory.getEventSource(EventSourceFactory.NATIVE_LOCAL_NOTIFICATION_EVENT_SOURCE_NAME);
    evtSource.addListener(new NativeLocalNotificationListener());
  }
...

詳細は、Oracle Mobile Application Framework Java APIリファレンス「サンプルのMAFアプリケーション」を参照してください。