| Oracle® Mobile Application Framework Oracle Mobile Application Frameworkでのモバイル・アプリケーションの開発 2.2.1 E72509-01 |
|
前 |
次 |
この章の内容は次のとおりです。
通知とは、モバイル・アプリケーションの通常のユーザー・インタフェース以外でエンド・ユーザーに配信される合図です。これらの通知は、アプリケーションの状態とユーザー設定に応じて、アラート・メッセージやバナーとして表示されます。通知は、視覚的に、または音で(あるいはその両方で)配信できます。
主な通知のタイプには、次の2つがあります。
プッシュ通知は、サーバーなどの外部ソースからモバイル・デバイス上のアプリケーションに送信されます。通知を受信したエンド・ユーザーは、アプリケーションを起動するか、アプリケーションがアクティブ化されていない場合は通知を無視できます。
図24-1 は、iOSデバイスにおけるプッシュ通知アラートを示しています。
図24-1 プッシュ通知

プッシュ通知を受信するには、アプリケーションを通知サービスに登録する必要があります。登録が成功すると、通知サービスからアプリケーションにトークンが発行されます。アプリケーションでは、このトークンを(リモート・サーバー上の)プロバイダと共有します。これにより、プロバイダから、通知サービスを通じてアプリケーションに通知を送信できるようになります。「プッシュ通知の有効化」で説明されているように、アプリケーションから提供された登録構成を使用して、アプリケーションのかわりにMAFによって登録が行われます。登録は、有効なトークンを確保するため、MAFアプリケーションのすべての起動時に発生します。登録が成功すると、MAFでは、プラットフォーム固有の通知サービスから取得したトークンをプロバイダと共有します。iOSの場合、この通知サービスはApple Push Notification Service (APNs)です。Google Cloud Messaging (GCM) for Androidでは、Androidデバイスにインストールされたアプリケーション用の通知サービスが提供されます。
MAFアプリケーションでは、その状態にかかわらずプッシュ通知を受信できます。これらのメッセージは、アプリケーションがフォアグラウンドで実行されていなくても表示される場合があり、その表示形式はMAFアプリケーションの状態とユーザー設定によって異なります。表24-1 では、iOSオペレーティング・システムで、MAFアプリケーションの状態に応じて、どのようにプッシュ通知が処理されるかを説明します。
表24-1 iOSデバイスにおけるプッシュ通知の処理
| 状態 | アクション |
|---|---|
MAFアプリケーションはインストールされているが、実行されていない。 |
通知メッセージが登録済の通知スタイル(なし、バナーまたはアラート)で表示されます。ユーザーがメッセージをタップ(バナー・スタイルの通知の場合)するか、アクション・ボタンをタッチ(メッセージがアラートとして表示される場合)すると、MAFアプリケーションが起動し、アプリケーション通知ハンドラが呼び出されます。 |
MAFアプリケーションがバックグラウンドで実行されている。 |
通知メッセージが登録済の通知スタイル(なし、バナーまたはアラート)で表示されます。ユーザーがメッセージをタップ(バナー・スタイルの通知の場合)するか、アクション・ボタンをタッチ(メッセージがアラートとして表示される場合)すると、MAFアプリケーションが起動し、アプリケーション通知ハンドラが呼び出されます。 |
MAFアプリケーションがフォアグラウンドで実行されている。 |
通知メッセージは表示されません。アプリケーション通知ハンドラが呼び出されます。 |
iOSおよびAndroidプラットフォームでは、アプリケーションがフォアグラウンドで実行されていない場合、そのアプリケーションに関連付けられているすべてのプッシュ通知メッセージが、iOS Notification CenterやAndroidデバイス上の通知ドロワーなど、特定の場所に格納されます。
ローカル通知は、モバイル・アプリケーション内から発信され、同じアプリケーションによって受信されます。通知は、モバイル・デバイスのプラットフォームでサポートされる標準メカニズム(バナーやサウンドなど)を通じてエンド・ユーザーに配信されます。
MAFに附属するローカル通知抽象化APIを使用してアプリケーションを構成し、即座に通知を起動するか、将来の日時に通知するようスケジュールできます。また、通知の繰返しパターンを設定したり(毎日や毎週など)、スケジュール済の通知を取り消すことができます。
iOSおよびAndroidプラットフォームで、MAFアプリケーションがフォアグラウンドで実行されている場合、通知は、エンド・ユーザーの操作なしでアプリケーションに直接配信されます。アプリケーションがバックグラウンドで実行されているか、まったく実行されていない場合、通知は、エンド・ユーザーが通知をタップするとアプリケーションに配信されます。
次のタスクを実行することで、プッシュ通知を有効にできます。
MAFサンプル・アプリケーション(PushDemoおよびPushServer)によって、プッシュ通知の処理方法を示します。これらのサンプル・アプリケーションは、開発コンピュータ上のjdev_install/jdeveloper/jdev/extensions/oracle.maf/SamplesディレクトリのPublicSamples.zipファイル内にあります。
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ドキュメントから入手できます。
ローカル通知は、次のものを使用して管理できます。
MAFの提供するJava API (「Javaを使用してローカル通知を管理する方法」を参照)。
MAFの提供するJavaScript API (「JavaScriptを使用してローカル通知を管理する方法」を参照)。
アプリケーション設計時にすべてのMAFアプリケーションで使用可能なDeviceFeaturesデータ・コントロールのメソッド(「DeviceFeaturesデータ・コントロールを使用してローカル通知を管理する方法」を参照)。
LocalNotificationDemoというMAFサンプル・アプリケーションは、ローカル通知のスケジュールおよび処理方法を示します。このサンプル・アプリケーションは、開発コンピュータ上のjdev_install/jdeveloper/jdev/extensions/oracle.maf/Samplesディレクトリ内のPublicSamples.zipファイル内にあります。
ローカル通知は、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リファレンスを参照してください。
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リファレンスを参照してください。
図24-2 に示すDeviceFeaturesデータ・コントロールのaddLocalNotificationおよびcancelLocalNotificationメソッドを使用してローカル通知をスケジュールおよび取消しできます。
図24-2 DeviceFeaturesデータ・コントロールのメソッド

