【ios】Local Notificationとremote Notification(APNs)概念軽くまとめ
最初に
プロジェクトでプッシュ通知の開発を担当することになりました。それで、iosのNotificationを調査しました。調査中にNotificationのためには、最初にアップル開発者を登録したり色んな事前作業が必要なようで、あれこれする途中で、今している事前作業はremote Notification機能を開発することで、私が開発したい機能はアプリから通知を送るLocal Notificationだということを知りました。。。
そこで簡単に二つの通知の違いをまとめたいと思いました。
Local Notification
プッシュ通知だと思えばいいです。
アプリ内部で作った特定なメッセージを伝える通知であり、目的はユーザーの関心を引くことです。
通知を詳しくみたり、アプリアイコンにバッジを適用することができます。
Local Notification 構成
UNNotification Request
UNNotification Requestを作成して通知要請します。
1.UNNotificationCenterに追加
2.Requestを保管
3.Requestに定義された瞬間にTriggerする。
UNNotificationRequest オブジェクトを生成するための要素
-
identifier
-
UNMutable Notification Content
通知に示す内容 -
UNCalendarNotificationTrigger / UNTimeNotificationTrigger / UNLocationNotificationTrigger
(どのような基準で発生するのか- Local Notification には上記の3つの条件が存在する。)
Remote Notification
一般的に受け取るほとんどの通知は、決まった時間に同じ内容で伝えられるLocal Notificationではなく、突然発生する通知です。このような時間が決めてない、突然、サーバーから送信された通知メッセージのことがRemote Notificationです。
Remote Notification 転送方式
Local Notificationは、単に機器内で通知設定、管理、送信まで可能であれば、Remote Notificationは、Providerにリモート通知を送信する独自のサーバーが必要です。 APNsという過程も経なければならないです。
APNs
Apple Push Notification Serviceの略語でRemote Notificationを使用する際に必ず経なければならないことで、サーバーから直接機器に通知を送らず、この段階を経なければならないです。
APNsには保存後に伝達機能を遂行するQOSコンポーネントが含まれています。
APNsが通知を試みて通知を受け取る対象機器がオフラインの場合には、APNsには一定時間の間通知を保存し、機器がオンライン状態に転換されれば通知します。
また、APNsは機器やアプリ別に最新の通知を保存します。機器がオフラインの場合、該当装置を対象とする通知を送れば、以前に持っていた通知要請を削除し、最近の通知だけを保存します。
各アプリサービスのサーバーから送る各種通知を最新状態で一つずつ保存し、機器が長期間オフライン状態を維持するようになれば、保存されたすべての通知を削除します。
すなわち、APNsは各機器の状態を確認して状態に応じて通知を保存して送り、最新の通知状態を管理するなどの管理センターの役割をします。
また、APNsはセキュリティを管理してくれます。
ネットワークに送信するデータなので、セキュリティ問題が発生する可能性があります。
特定のユーザーにのみ通知される情報を第三者によって奪取されることができ、サーバーが意図しないメッセージに変更して通知することができます。
APNsは、独自のセキュリティアーキテクチャを通じて通知を安全に制御します。
このようにセキュリティレベルを維持するために2つの信頼レベルConnectiontrustとDevice tokenを使います。
Connectiontrust
Connectiontrust はサーバーとAPNsの間、APNsと機器の間で動作します。
サーバーとAPNs間の信頼はアップルと契約を結んでいる会社から承認されたサーバーのみAPNsと連結してpush通知ができるようにする連結信頼です。
すなわち、サーバーはAPNsコネクションtrustがあるか確認しなければならないですが、この方法にはtoken-based(有効な認証鍵利用)、cerificate-based(SSL認証書利用)の2つの方法がある。
APNsと装置間の信頼は承認された機器のみAPNsに連結して通知を受けられるようにすることです。
Device tokentrust
Device tokentrustは各通知でend-to-endとして動作します。
つまり、通知が正しいサーバーとデバイスの間でのみルーティングされるようにします。 アップルが特定装置に特定アプリに割り当てた固有識別子を含むNSデータインスタンスですが、このトークンを第三者が奪取しても内容が理解できず、ただAPNsだけdeviceトークンの内容を解読して読むことができます。
したがって、各アプリは通知を利用するためにAPNsに登録することになり、この時に固有のdeviceトークンを持つことになります。
その後、当該サーバーにdeviceトークンを伝達し、providerは連結された機器を対象とするプッシュ通知要請の中にdeviceトークンを含めて伝達しなければならないです。このdeviceトークンを通じてpush通知が該当device組み合わせにのみ伝えられるようにします。
deviceトークは機器やアプリの状態が変更(iOSアップデート、アプリの新たなインストール、復元など)される際、このトークンを新たに発行し、常に固有の状態になるようにします。
Discussion