Slide 1

Slide 1 text

Firebase Cloud Messagingで 通知の配信遅延とたたかってみた pco2699 firebase meetup #7 @ mercari 2018/10/19

Slide 2

Slide 2 text

自己紹介 高山和幸(たかやま かずゆき) @pco2699 ● ウェルスナビでサーバサイドエンジニア ● サブプロジェクトでcall.jpを運営/開発 ● call.jpでfirebaseにお世話になってます

Slide 3

Slide 3 text

会社紹介 ● ウェルスナビ

Slide 4

Slide 4 text

今回お話するのはこちらの方です

Slide 5

Slide 5 text

今回お話すること ● call.jpのサービス概要 ● call.jpでfirebaseはどのように使われているか ● Firebase Cloud Messagingの配信遅延の課題・たたかい 今回お話しないこと ● Firebase Analyticsなど

Slide 6

Slide 6 text

What is call.jp ● スマホで人を呼び出せるサービスです

Slide 7

Slide 7 text

利用シーン1: カフェ

Slide 8

Slide 8 text

利用シーン1: カフェ

Slide 9

Slide 9 text

利用シーン1: カフェ

Slide 10

Slide 10 text

利用シーン1: カフェ call

Slide 11

Slide 11 text

利用シーン1: カフェ call 高田馬場 10℃ Cafeにて 試験運用中

Slide 12

Slide 12 text

利用シーン2: プログラミングスクール/勉強会

Slide 13

Slide 13 text

利用シーン2: プログラミングスクール/勉強会

Slide 14

Slide 14 text

利用シーン2: プログラミングスクール/勉強会 call

Slide 15

Slide 15 text

利用シーン2: プログラミングスクール/勉強会 call プログラミングスクール ジーズアカデミーにて試験運用中

Slide 16

Slide 16 text

call.jpはfirebaseで主要な機能を作成しています

Slide 17

Slide 17 text

call.jpはfirebaseで主要な機能を作成しています 呼出履歴の管理

Slide 18

Slide 18 text

call.jpはfirebaseで主要な機能を作成しています 呼出通知送出

Slide 19

Slide 19 text

運用中にこんな声が 呼び出してから アプリに通知にいくまで めっちゃ遅いときがある! 30秒くらい! 開発の相方 (チューターもやってる)

Slide 20

Slide 20 text

せっかくなのでFirebase Cloud Messagingの 配信遅延をいろんなパラメータで計測してみた

Slide 21

Slide 21 text

計測前提 ● Cloud Functionsからテスト用のエンドポイントを叩いて 配信がされるまでの時間を測定 ● iOS 1台 ● WiFi ● Background ※Apple Push Notification Server APNs(※) 時間を計測(5回計測)

Slide 22

Slide 22 text

FCMのメッセージ配信方法について 配信方法 内容 端末トークン 端末に紐づくトークンを指定して配信する方式 端末グループ 端末のグループをAPIにて作成して配信する方式 最大20台まで端末グループに登録できる topic topicと呼ばれるグループを各端末が Subscribeし Subscribeした端末すべてに配信を行う

Slide 23

Slide 23 text

FCMのメッセージ配信方法について 配信方法 最遅値 1回目 2回目 3回目 4回目 5回目 端末トークン 1.56 1.56 1.38 1.30 1.24 1.42 端末グループ topic 1.60 1.50 1.43 1.53 1.56 1.60 ● 配信方法による遅延の有意差はほぼなし

Slide 24

Slide 24 text

メッセージタイプ 内容 メッセージ例 通知メッセージ Android/iPhone関係なく FCMによって通知が表示される { "message":{ "token":"bk3RNwTe3H0:CI2k...", "notification":{ "title":"Portugal vs. Denmark", "body":"great match!" } } } データメッセージ アプリでデータ処理して表示する OS固有のメッセージも送出できる 前述のtopicによる配信では 利用できない -> 今回はiOS独自ヘッダで検証 { "message":{ "apns": { "payload": { "aps": { "alert": { "title": "Portugal vs. Denmark", }, // 一部省略 } FCMのメッセージタイプについて

Slide 25

Slide 25 text

FCMのメッセージ配信方法について メッセージタイプ 最遅値 1回目 2回目 3回目 4回目 5回目 通知メッセージ 1.56 1.56 1.38 1.30 1.24 1.42 データメッセージ 1.33 1.22 1.33 1.18 1.14 1.06 ● データメッセージの方が少々早い?

Slide 26

Slide 26 text

Cloud Functionsのリージョン ● Cloud Functionsのリージョンはデフォルトだとus-central ● 実は東京リージョンが使える exports.testPushNotification = functions.https.onRequest((req, res) => { exports.testPushNotification = functions.region(”asia-northeast1”) .https.onRequest((req, res) => {

Slide 27

Slide 27 text

リージョンでの比較 リージョン 最遅値 1回目 2回目 3回目 4回目 5回目 us 2.06 2.02 2.06 1.25 1.73 1.92 asia 2.28 2.28 2.00 1.32 1.96 1.29 ● リージョン間でもほぼ遅延は変わらず。むしろ東京遅い。

Slide 28

Slide 28 text

その他の観測事項 ● しばらく間を空けてテストを行うと 7秒, 8秒程度の遅延がある -> Cloud Functionsの立ち上げに時間がかかってる?

Slide 29

Slide 29 text

結論 ● 1対1などの少ない端末の状況下では FCMの配信方法・メッセージタイプ・firebaseのリージョンは 配信遅延にほぼ影響しない 所感 ● FCMのパラメータよりも 端末の状態、ネットワークの状態が大きい? ● むしろ日本 -> アメリカ -> 日本で1秒で 通知が来るのですごいと思うことにした

Slide 30

Slide 30 text

今後 試そうと思っているパラメータ ● 端末の違い ○ flutter vs Native ○ iOS vs Android ● Firebase Realtime Database周り ○ リージョン ○ Cloud Firestore ● その他パラメータ ○ APNsのtime-to-live パラメータ ○ Android独自のヘッダパラメータ

Slide 31

Slide 31 text

提携先・試験導入先を絶賛募集中です! FCM・通知に詳しい方もアドバイスいただけると幸せです。