DeviceFeaturesデータ・コントロールの詳細は、「DeviceFeaturesデータ・コントロールの使用方法」を参照してください。
ローカル通知の処理を可能にするため、MAFには次のものが用意されています。
ローカル通知イベントのリスナーを作成するために実装する必要のあるEventListenerインタフェース。通知がトリガーされると、通知の詳細を使用してonMessageメソッドがコールされます。
NativeLocalNotificationListener implements EventListener {
@Override
public void onOpen(String id) {
}
@Override
public void onMessage(Event event) {
//Application state at the time of this notification
int appState = event.getApplicationState();
//Get local notification event details
if (event instanceof NativeLocalNotificationEvent) {
NativeLocalNotificationEvent localNotificationEvent =
(NativeLocalNotificationEvent) event;
HashMap<String, Object> notification =
localNotificationEvent.getPayloadObject();
// do something with the notification payload, such as navigate
// to an application feature, call a web service, and so on
}
@Override
public void onError(AdfException error) {
}
}
oracle.adfmf.framework.event.Eventを拡張するNativeLocalNotificationEventクラス。
ローカル通知に関連するイベントを受信するには、次のように登録済のApplicationLifeCycleEventListener#startメソッドのリスナーを追加する必要があります。
EventSource evtSource = EventSourceFactory.getEventSource( EventSourceFactory.NATIVE_LOCAL_NOTIFICATION_EVENT_SOURCE_NAME); evtSource.addListener(new NativeLocalNotificationListener());
詳細は、Oracle Mobile Application Framework Java APIリファレンスを参照してください。
表24-2 に、ローカル通知オプションをリストし、各オプションに対する特定の値の設定と不適切な設定がMAFアプリケーションの通知動作に与える影響を説明します。
|
表24-2 ローカル通知オプション
|
アプリケーション・バッジの概念はありません。設定は無視されます。
アプリケーション・バッジの概念はありません。設定は無視されます。
バイブレーションは制御できません。設定は無視されます。ただし、通知の受信時にデフォルトのシステム・サウンドを再生することを指定した場合、また、エンド・ユーザーがモバイル・デバイスの「着信時のバイブレーション」設定を有効にした場合、デバイスは通知の受信時にバイブレーションも適用します。
バイブレーションは制御できません。設定は無視されます。ただし、通知の受信時にデフォルトのシステム・サウンドを再生することを指定した場合、また、エンド・ユーザーがモバイル・デバイスの「着信時のバイブレーション」設定を有効にした場合、デバイスは通知の受信時にバイブレーションも適用します。