プッシュ通知はどうやって自分のスマホに届くのか — プッシュトークンと配信の流れ
アプリを開いてもいないのに、「注文された商品が発送されました」といった通知が画面に出ます。大勢の人の中で正確に自分のスマホだけに、しかもアプリが閉じているときにも、どうやって届くのでしょうか。一方で通知をオフにしておくと、同じアプリなのに静かなままです。
今回の記事では、プッシュ通知がどうやって自分のスマホまで届くのか、その配信の流れを、コードなしで解きほぐしていきます。
アプリが、自分のスマホに直接送るのではありません #
まず、よくある誤解から解きます。通知は、サービスが自分のスマホへまっすぐ撃ち込むものではありません。サービスは、自分のスマホがいまオンか、インターネットにつながっているか、どこにあるかさえ知りません。スマホの住所を直接持ってもいません。
だから通知は、途中で橋を一つ渡ります。iPhone は Apple、Android は Google が運営するプッシュサーバーが、その橋です。スマホはふだんからこのプッシュサーバーと細い接続を保っていて、通知はつねにこのサーバーを通してスマホに届けられます。
プッシュトークンは、自分のスマホの住所です #
では、その多くのスマホの中から、どうやって自分のスマホを選び出すのでしょうか。ここでプッシュトークンが出てきます。アプリをインストールして通知を許可すると、スマホは「このスマホのこのアプリ」を指す固有のトークンを発行されます。一種の配送先の住所というわけです。
アプリはこのトークンをサービスのサーバーに送って保存しておきます。あとで通知を送るとき、サービスは「このトークンにこのメッセージを届けてほしい」とプッシュサーバーに頼み、プッシュサーバーがそのトークンに当たるスマホを見つけて通知を降ろします。トークンが正確な住所の役を果たすので、通知が見当違いの人に行きません。
通知が届くまでの全体の流れ #
では全体の流れをつなげてみます。サービスが通知を送ると決めると、保存しておいたトークンを指定して、Apple や Google のプッシュサーバーに要望を送ります。先に扱った API が、まさにこの要望をやり取りする通り道です。プッシュサーバーはそのトークンに当たるスマホを見つけて通知を届け、スマホは受け取った内容を画面に出します。
この一連の過程は、ふつう数秒で終わります。アプリが閉じていても通知が来るのは、アプリではなく、スマホとプッシュサーバーのあいだの接続が通知を受け取ってくれるからです。
権限とトークンは、変わることがあります #
通知が届かないのには理由があります。ユーザーが通知の権限を最初から断ったか、あとからオフにした場合です。権限がないと、トークンそのものが発行されないか、発行されても配信が止められます。
トークンも永遠ではありません。アプリを消して入れ直したり、システムの都合でトークンが新しく発行されたりすると、古いトークンは無効になります。サービスが無効になった古いトークンに送りつづけると、通知は届きません。だからよくできたサービスは、トークンをこまめに更新し、もう使えないトークンを片づけます。
だから、プッシュを使うとき #
プッシュ通知を企画するときは、いくつかを一緒に見る必要があります。まず、権限をいつ、なぜ要求するかです。アプリを開いた途端にいきなり許可を尋ねると、断られやすいです。通知がなぜ役立つのかをユーザーが納得したあとに尋ねるほうがよいです。
通知の量も大切です。広告のような通知を頻繁に送りすぎると、ユーザーは通知をオフにしたり、アプリを消したりします。いちどオフになった権限は、戻すのが難しいです。だから本当に大切な通知は、プッシュ一つだけに頼らず、メールのような別の経路も一緒に置いておくほうが安全です。
なぜ非開発者が知っておくと仕事が楽になるのか #
- 届かない理由がわかります。 通知が一部のユーザーだけに届かないとき、権限やトークンの問題かもしれないと知って、点検の方向を立てられます。
- 権限の要求を設計できます。 権限はいちど断られると戻しにくいと知っていれば、いつどう尋ねるかを慎重に決められます。
- 通知のポリシーを立てられます。 過剰な通知がブロックと削除を招くと知っていれば、送る通知と控える通知を見分けて、信頼を守れます。
まとめ #
今日は、プッシュ通知がアプリから直接来るのではなく、Apple と Google のプッシュサーバーを経て来ること、プッシュトークンが自分のスマホを指す住所の役を果たすこと、権限とトークンの状態によって届くかどうかが分かれること、を見てきました。サービスがスマホに直接たどり着けないので、仲介者を経る、という点が肝心です。
通知がアプリとどう絡むのか気になればアプリとウェブは何が違うのか — ネイティブ、ウェブアプリ、そして審査を、サービスがプッシュサーバーに要望を送る通り道である API が気になればAPI とは何かを一緒に読んでみることをおすすめします。