こんにちは、せこしょーです。
今日は前回記事のメールはなぜ届くのか?に続いてLINEやメッセージングアプリがどのような仕組みで届くのかについて説明します。分かりやすく解説していますのでぜひ見てください。
まずは大枠を掴もう
では実際にLINEでメッセージが届く仕組みを見てみましょう。
- LINEで友達にメッセージを送ると、LINEのサーバーに対して発信元、送信先、メッセージなどのデータが送信されます。
- データを受け取ったLINEのサーバーは通知を送るサーバーに送信先端末への通知を依頼します。
- 通知を送るサーバーは送信先端末に通知を送ります。
返信の場合も同様です。
このようにLINEのサーバーと通知を送るサーバーのおかげで私達はメッセージを受信することができます。
通知を送るサーバーはLINE社とは関係ない!?
実は、通知を送るサーバーはLINE社のサーバーではありません。誰が通知を送ってくれるのかと言うとiphoneならiphoneを開発したAppleのサーバー、アンドロイドならアンドロイドを開発したGoogleのサーバーがメッセージ受信者の端末に通知する役割を担っています。具体的には、iphoneなら「APNSサーバー」が通知を送り、アンドロイドなら「FCMサーバー」が相手端末に通知を送ります。
なので先ほどの通知を送るサーバーをより正確に言うと以下になります。
田中さんはiphoneを利用しているのでAPNSサーバーから、中村さんはアンドロイドを利用しているのでFCMサーバーから通知が来るようになっています。
通知の許可の流れ
LINEに限らずですが、アプリをインストールしたときによく「通知を許可しますか?」と聞かれたりしますよね。LINEアプリの通知を許可したとき裏側では次のような流れでLINEのサーバーに通知用の鍵(=デバイストークン)が渡されます。
- LINEアプリから依頼を受けたスマホ端末が通知を管理しているサーバー(APNS/FCMサーバー)に対して、通知用の鍵(デバイストークン)をくれと要求します。
- 要求を受けたサーバーはLINEアプリにデバイストークンを送ります。
- 受け取ったLINEアプリはデバイストークンをLINEサーバーに送ります。
デバイストークンを受け取ったLINEサーバーは通知先のLINEユーザーと紐付けられるように保存しておきます。
通知を許可するかどうかのウィンドウをiphoneやアンドロイド(iOSやアンドロイドOS)が出してくれて、こっちが許可しないとアプリの通知を許さない仕組みになっています。
許可なく通知できるようになっていたら、悪いアプリが出てきてスパム送りまくるよね
通知の許可後(最初の図)
通知を許可した後、もう一度最初の図を見てみましょう。田中さんから中村さんにメッセージを送る場合、LINEサーバーに送られたデータの中にはメッセージの他に送信先である中村さんのユーザーIDが含まれています。LINEサーバーはこのユーザーIDを利用して、保存していたデバイストークンを取得します。そしてLINEサーバーは通知を送るサーバー(APNS/FCMサーバー)に対して「このデバイストークンの人にメッセージを送って」と頼むのです。通知を送るサーバーはデバイストークンを照合することで指定された通知先にLINEメッセージを通知します。
誰のスマホに通知するか特定しないといけないもんね
端末トークン = デバイストークン
リアルタイムでのやり取りはどのように実現しているのか?
メッセージングアプリではリアルタイムでのやり取りの実現が非常に大事です。リアルタイムの双方向通信には WebSocket という技術が利用されたりしますが、LINEは独自開発した技術「Streaming Push」を用いているようです。1LINE DEVELOPER DAY 2021より
LINEは起動したり、最初のメッセージを送ったりするなどどこかのタイミングでまず最初にLINEサーバーに対して HTTP リクエストというものが送られます。このリクエストの中にはリアルタイム性の高い「Streaming Push」に切り替える要求が含まれているのでLINEサーバーがそれを受け入れます。これによってLINEアプリとLINEサーバー間において、HTTPよりもリアルタイム性の高い「Streaming Push」での双方向のメッセージのやり取りを実現しています。
まとめ
今回はLINEのメッセージが届く仕組みについてでした。使っている技術要素の違いはあれど、Whats Appやfacebook Messengerなど他のメッセージングアプリも今回と似たような仕組みでメッセージが届くようになっているかと思います。ただ、Telegramのシークレットチャット機能ではサーバーを介さず送信者と受信者の端末間でのメッセージのやり取りができるます(エンドツーエンド技術)。興味のある人は調べてみてください、ではまた!
コメント