ぴょんぴょんブログ

Push通知の仕組みざっくり

はじめに

Push通知のざっくりした仕組みを解説し、便利なOSS/サービスを紹介します。 具体的な設定方法等は説明しないので各種公式ドキュメントなどを見ていただければと思います。

Push通知とは

Push通知とはAndroidとかiOSで上の方に出てくる通知のことです。

↑こういうやつ

今回はこれがどのように送られてくるのか、また通知システムを作る際の便利なOSSやサービスを紹介したいと思います。

Push通知の種類

アプリ内で定義した条件によって通知されるものをローカル通知、外部のサーバから届くのがリモート通知と呼び分けることが多いようです。

ローカル通知は各アプリで設定するものとなっています。 今回はバックエンドの話がメインなのでローカル通知については以上です。

リモート通知は外部のサーバを使って行います。

FCM/APNs

リモート通知を送る場合、端末に直接通知を飛ばすのではなく、GoogleAppleの通知サービスに依頼をして通知を飛ばしてもらいます。 Googleの場合はFCM (Firebase Cloud Messaging) 、Appleの場合は APNs (Apple Push Notification service) があります。

端末とアプリに固有のデバイストークンをFCM/APNsに登録することでその端末のそのアプリに対してPush通知を送ることができるようになります。 Push通知を受け取れるようにすることを購読といいます。 通知はgoogleapisを叩けば送れます。 https://firebase.google.com/docs/reference/fcm/rest/v1/projects.messages/send

ざっくり仕組み

図の①だと毎回デバイストークンを登録してそうですが、デバイストークンの登録は解除しない限り再度登録する必要はありません。 アプリがアンインストールされるとデバイストークンはInactiveになり、通知は送れません。

ちなみにFCMはAPNsを経由してiOSに通知を送ったり、Webブラウザに通知を送ることもできます。 APNsいる?という気がしますが、速度的にはAPNsに直接送ったほうが通知が届くのが速そうな気がします(知らんけど)。 ↑これについては近々検証してみたいです。

通知管理サーバ

個人用のアプリだと自分の端末のデバイストークンだけ登録しておいて通知を飛ばすだけのサーバを用意するだけなのでかんたんです。 サービス・配信の規模が大きくなると色々と大変なことが増えてきます。

  • バイストークンの管理
  • 複数への端末への一斉送信
  • 配信の成功率の管理
  • 配信遅延の管理
  • 配信失敗時の再送処理

紹介するOSS/サービスは使ったことがあるわけではないですが、こういうのがあるよ〜というのを紹介できればと思います。実際に使うことがあれば追記していきたいと思います。

Country/country-server

github.com アプリの解析ツールで機能の一つにPush通知の解析などもできるようです。

mercari/gaurun

github.com メルカリの一斉配信ツールです。 通知の解析ツールなどではなく、あくまで高速に一斉配信を行うツールのようです。

Amazon SNS (Simple Notification Service)

aws.amazon.com AWSでも通知管理のサービスがあります。 もちろんAWSの他のサービスと連携できるので、かなり自由度の高い運用ができそうです。

あとがき

年末年始にもうちょっと詳しく勉強してFCMとAPNsのそれぞれのメリデメなども把握できるといいなぁと思っています。 あと通知管理OSSなども実際に使ってそれぞれの機能を正確に把握したい…… 内容が間違ってたら追記しようと思います。

最後になりますが、これはあくあたん工房アドベントカレンダー2022の11日目の記事です! ですが本日は25日。。。

間に合わなかった原因は主に「魔法使いの夜」です!
皆さんぜひやってください!

というあとがきを期日の翌日ぐらいに下書きで書いてたのですが、それを更に大幅に遅れてしまったのはただただ書くのをサボってたからです。 関係者の皆様申し訳ありません。

ですが、なんとかクリスマスが終わるまでに間に合わせることができたのでよかったです。 記事を書き終えたのでこれからFGO2部7章をしようと思います。 他の日の記事も面白いので、ぜひ読んでみてください!