firebase meetup #7 @ mercari 2018/10/19
Firebase Cloud Messagingで通知の配信遅延とたたかってみたpco2699firebase meetup #7 @ mercari2018/10/19
View Slide
自己紹介高山和幸(たかやま かずゆき)@pco2699● ウェルスナビでサーバサイドエンジニア● サブプロジェクトでcall.jpを運営/開発● call.jpでfirebaseにお世話になってます
会社紹介● ウェルスナビ
今回お話するのはこちらの方です
今回お話すること● call.jpのサービス概要● call.jpでfirebaseはどのように使われているか● Firebase Cloud Messagingの配信遅延の課題・たたかい今回お話しないこと● Firebase Analyticsなど
What is call.jp● スマホで人を呼び出せるサービスです
利用シーン1: カフェ
利用シーン1: カフェcall
利用シーン1: カフェcall高田馬場 10℃ Cafeにて 試験運用中
利用シーン2: プログラミングスクール/勉強会
利用シーン2: プログラミングスクール/勉強会call
利用シーン2: プログラミングスクール/勉強会callプログラミングスクール ジーズアカデミーにて試験運用中
call.jpはfirebaseで主要な機能を作成しています
call.jpはfirebaseで主要な機能を作成しています呼出履歴の管理
call.jpはfirebaseで主要な機能を作成しています呼出通知送出
運用中にこんな声が呼び出してからアプリに通知にいくまでめっちゃ遅いときがある!30秒くらい!開発の相方(チューターもやってる)
せっかくなのでFirebase Cloud Messagingの配信遅延をいろんなパラメータで計測してみた
計測前提● Cloud Functionsからテスト用のエンドポイントを叩いて配信がされるまでの時間を測定● iOS 1台● WiFi● Background※Apple Push Notification ServerAPNs(※)時間を計測(5回計測)
FCMのメッセージ配信方法について配信方法 内容端末トークン 端末に紐づくトークンを指定して配信する方式端末グループ 端末のグループをAPIにて作成して配信する方式最大20台まで端末グループに登録できるtopic topicと呼ばれるグループを各端末が SubscribeしSubscribeした端末すべてに配信を行う
FCMのメッセージ配信方法について配信方法 最遅値 1回目 2回目 3回目 4回目 5回目端末トークン1.56 1.56 1.38 1.30 1.24 1.42端末グループtopic1.60 1.50 1.43 1.53 1.56 1.60● 配信方法による遅延の有意差はほぼなし
メッセージタイプ 内容 メッセージ例通知メッセージ 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のメッセージタイプについて
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● データメッセージの方が少々早い?
Cloud Functionsのリージョン● Cloud Functionsのリージョンはデフォルトだとus-central● 実は東京リージョンが使えるexports.testPushNotification =functions.https.onRequest((req, res) => {exports.testPushNotification =functions.region(”asia-northeast1”).https.onRequest((req, res) => {
リージョンでの比較リージョン 最遅値 1回目 2回目 3回目 4回目 5回目us2.06 2.02 2.06 1.25 1.73 1.92asia2.28 2.28 2.00 1.32 1.96 1.29● リージョン間でもほぼ遅延は変わらず。むしろ東京遅い。
その他の観測事項● しばらく間を空けてテストを行うと7秒, 8秒程度の遅延がある-> Cloud Functionsの立ち上げに時間がかかってる?
結論● 1対1などの少ない端末の状況下ではFCMの配信方法・メッセージタイプ・firebaseのリージョンは配信遅延にほぼ影響しない所感● FCMのパラメータよりも端末の状態、ネットワークの状態が大きい?● むしろ日本 -> アメリカ -> 日本で1秒で通知が来るのですごいと思うことにした
今後 試そうと思っているパラメータ● 端末の違い○ flutter vs Native○ iOS vs Android● Firebase Realtime Database周り○ リージョン○ Cloud Firestore● その他パラメータ○ APNsのtime-to-live パラメータ○ Android独自のヘッダパラメータ
提携先・試験導入先を絶賛募集中です!FCM・通知に詳しい方もアドバイスいただけると幸せです。