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

Firebase Cloud Messaging のベストプラクティス を、探している

gyarasu
February 01, 2020

Firebase Cloud Messaging のベストプラクティス を、探している

2020.02.01 PWA Night Conference
https://conf2020.pwanight.jp

gyarasu

February 01, 2020
Tweet

More Decks by gyarasu

Other Decks in Technology

Transcript

  1. Firebase Cloud Messaging
    のベストプラクティス
    を、探している
    2020/02/01
    PWA Night Conference
    吉次 洋毅

    View Slide

  2. 誰?
    ● 吉次洋毅(ヨシツグヒロキ)
    ● 経歴
    ○ 某レストラン検索サイトでバックエンドエンジニアなど
    ○ 某HR会社でエンジニアをしつつ
    ○ フリーランスで受託開発&他社さんの開発やプロジェクトマネジメントのお手伝い
    ● 趣味
    ○ 一人旅 & 写真 & スーパー銭湯
    ○ スマブラ(VIPボーダー周辺をウロウロ・ゼロサムユーザ)
    ○ ポケモン(約20年ぶりにはじめました)
    @gyarasu

    View Slide

  3. 使ってる??

    View Slide

  4. FCMによるWeb Pushが届くまで
    ① FCMからトークンを取得
    ④ プッシュ送信を受信
    ②トークンをサーバに送信
    ③ FCMに処理を投げる

    View Slide

  5. FCMによるWeb Pushが届くまで
    ① FCMからトークンを取得
    ④ プッシュ送信を受信
    ②トークンをサーバに送信
    ③ FCMに処理を投げる
    送信方法がいくつかある

    View Slide

  6. 複数のデバイスに送信する方法は2つ
    https://firebase.google.com/docs/cloud-messaging/js/send-multiple

    View Slide

  7. よくみたら色々あった
    Node.js Admin SDKリファレンス:
    https://firebase.google.com/docs/reference/admin/node/admin.messaging

    View Slide

  8. FCMでのPush送信方法いろいろ
    ● CURL / send(Admin SDK)
    ○ 単一のトークンを指定して送信
    ● マルチキャスト(Admin SDK)
    ○ 複数のトークンを指定し送信
    ● トピックメッセージング
    ○ 特定のトピックにオプトインした複数のデバイスにメッセージを送信
    ● デバイスグループメッセージング
    ○ 定義したグループに属する複数のデバイスにメッセージを送信

    View Slide

  9. FCMによる送信方法Decision Tree(暫定)

    View Slide

  10. FCMによる送信方法Decision Tree(暫定)
    やってみたけど、
    ちょっと苦労した

    View Slide

  11. トピックメッセージングのハマりポイント
    ● トピック購読管理の難しさ
    ● ユーザ単位での送信状態の管理の難しさ
    デバイスグループメッセージングのグ
    ループ管理も同様の課題あり

    View Slide

  12. トピックメッセージングのハマりポイント
    ● トピック購読管理の難しさ
    ● ユーザ単位での送信状態の管理の難しさ
    デバイスグループメッセージングのグ
    ループ管理も同様の課題あり

    View Slide

  13. トピック管理の難しさ

    View Slide

  14. トピックの購読状態の管理
    ① FCMからトークンを取得
    ④ プッシュ送信を受信
    ②トークンをサーバに送信
    ③ FCMに処理を投げる

    View Slide

  15. トピックの購読・購読解除の流れ
    topic, tokenの
    組み合わせを保存
    ・購読(subscribe)
    ・購読解除(unsubscribe)
    ・送信リクエスト
    メッセージ配信(publish)
    FCM FaaSなど データベース

    View Slide

  16. FCMとDBの状態の整合性
    topic, tokenの
    組み合わせを保存
    ・購読リクエスト
    ・購読解除リクエスト
    ・送信リクエスト
    ・購読(subscribe)
    ・購読解除(unsubscribe)
    ・メッセージ配信(publish)
    FCM FaaSなど データベース
    何らかの原因で
    データが消失
    FCMから購読状態を取得す
    ることはできない

    View Slide

  17. DB上のデータとFCM上での実際の
    購読状態の整合性が合わなくなる

    View Slide

  18. DB上のデータとFCM上での実際の
    購読状態の整合性が合わなくなる

    ・DB上では購読してないのに
    Pushが届く
    ・DBの上では購読状態なの
    にPushが届かない

    View Slide

  19. DBのデータ更新とFCMの購読・非購読は
    Atomicな処理にする

    View Slide

  20. ユーザ単位での
    送信状態の管理

    View Slide

  21. 通知設定の単位と細分化されたトピック
    営業
    事務
    技術
    設定 : 購読トピック = 1 : n

    View Slide

  22. 細分化トピックが引き起こす通知の嵐
    営業
    事務
    技術
    トピックメッセージングは、あく
    までも「トピック」に対して通知
    を送る

    View Slide

  23. 設定とトピックが1 : 1になっていない場合
    ユーザにとって過多な通知になり得る

    View Slide

  24. 細かいセグメントで
    送信先を制御したい場合は
    マルチキャストでの送信が良さそう

    View Slide

  25. Decision Tree途中経過
    ここはわかった!

    View Slide

  26. トピックメッセージングの選択基準
    ● 受信設定の単位とトピックが1:1になっている場合
    ● トピックの単位が単純である場合
    ○ 基本的にはコンテンツの単位が良い
    ○ 年齢や性別のようなユーザ属性や、行動ログ等の要素を掛け算してトピック分
    割すると、条件が変動するたびに頻繁にトピックの購読・解除を行う必要があ
    るのであまり向かない

    View Slide

  27. まとめ
    ● まずはサービスとしてのPush通知の要件・仕様をしっかり検
    討してからどの方法で送るか考える(最重要)
    ● トピックメッセージングが向いているパターン
    ○ 設定と購読トピックが1:1である場合
    ○ 細分化されたトピックで送信しても問題ない場合
    ● 細かい条件で送信対象を抽出したり、条件が頻繁に更新され
    る場合はマルチキャストが良さそう
    ○ トピックやデバイスグループ管理をしないで済む
    ○ 1回の送信で500トークンという制限あり

    View Slide

  28. ※スキップしたスライドも含めてSpeaker Deckで公開します
     @gyarasu
    ありがとうございました!

    View Slide