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. 2.

    About me 志甫 侑紀 / YUKI SHIHO @shihochan Software Engineer

    at AbemaTV, Inc. @shihochandesu Shibuya.apk Cat LOVER KEYAKIZAKA 46
  2. 8.

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

    • ユースケース • ショッピングアプリのセール情報、クーポン • 新しいバージョンのアプリへのアップデート In-App Messaging BETA
  3. 9.

    • サポート • Android 4.4~、Xcode 9.2~ • 送信先:アプリバージョン、ユーザー、ユー ザープロパティ、Analytics情報などから指定 •

    トリガー:app_launch、on_foreground、 Analyticsのイベントなどから指定 • 送信頻度:基本的に1(n)⽇1回のみ取得 • コンバージョンイベントのタグ付が可能 In-App Messaging BETA
  4. 10.

    • プラットフォーム: • Firebase向けGoogle Analytics • ユーザー獲得からアプリ使⽤に⾄るまでのユー ザー分析 • 最⼤で

    500 種類のイベントレポートを作成可能 • 収集したデータをセグメント化し、様々な他 Firebaseプロダクトで利⽤可能 Google Analytics
  5. 11.

    Google Analytics プロパティ タイプ 説明 年齢 テキスト 年齢を6カテゴリに分類 アプリのバージョン テキスト

    VersionName, Bundle Version 国 テキスト 居住国 端末カテゴリ テキスト 端末のカテゴリ(タブレット等) 端末メーカー テキスト 端末のメーカー(LG等) 端末名 テキスト 端末名(Nexus 5X等) 初期起動時間 数値 アプリ初回起動時間(ミリ秒、UTC) 性別 テキスト 性別(男 / ⼥) 興味のあるカテゴリ テキスト ユーザーの興味・関⼼のあるカテゴリ ⾔語 テキスト OSの設定⾔語(en-us等) 新規 / 既存 - ユーザーの種類 OSバージョン テキスト OSのバージョン(Android 5.1.1等) ⾃動収集されるプロパティ
  6. 12.

    Google Analytics イベント 発⽕タイミング ad_click 広告クリック時 ad_impression 広告表⽰時 app_exception アプリのクラッシュ時、例外が投げられた時

    first_open 初回起動時 notification_open Firebase Notificationsの通知からの起動時 screen_view 画⾯遷移時 session_start ⾮アクティブ状態から復帰時 user_engagement フォアグラウンド利⽤時に定期的に取得 ⾃動収集されるイベント
  7. 18.

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

    • 特定のトピックの配信登録をしている端末 • Analytics、A / B Testingとの連携 Cloud Messaging
  8. 19.

    Cloud Messaging メッセージのタイプ タイプ メッセージ処理 送信⽅法 メリット 通知
 メッセージ FCM

    SDKのよって
 ⾃動的に処理される 1. Notifications Composer 2. Cloud Functions, ⾃前のサーバー 他のFirebase
 プロダクトとの連携 データ
 メッセージ クライアントが
 メッセージを処理する Cloud Functions, 
 ⾃前のサーバー ⾃由度の⾼い
 メッセージ表現
  9. 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
  10. 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")
  11. 32.

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

    ϑΥΞάϥ΢ϯυ PO.FTTBHF
 3FDFJWFE PO.FTTBHF
 3FDFJWFE PO.FTTBHF
 3FDFJWFE όοΫάϥ΢ϯυ γεςϜτϨΠ PO.FTTBHF
 3FDFJWFE γεςϜτϨΠ ʴ
 -BVODIFS"DUJWJUZ ͷ*OUFOU
  12. 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
  13. 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
  14. 40.

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

    のプロパティの設定 • 対象となるユーザーの設定 3. Remote Config 条件の設定 • プロパティを条件としてパーソナライズ アプリ開始画⾯のカスタマイズ
  15. 43.

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

    for Firebase • Google Analytics • 広告プロダクト等 • Consoleがドキュメントに • アプリのリリースなしに計測設計を更新可能 • Google Analyticsに統合
  16. 44.

    Google Tag Manager • 変数 • トリガー:タグの発⽕条件 • 例)EventName が

    screen_view のとき • タグ:発⽕する計測タグの情報
  17. 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
  18. 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
  19. 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以降を視聴継続として
 計測
  20. 50.

    ニュースアプリでのユースケース • 利⽤プロダクト: • 前提:読了率の⾼いユーザーは継続率が⾼い • 課題:読了しない • 仮設:良い記事に出会えていない •

    どうやって良い記事に出会うのか • アプリTOPの流⼊数が圧倒的に多い • アプリTOPに良質な記事を表⽰する • 刺さらなかったときに逃げ道を
  21. 51.

    ニュースアプリでのユースケース ৽ چ ൺֱ શମ116    هࣄ116 

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