Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
Firebase Cloud Messaging のベストプラクティス を、探している 2020/02/01 PWA Night Conference 吉次 洋毅
Slide 2
Slide 2 text
誰? ● 吉次洋毅(ヨシツグヒロキ) ● 経歴 ○ 某レストラン検索サイトでバックエンドエンジニアなど ○ 某HR会社でエンジニアをしつつ ○ フリーランスで受託開発&他社さんの開発やプロジェクトマネジメントのお手伝い ● 趣味 ○ 一人旅 & 写真 & スーパー銭湯 ○ スマブラ(VIPボーダー周辺をウロウロ・ゼロサムユーザ) ○ ポケモン(約20年ぶりにはじめました) @gyarasu
Slide 3
Slide 3 text
使ってる??
Slide 4
Slide 4 text
FCMによるWeb Pushが届くまで ① FCMからトークンを取得 ④ プッシュ送信を受信 ②トークンをサーバに送信 ③ FCMに処理を投げる
Slide 5
Slide 5 text
FCMによるWeb Pushが届くまで ① FCMからトークンを取得 ④ プッシュ送信を受信 ②トークンをサーバに送信 ③ FCMに処理を投げる 送信方法がいくつかある
Slide 6
Slide 6 text
複数のデバイスに送信する方法は2つ https://firebase.google.com/docs/cloud-messaging/js/send-multiple
Slide 7
Slide 7 text
よくみたら色々あった Node.js Admin SDKリファレンス: https://firebase.google.com/docs/reference/admin/node/admin.messaging
Slide 8
Slide 8 text
FCMでのPush送信方法いろいろ ● CURL / send(Admin SDK) ○ 単一のトークンを指定して送信 ● マルチキャスト(Admin SDK) ○ 複数のトークンを指定し送信 ● トピックメッセージング ○ 特定のトピックにオプトインした複数のデバイスにメッセージを送信 ● デバイスグループメッセージング ○ 定義したグループに属する複数のデバイスにメッセージを送信
Slide 9
Slide 9 text
FCMによる送信方法Decision Tree(暫定)
Slide 10
Slide 10 text
FCMによる送信方法Decision Tree(暫定) やってみたけど、 ちょっと苦労した
Slide 11
Slide 11 text
トピックメッセージングのハマりポイント ● トピック購読管理の難しさ ● ユーザ単位での送信状態の管理の難しさ デバイスグループメッセージングのグ ループ管理も同様の課題あり
Slide 12
Slide 12 text
トピックメッセージングのハマりポイント ● トピック購読管理の難しさ ● ユーザ単位での送信状態の管理の難しさ デバイスグループメッセージングのグ ループ管理も同様の課題あり
Slide 13
Slide 13 text
トピック管理の難しさ
Slide 14
Slide 14 text
トピックの購読状態の管理 ① FCMからトークンを取得 ④ プッシュ送信を受信 ②トークンをサーバに送信 ③ FCMに処理を投げる
Slide 15
Slide 15 text
トピックの購読・購読解除の流れ topic, tokenの 組み合わせを保存 ・購読(subscribe) ・購読解除(unsubscribe) ・送信リクエスト メッセージ配信(publish) FCM FaaSなど データベース
Slide 16
Slide 16 text
FCMとDBの状態の整合性 topic, tokenの 組み合わせを保存 ・購読リクエスト ・購読解除リクエスト ・送信リクエスト ・購読(subscribe) ・購読解除(unsubscribe) ・メッセージ配信(publish) FCM FaaSなど データベース 何らかの原因で データが消失 FCMから購読状態を取得す ることはできない
Slide 17
Slide 17 text
DB上のデータとFCM上での実際の 購読状態の整合性が合わなくなる
Slide 18
Slide 18 text
DB上のデータとFCM上での実際の 購読状態の整合性が合わなくなる ・DB上では購読してないのに Pushが届く ・DBの上では購読状態なの にPushが届かない
Slide 19
Slide 19 text
DBのデータ更新とFCMの購読・非購読は Atomicな処理にする
Slide 20
Slide 20 text
ユーザ単位での 送信状態の管理
Slide 21
Slide 21 text
通知設定の単位と細分化されたトピック 営業 事務 技術 設定 : 購読トピック = 1 : n
Slide 22
Slide 22 text
細分化トピックが引き起こす通知の嵐 営業 事務 技術 トピックメッセージングは、あく までも「トピック」に対して通知 を送る
Slide 23
Slide 23 text
設定とトピックが1 : 1になっていない場合 ユーザにとって過多な通知になり得る
Slide 24
Slide 24 text
細かいセグメントで 送信先を制御したい場合は マルチキャストでの送信が良さそう
Slide 25
Slide 25 text
Decision Tree途中経過 ここはわかった!
Slide 26
Slide 26 text
トピックメッセージングの選択基準 ● 受信設定の単位とトピックが1:1になっている場合 ● トピックの単位が単純である場合 ○ 基本的にはコンテンツの単位が良い ○ 年齢や性別のようなユーザ属性や、行動ログ等の要素を掛け算してトピック分 割すると、条件が変動するたびに頻繁にトピックの購読・解除を行う必要があ るのであまり向かない
Slide 27
Slide 27 text
まとめ ● まずはサービスとしてのPush通知の要件・仕様をしっかり検 討してからどの方法で送るか考える(最重要) ● トピックメッセージングが向いているパターン ○ 設定と購読トピックが1:1である場合 ○ 細分化されたトピックで送信しても問題ない場合 ● 細かい条件で送信対象を抽出したり、条件が頻繁に更新され る場合はマルチキャストが良さそう ○ トピックやデバイスグループ管理をしないで済む ○ 1回の送信で500トークンという制限あり
Slide 28
Slide 28 text
※スキップしたスライドも含めてSpeaker Deckで公開します @gyarasu ありがとうございました!