Upgrade to Pro — share decks privately, control downloads, hide ads and more …

FCMを使った用途に合わせたPush通知設計 / Push notification arch...

佐藤さん
February 07, 2019

FCMを使った用途に合わせたPush通知設計 / Push notification architecture design according to the use case using FCM

DroidKaigi 2019 2019/02/07 14:00 - 14:30 Room 6

Push通知はアプリ利用者に対する何らかのイベントの発生、フォローしている人の新着情報、あるいはサービスやアプリ内機能の宣伝など多岐に渡る用途で使われています。
Push通知の開発を始めると、サーバーサイドですべての通知を制御するかアプリ側で通知をフィルタリングするか、あるいは高速に通知を配信するためにはどうすればいいかなど、様々な悩みが出てきます。
Push通知は幅広い用途に使われるため、こうすればすべて解決!という設計はなく、ケースバイケースで適した設計を考えなければいけません。

本セッションでは、Firebase Cloud Messaging(FCM)を利用して、用途にあわせた設計をアプリだけではなくサーバーサイドも含めて考察します。
まずはFCMでできることをおさらいした上で、具体的な設計の話に入ります。
また、実際の例として発表者が業務で開発しているアプリにおけるPush通知の設計も紹介します。

■ 受講対象者
FCMでできることを知りたい方やPush通知をどのように実装するか悩んでいる方を対象としています。

佐藤さん

February 07, 2019
Tweet

More Decks by 佐藤さん

Other Decks in Programming

Transcript

  1. 自己紹介 • ピクシブ株式会社 新技術プロジェクト エンジニア • 岡田 康治 / Koji

    OKADA • Twitter: @SuperSatoSan • Android / バックエンド / フロントエンド / Unity • 今日はAndroidエンジニアとして来ました 2
  2. FCMに出来ること 9 サービスサーバー アプリ FCMサーバー 2. 通知の送信をリクエストする 3. 通知データを処理する 1.

    通知対象をサーバーサイドで把握する ※: FCMサーバーとの区別のためサービスのためのAPIサーバーやバッチサーバーをまとめてサービスサーバーと呼ぶ
  3. 通知の送信をリクエストする • サービスサーバーからFCMサーバーへPush通知を送る手段の選択肢 A. HTTP v1 API B. レガシーHTTPサーバー ◦

    現在はHTTP v1 APIの利用が推奨されている C. レガシーXMPPサーバー ◦ HTTPと比べて非同期で複数の通知を連投出来るのがメリット D. FirebaseAdminSDK ◦ Node, Java, Python, Goで使える • 表示するメッセージ以外にアプリ側で処理するためのパラメータを送れる 11
  4. 既存のPush通知基盤 • 基盤がこの開発以前から存在していた • 提供する通知機能 ◦ 誰かにフォローされた ◦ 自分の作品をすき!された ◦

    etc • 一つのイベントで 一人への通知しか生じない • まずはこの設計を紹介 16 サービスサーバー アプリ FCMサーバー ?
  5. 通知の送信をリクエストする A. HTTP v1 API B. レガシーHTTPサーバー C. レガシーXMPPサーバー ◦

    各種イベント等が発生したら通知キューに通知をためる ◦ バッチサーバーで送信バッチを回して送信している ◦ 深夜帯に送らない等のフィルタリングはサービスサーバーの責務 D. FirebaseAdminSDK 19
  6. • アプリ ◦ トピックのサブスクライブ ◦ Push通知はそのまま表示 ◦ 通知を受けたときの処理 アプリ・サービスサーバーの責務分担 23

    • サービスサーバー ◦ 通知のキューイング ◦ 通知メッセージの生成 ◦ 通知のフィルタリング • アプリは通知の種類ごとに必要な特別な処理を実装するだけ • その分責務がサービスサーバーに寄せている • 大抵はサービスサーバーだけでやれば良いので考えることが少ない
  7. 開発体制は? • 専任する開発者は自分ひとり • すでに個別ユーザーにpush通知を送信する基盤は存在する • アプリ開発メンバーはpixiv Sketch LIVE自体の視聴機能に集中 •

    アプリ側の対応も必要な場合は自分で行う必要あり 31 制約 • 一人で開発完了できる仕様に留めないといけない
  8. 最終的な責務分割 • アプリ ◦ トピックのサブスクライブ ◦ Push通知はそのまま表示 ◦ 通知を受けたときの処理 42

    • サービスサーバー ◦ 通知のキューイング ◦ 通知メッセージの生成 ◦ 通知のフィルタリング 変更なし
  9. 次に改善するとしたら • フォロワー向けの通知は大量の通知が発生して遅延する • クライアントでフォロワー用トピックをサブスクライブするのが理想 • 一部だけ別のルールの設計にならないように通知機能全体を改修したい 43 • アプリ

    ◦ トピックのサブスクライブ ◦ Push通知はそのまま表示 ◦ 通知を受けたときの処理 ◦ 通知のフィルタリング • サービスサーバー ◦ 通知のキューイング ◦ 通知メッセージの生成