- 「プッシュ通知」は、サーバーから新しい情報が発信されるとほぼリアルタイムでデバイスに届く仕組みです。
- モバイル端末は、プッシュ通知サービスと常時接続しているため、サーバーからの通知をすぐに受信できます。
- スマートフォンは、アプリをインストールした際に発行されるデバイストークンを使って、プッシュ通知サービスを介して通知を受け取ります。
YouTube動画でも話しています。
1. プッシュ通知は一定間隔で問い合わせているわけではない
プッシュ通知は、スマートフォンアプリで使用される方式で、従来のメール受信などに比べて「リアルタイム性」が高い仕組みです。
つまり、送信されたメッセージがすぐに通知されます。
スマートフォンのメッセージアプリと従来のメール受信には大きな違いがあります。
それが、「プッシュ通知」と「ポーリング」。
- 従来のメールは、一定の間隔でメールサーバーに問い合わせを行い(ポーリング)、新着メールがあればダウンロードします。
クライアント側が問い合わせを行ってはじめてメールが届くので、送受信にある程度の遅延が生じました。 - 一方、「プッシュ通知」は、サーバーから新しい情報が発信されるとほぼリアルタイムでデバイスに届きます。
これは、サーバー側からデバイスへ情報を送信する方式だからです。
2. プッシュ通知サービスに常時接続している
モバイル端末がサーバーからの通知に即座に気づけるのは、「プッシュ通知サービス」と常時接続しているからです。
iOS と Android には、それぞれ独自のプッシュ通知サービスがあります。
- iOS デバイスは APNs
(Apple Push Notification Service)、 - Android デバイスは FCM
(Firebase Cloud Messaging)など、
この接続はシステムレベル(OS)で管理されていて、アプリが起動していない状態でも維持されます。
FCMは、以前は「Google Cloud Messaging」という名前でした1。
もともとFirebaseは独立したサービスでしたが、2014年10月にGoogleに買収されます。
その後、Googleの既存サービスは Firebase プラットフォームに統合され、2016年に GCM から FCM に置き換えられました。
モバイルデバイスはバッテリー容量の制約があり、常にネットワークに接続し続けることのは大変です。
そこで、プッシュ通知サービスとの通信には、低レベルのネットワークプロトコルが使用され、省電力状態でも効率的に動作するように設計されています。
「キープ アライブ パケット」というごく小さなデータの送受信で、接続を維持します。
- iOSではTCP/IP
- AndroidではXMPP
画面がオンだったり通信環境がよいと、かなり頻繁に交信しています。
機種にもよりますが、最悪の状態(画面オフで通信環境も悪い)でも15分〜30分ほどの間隔になるようになっています。
SMSの通信と同じような仕組みになっていますね。
2-1. インストール時にデバイストークン(宛先)が発行される
どうやって、通知の宛先を識別するの?
スマートフォンは、アプリをインストールしたときに、「アプリ固有の宛先番号(デバイストークン)」を発行してもらいます。
アプリは通知をこのデバイストークンに向けて送信し、プッシュ通知サービスが仲介します。
スマートフォンは通知を受信すると、
- アプリが起動していない状態だと
OSの通知欄に表示されます。 - アプリが起動している場合は、
OSから直接アプリへ通知が渡されます。
もし、送信先のスマートフォンがオフラインだった場合にはプッシュ通知サービスに保留して、再接続時に通知し直します。
つまり、スマートフォンがオフラインだったり、省電力モードになっていたりする場合は、通知の受信が遅れたり、受信できなかったりする可能性があります。