Growing your app with Firebase

0ef9d512061aa068aafd47c3e3f13ce0?s=47 Yuki Shiho
September 01, 2018

Growing your app with Firebase

# About me
- Twitter
- https://twitter.com/shihochandesu

- Github
- https://github.com/shihochan

# Links
- WEB+DB PRESS Vol.105
- https://www.amazon.co.jp/dp/477419851X

- Firebase
- https://firebase.google.com/

- Firebase Usecases
- https://firebase.google.com/use-cases/

- Tag Manager + Firebase: Getting Started
- https://developers.google.com/tag-manager

0ef9d512061aa068aafd47c3e3f13ce0?s=128

Yuki Shiho

September 01, 2018
Tweet

Transcript

  1. Yuki Shiho @shihochan Growing your app with Firebase GDG DevFest

    Tokyo 2018 in 2018/09/01
  2. About me 志甫 侑紀 / YUKI SHIHO @shihochan Software Engineer

    at AbemaTV, Inc. @shihochandesu Shibuya.apk Cat LOVER KEYAKIZAKA 46
  3. WEB+DB PRESS Vol.105 SALE NOW ON!!

  4. • ビジネス成⻑に関わるプロダクト • 代表的なプロダクトの導⼊⽅法 • 複数プロダクトの連携とユースケース 今⽇話すこと

  5. ビジネス成⻑に関わる プロダクト

  6. ビジネス成⻑に関わるプロダクト

  7. ビジネス成⻑に関わるプロダクト BETA

  8. • プラットフォーム: • アクティブユーザー向けのテキストメッセージ • アプリの主要機能の利⽤を促す • Analytics, Predictionsと統合されており、⾼ 度なターゲティング機能を提供

    • ユースケース • ショッピングアプリのセール情報、クーポン • 新しいバージョンのアプリへのアップデート In-App Messaging BETA
  9. • サポート • Android 4.4~、Xcode 9.2~ • 送信先:アプリバージョン、ユーザー、ユー ザープロパティ、Analytics情報などから指定 •

    トリガー:app_launch、on_foreground、 Analyticsのイベントなどから指定 • 送信頻度:基本的に1(n)⽇1回のみ取得 • コンバージョンイベントのタグ付が可能 In-App Messaging BETA
  10. • プラットフォーム: • Firebase向けGoogle Analytics • ユーザー獲得からアプリ使⽤に⾄るまでのユー ザー分析 • 最⼤で

    500 種類のイベントレポートを作成可能 • 収集したデータをセグメント化し、様々な他 Firebaseプロダクトで利⽤可能 Google Analytics
  11. Google Analytics プロパティ タイプ 説明 年齢 テキスト 年齢を6カテゴリに分類 アプリのバージョン テキスト

    VersionName, Bundle Version 国 テキスト 居住国 端末カテゴリ テキスト 端末のカテゴリ(タブレット等) 端末メーカー テキスト 端末のメーカー(LG等) 端末名 テキスト 端末名(Nexus 5X等) 初期起動時間 数値 アプリ初回起動時間(ミリ秒、UTC) 性別 テキスト 性別(男 / ⼥) 興味のあるカテゴリ テキスト ユーザーの興味・関⼼のあるカテゴリ ⾔語 テキスト OSの設定⾔語(en-us等) 新規 / 既存 - ユーザーの種類 OSバージョン テキスト OSのバージョン(Android 5.1.1等) ⾃動収集されるプロパティ
  12. Google Analytics イベント 発⽕タイミング ad_click 広告クリック時 ad_impression 広告表⽰時 app_exception アプリのクラッシュ時、例外が投げられた時

    first_open 初回起動時 notification_open Firebase Notificationsの通知からの起動時 screen_view 画⾯遷移時 session_start ⾮アクティブ状態から復帰時 user_engagement フォアグラウンド利⽤時に定期的に取得 ⾃動収集されるイベント
  13. • プラットフォーム: • Analyticsで収集したデータに機械学習を適⽤ し、動的にユーザーグループを作成 • 作成したユーザーグループをNotifications、 RemoteConfig等で利⽤可能 • 例)商品購⼊が予想されるユーザーには商品

    広告を表⽰ Predictions BETA
  14. • 利⽤にはAnalyticsの導⼊が必須 • 特定のイベントを7⽇以内に完了する⾒込みの あるユーザーグループを作成 • デフォルト予測(今後7⽇間で) • チャーン予測:アプリ利⽤を停⽌する •

    費⽤予測:アプリ内購⼊を⾏う • リスク許容度で精度とユーザー数を調整 Predictions BETA
  15. Predictions BETA

  16. • プラットフォーム: • 製品とマーケティングのテストを実⾏、分析、 スケーリング可能 • 例)アプリの動作、デザインの改善、プッ シュ通知のメッセージ改善、新機能のテスト • RemoteConfig

    または Cloud Messaging(また は両⽅)の導⼊が必要 A / B Testing BETA
  17. A / B Testing BETA

  18. • プラットフォーム: • クライアントとアプリへのメッセージ通知 • メッセージ配信の対象 • 個々の端末 • 端末グループ

    • 特定のトピックの配信登録をしている端末 • Analytics、A / B Testingとの連携 Cloud Messaging
  19. Cloud Messaging メッセージのタイプ タイプ メッセージ処理 送信⽅法 メリット 通知
 メッセージ FCM

    SDKのよって
 ⾃動的に処理される 1. Notifications Composer 2. Cloud Functions, ⾃前のサーバー 他のFirebase
 プロダクトとの連携 データ
 メッセージ クライアントが
 メッセージを処理する Cloud Functions, 
 ⾃前のサーバー ⾃由度の⾼い
 メッセージ表現
  20. • プラットフォーム: • アプリのアップデートなしに動作、デザインを 変更することが可能 • 例)季節毎のプロモーションやレイアウトや テーマの変更 • ユーザーベースのセグメント(バージョン、⾔

    語、Analyticsで作成したグループ)に対してカ スタマイズしたバリエーションを提供 Remote Config
  21. Remote Config

  22. • プラットフォーム: • インストールプロセスを挟んでも失われない ディープリンク • Webサイトからアプリの同等コンテンツに シームレスに誘導 • SNS、メールでのキャンペーン

    • 1リンクでマルチプラットフォームをサポート (iOS、Android、Web) Dynamic Links
  23. Dynamic Links アプリ未インストール時

  24. Dynamic Links アプリインストール済み

  25. • プラットフォーム: • Google検索結果にアプリを表⽰ • インストール済み:検索結果からアプリのコ ンテンツに直接移動可能 • 未インストール:アプリのインストールカー ドを提⽰

    App Indexing
  26. App Indexing アプリインストール済み

  27. 代表的なプロダクトの 導⼊⽅法

  28. Google Analytics

  29. pod 'Firebase/Core' 1. CocoaPods に Firebase の依存関係を追加 2. pod install

    を実⾏行行 import Firebase func application(_ application: UIApplication, 
 didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { // // Use Firebase library to configure APIs FirebaseApp.configure() } Google Analytics 3. Firebaseの初期化 AppDelegate.swift
  30. 4. イベントトラッキング Analytics.logEvent("share_image", parameters: [ "name": name as NSObject, "full_text":

    text as NSObject ]) Google Analytics 5. ユーザープロパティ Analytics.setUserProperty(food, forName: "favorite_food")
  31. Cloud Messaging (通知メッセージ)

  32. Cloud Messaging メッセージの処理 ΞϓϦͷঢ়ଶ ௨஌ ϝοηʔδ σʔλ ϝοηʔδ ௨஌ϝοηʔδ
 ʴσʔλϖΠϩʔυ

    ϑΥΞάϥ΢ϯυ PO.FTTBHF
 3FDFJWFE PO.FTTBHF
 3FDFJWFE PO.FTTBHF
 3FDFJWFE όοΫάϥ΢ϯυ γεςϜτϨΠ PO.FTTBHF
 3FDFJWFE γεςϜτϨΠ ʴ
 -BVODIFS"DUJWJUZ ͷ*OUFOU
  33. Cloud Messaging バックグラウンド dependencies { implementation 'com.google.firebase:firebase-core:15.0.0' implementation ‘com.google.firebase:firebase-messaging:15.0.0' }

    1. SDKを追加する app/build.gradle 2. 特定端末へとプッシュ通知を送信する 1) 現在の登録トークンの取得 override fun onTokenRefresh() { val refreshedToken = FirebaseInstanceId.getInstance().token // send the token to app server. sendRegistrationToServer(refreshedToken) } FirebaseInstanceIDService.kt
  34. Cloud Messaging バックグラウンド 2) Notifications Composerからメッセージ送信 • ターゲット:単⼀の端末 • FCM

    登録トークン:取得したFCMトークン これだけ
  35. Cloud Messaging フォアグラウンド <service android:name=".MyFirebaseMessagingService"> <intent-filter> <action android:name="com.google.firebase
 .MESSAGING_EVENT”/> </intent-filter>

    </service> 1. Manifestの更新 AndroidManifest.xml
  36. Cloud Messaging フォアグラウンド override fun onMessageReceived(remoteMessage: RemoteMessage) { // Handle

    FCM messages here. // Check if message contains a data payload. if (remoteMessage.data.isNotEmpty()) { // Do something } // Check if message contains a notification payload. if (remoteMessage.notification != null) { // Do something } } 2. onMessageReceived()の実装 FirebaseMessagingService.kt
  37. 複数プロダクトの連携 とユースケース

  38. アプリ開始画⾯の
 カスタマイズ IUUQTpSFCBTFHPPHMFDPNEPDTVTFDBTFTXFMDPNFTDSFFO

  39. • 利⽤プロダクト: • ゴール:対象となるユーザー毎に、ユーザーの 好みやアクティビティに基づいてアプリ開始画 ⾯をカスタマイズする アプリ開始画⾯のカスタマイズ

  40. 1. Remote Config のパラメータの設定 • 開始画⾯のメッセージをパラメータとして保 存(リリースなしで更新可能) 2. アナリティクス のユーザー層またはユーザー

    のプロパティの設定 • 対象となるユーザーの設定 3. Remote Config 条件の設定 • プロパティを条件としてパーソナライズ アプリ開始画⾯のカスタマイズ
  41. • Analticsのデバッグ⽅法 • Firebase Console > Analytics DebugView アプリ開始画⾯のカスタマイズ

  42. Analytics 
 + Tag Manager 

  43. Google Tag Manager • プラットフォーム: • 複数プロダクトの計測タグを発⾏可能 • Google Analytics

    for Firebase • Google Analytics • 広告プロダクト等 • Consoleがドキュメントに • アプリのリリースなしに計測設計を更新可能 • Google Analyticsに統合
  44. Google Tag Manager • 変数 • トリガー:タグの発⽕条件 • 例)EventName が

    screen_view のとき • タグ:発⽕する計測タグの情報
  45. Google Tag Manager タグ設定例

  46. dependencies { implementation ‘com.google.android .gms:play-services-tagmanager:11.0.4' } 1. SDKの追加 app/build.gradle 2.

    コンテナの準備 1) Tag Manager Consoleを開く 2) Versions > Actions > Download からコンテナのDL 3) app/main/assets/containers へコンテナを追加 Google Tag Manager
  47. val firebaseAnalytics = FirebaseAnalytics.getInstance(this) firebaseAnalytics.logEvent("share_image", Bundle().apply { putString("name", name) putString("full_text",

    text) }) 3. タグの発⽕ 4. コンテナの公開 • プレビュー、デバッグでコンテナをテスト • コンテナは公開後、24時間以内にアプリに送信 Google Tag Manager
  48. Google Tag Manager 1. 同じ仕様のトラッキングを社内ツール、 Google Analyticsそれぞれで計測したい • タグを複数作成することでクライアントでの 送信コードは統⼀できる

    2. コンテンツ視聴の開始、その後1秒毎にそれ ぞれ計測したい ユースケース
  49. Google Tag Manager ユースケース Observable.interval(0L, 1L, TimeUnit.SECONDS) .observeOn(AndroidSchedulers.mainThread()) .subscribeBy( onNext

    = { intervalSecond -> firebaseAnalytics.logEvent("share_image", Bundle().apply { putLong("interval", intervalSecond) … }) }, onError = { }) • Interval をパラメータとして送信 • タグ側でInterval が 0 の場合を試
 聴開始、 1以降を視聴継続として
 計測
  50. ニュースアプリでのユースケース • 利⽤プロダクト: • 前提:読了率の⾼いユーザーは継続率が⾼い • 課題:読了しない • 仮設:良い記事に出会えていない •

    どうやって良い記事に出会うのか • アプリTOPの流⼊数が圧倒的に多い • アプリTOPに良質な記事を表⽰する • 刺さらなかったときに逃げ道を
  51. ニュースアプリでのユースケース ৽ چ ൺֱ શମ116    هࣄ116 

      ཌ೔ܧଓ཰    表:新旧アプリ⽐比較 • 良くない記事に出会ってしまったときに逃げ道を
  52. まとめ

  53. まとめ • Firebaseには、ビジネス成⻑に関わるプロダクトが多数 ⽤意されている • 各プロダクトは実際のユースケースを想定し、爆速で導 ⼊可能になっている • 各プロダクトを連携・統合して利⽤することでアプリの 状態を正しく把握し、成⻑に役⽴てられる

    • In-App Messaging、Predictions等の新プロダクトは 統合利⽤を前提に
  54. Yuki Shiho @shihochan Thank you GDG DevFest Tokyo 2018 in

    2018/09/01