ヘッダーをスキップ

Oracle® Enterprise Pack for Eclipse Oracle Mobile Application Framework (OEPE Edition)でのモバイル・アプリケーションの開発 リリース2.0.1 E57593-01 |
| 目次

前 | 次 |

# 17 プッシュ通知の有効化

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

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

- 第17.1項「プッシュ通知の概要」

- 第17.2項「モバイル・アプリケーションに対するプッシュ通知の有効化」

- 第17.3項「プッシュ通知ペイロードについて」

## 17.1 プッシュ通知の概要

プッシュ通知は、サーバーなどの外部ソースからモバイル・デバイス上のアプリケーションに送信される通知です。これらは、アプリケーションの状態とユーザー設定に応じて、アラート・メッセージやバナーとして表示されます。図17-1は、iOSデバイスにおけるプッシュ通知アラートを示しています。

図17-1 プッシュ通知

通知を受信したユーザーは、アプリケーションを起動するか、その通知を無視できます。この場合、アプリケーションはアクティブ化されません。通知のアラート・メッセージとともに、短く特徴的な音が鳴る場合もあります。

### 17.1.1 プッシュ通知の動作

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

### 17.1.2 アプリケーションの状態に応じたモバイル・アプリケーションによる通知の表示

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

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

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

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

## 17.2 モバイル・アプリケーションに対するプッシュ通知の有効化

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

1. MAFアプリケーション・エディタの「デバイス・アクセス」セクションで「プッシュ通知アクセス」を選択して、モバイル・アプリケーションがプッシュ通知を受信できるようにします。詳細は、第21.6.1項「デバイス機能へのアクセスを有効にする方法」を参照してください。

   注意: デフォルトでは、モバイル・アプリケーションはプッシュ通知を許可しません(また、いずれのデバイス・タイプのデバイス・アクセスも許可しません)。

2. アプリケーション・コントローラ・プロジェクトで、アプリケーション・ライフサイクル・イベント・リスナー(ALCL)・クラスを登録します。詳細は、第4.4項「モバイル・アプリケーションの基本情報の設定」および第4.8項「ライフサイクル・イベント・リスナーについて」を参照してください。

3. ALCLに`oracle.adfmf.application.PushNotificationConfig`インタフェースを実装します。このインタフェースは、プッシュ通知サービスに正常に登録するのに必要な構成を提供します。

   `PushNotificationConfig`インタフェースの`getNotificationStyle`および`getSourceAuthorizationId`メソッドをオーバーライドおよび実装します。`getNotificationStyle`メソッドを使用すると、アプリケーションが登録する通知スタイルを指定できます。`getSourceAuthorizationId`メソッドを使用すると、モバイル・アプリケーションへのメッセージの送信を許可されたアカウントの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リファレンスを参照してください。

   通知イベントを登録および受信するために、`onOpen`、`onMessage`および`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());

## 17.3 プッシュ通知ペイロードについて

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に関するドキュメントから入手できます。