初期化処理と受信処理の実装

モバイルアプリから APNs を使用するには、iOS のフレームワークが提供している API を使用して初期化処理と受信ハンドラーを実装します。

基本的な実装方法は、iOS でのプッシュ通知の実装方法に基づきます。情報の詳細は iOS のドキュメントや Web 上の一般的な技術情報を参考にしてください。

プッシュ通知を受け取るために必要な実装は以下のとおりです。

  • 初期化処理

    モバイルアプリの起動後に、APNs の初期化処理 と、Kii Cloud の デバイスのインストール処理 の 2 つの処理が必要です。チュートリアルでプッシュ通知を導入した場合、これらは実装済みですが、アクション付きプッシュ通知を利用する場合や、デバイスのインストール処理の詳細を知りたい場合はリンク先の情報を参照してください。

    APNs の初期化処理で示すサンプルコードでは、iOS のバージョンに応じた 2 通りの初期化処理を実装しています。iOS 10 以降では、UNUserNotificationCenter クラスを使って初期化します。iOS 8 と iOS 9 では、UIUserNotificationSettings クラスを使って初期化します。初期化処理で使用した API によって、下記で説明するハンドラーの呼び出しが一部変わります。

  • プッシュ通知の受信ハンドラー

    モバイルアプリがフォアグラウンドまたはバックグラウンドで動作している状態で、プッシュ通知を直接受け取ったときに呼び出されるメソッドです。

    サイレント通知 を実現したい場合にも、このハンドラーを用意します。

  • ユーザーアクションのハンドラー

    通知アクションを受け取るためのハンドラーです。iOS 10 以降では、通知アクションだけでなく、通知センター経由で操作されるプッシュメッセージ全般をこのハンドラーで受け取ります。

実装するメソッドと、サポートされる iOS のバージョンの関係は以下の表のとおりです。本ガイドのサンプルコードは、iOS 8 以降を動作環境とできるよう、各バージョンに向けた実装を用意しています。

解説ページ API iOS 8/9 iOS 10 以降 説明
プッシュ通知の初期化 UNUserNotificationCenter クラスを使った初期化 iOS 10 以降でのプッシュ通知の初期化方法です。
UIUserNotificationSettings クラスを使った初期化 非推奨 iOS 8 と iOS 9 で使用するプッシュ通知の初期化方法です。iOS 10 以前の環境をサポートする場合に実装します。
プッシュ通知の受信ハンドラー application(_:didReceiveRemoteNotification:
fetchCompletionHandler:)
プッシュ通知の受信ハンドラーです。iOS のバージョンを問わずに使用できます。
application(_:didReceiveRemoteNotification:) 非推奨 旧世代の受信ハンドラーです。上記の fetchCompletionHandler: 付きのメソッドを実装すれば、このメソッドは不要です。
ユーザーアクションのハンドラー userNotificationCenter(_:didReceive:
withCompletionHandler:)
UNUserNotificationCenter を使って初期化した場合、通知センター経由でプッシュ通知を受け取ると呼び出されるハンドラーです。
application(_:handleActionWithIdentifier:
forRemoteNotification:withResponseInfo:
completionHandler:)
非推奨 UIUserNotificationSettings を使って初期化した場合、アクション付き通知を受け取ると呼び出されるハンドラーです。iOS 10 以前の環境をサポートする場合に実装します。

これらのハンドラーが呼び出されるタイミングは、状況によって変わります。APNs のペイロードやユーザーの操作によっては、メソッドが 2 回呼び出されたり、1 回も呼び出されなかったりする場合があります。実際にモバイルアプリを作成して試した結果を 受信メソッドの組み合わせ に示しています。実装やテストの参考にしてください。

実際のプログラムでは、プッシュ通知の受信ハンドラーとユーザーアクションのハンドラーから共通のメソッドを呼び出し、そのメソッドで必要な処理を記述するなどして実装を効率化できます。この際、使用するプッシュメッセージのパラメーターによっては、2 重処理を回避するような工夫が必要になることもあります。