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

Firebase Cloud Messagingで 通知の配信遅延とたたかってみた

pco2699
October 19, 2018

Firebase Cloud Messagingで 通知の配信遅延とたたかってみた

firebase meetup #7 @ mercari
2018/10/19

pco2699

October 19, 2018
Tweet

More Decks by pco2699

Other Decks in Programming

Transcript

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

    View full-size slide

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

    View full-size slide

  3. 会社紹介
    ● ウェルスナビ

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  7. 利用シーン1: カフェ

    View full-size slide

  8. 利用シーン1: カフェ

    View full-size slide

  9. 利用シーン1: カフェ

    View full-size slide

  10. 利用シーン1: カフェ
    call

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  23. 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
    ● 配信方法による遅延の有意差はほぼなし

    View full-size slide

  24. メッセージタイプ 内容 メッセージ例
    通知メッセージ 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のメッセージタイプについて

    View full-size slide

  25. 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
    ● データメッセージの方が少々早い?

    View full-size slide

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

    View full-size slide

  27. リージョンでの比較
    リージョン 最遅値 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
    ● リージョン間でもほぼ遅延は変わらず。むしろ東京遅い。

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide