Slide 1

Slide 1 text

Yuki Shiho @shihochan Growing your app with Firebase GDG DevFest Tokyo 2018 in 2018/09/01

Slide 2

Slide 2 text

About me 志甫 侑紀 / YUKI SHIHO @shihochan Software Engineer at AbemaTV, Inc. @shihochandesu Shibuya.apk Cat LOVER KEYAKIZAKA 46

Slide 3

Slide 3 text

WEB+DB PRESS Vol.105 SALE NOW ON!!

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

• プラットフォーム: • アクティブユーザー向けのテキストメッセージ • アプリの主要機能の利⽤を促す • Analytics, Predictionsと統合されており、⾼ 度なターゲティング機能を提供 • ユースケース • ショッピングアプリのセール情報、クーポン • 新しいバージョンのアプリへのアップデート In-App Messaging BETA

Slide 9

Slide 9 text

• サポート • Android 4.4~、Xcode 9.2~ • 送信先:アプリバージョン、ユーザー、ユー ザープロパティ、Analytics情報などから指定 • トリガー:app_launch、on_foreground、 Analyticsのイベントなどから指定 • 送信頻度:基本的に1(n)⽇1回のみ取得 • コンバージョンイベントのタグ付が可能 In-App Messaging BETA

Slide 10

Slide 10 text

• プラットフォーム: • Firebase向けGoogle Analytics • ユーザー獲得からアプリ使⽤に⾄るまでのユー ザー分析 • 最⼤で 500 種類のイベントレポートを作成可能 • 収集したデータをセグメント化し、様々な他 Firebaseプロダクトで利⽤可能 Google Analytics

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

Google Analytics イベント 発⽕タイミング ad_click 広告クリック時 ad_impression 広告表⽰時 app_exception アプリのクラッシュ時、例外が投げられた時 first_open 初回起動時 notification_open Firebase Notificationsの通知からの起動時 screen_view 画⾯遷移時 session_start ⾮アクティブ状態から復帰時 user_engagement フォアグラウンド利⽤時に定期的に取得 ⾃動収集されるイベント

Slide 13

Slide 13 text

• プラットフォーム: • Analyticsで収集したデータに機械学習を適⽤ し、動的にユーザーグループを作成 • 作成したユーザーグループをNotifications、 RemoteConfig等で利⽤可能 • 例)商品購⼊が予想されるユーザーには商品 広告を表⽰ Predictions BETA

Slide 14

Slide 14 text

• 利⽤にはAnalyticsの導⼊が必須 • 特定のイベントを7⽇以内に完了する⾒込みの あるユーザーグループを作成 • デフォルト予測(今後7⽇間で) • チャーン予測:アプリ利⽤を停⽌する • 費⽤予測:アプリ内購⼊を⾏う • リスク許容度で精度とユーザー数を調整 Predictions BETA

Slide 15

Slide 15 text

Predictions BETA

Slide 16

Slide 16 text

• プラットフォーム: • 製品とマーケティングのテストを実⾏、分析、 スケーリング可能 • 例)アプリの動作、デザインの改善、プッ シュ通知のメッセージ改善、新機能のテスト • RemoteConfig または Cloud Messaging(また は両⽅)の導⼊が必要 A / B Testing BETA

Slide 17

Slide 17 text

A / B Testing BETA

Slide 18

Slide 18 text

• プラットフォーム: • クライアントとアプリへのメッセージ通知 • メッセージ配信の対象 • 個々の端末 • 端末グループ • 特定のトピックの配信登録をしている端末 • Analytics、A / B Testingとの連携 Cloud Messaging

Slide 19

Slide 19 text

Cloud Messaging メッセージのタイプ タイプ メッセージ処理 送信⽅法 メリット 通知
 メッセージ FCM SDKのよって
 ⾃動的に処理される 1. Notifications Composer 2. Cloud Functions, ⾃前のサーバー 他のFirebase
 プロダクトとの連携 データ
 メッセージ クライアントが
 メッセージを処理する Cloud Functions, 
 ⾃前のサーバー ⾃由度の⾼い
 メッセージ表現

Slide 20

Slide 20 text

• プラットフォーム: • アプリのアップデートなしに動作、デザインを 変更することが可能 • 例)季節毎のプロモーションやレイアウトや テーマの変更 • ユーザーベースのセグメント(バージョン、⾔ 語、Analyticsで作成したグループ)に対してカ スタマイズしたバリエーションを提供 Remote Config

Slide 21

Slide 21 text

Remote Config

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

Dynamic Links アプリ未インストール時

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

Google Analytics

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

4. イベントトラッキング Analytics.logEvent("share_image", parameters: [ "name": name as NSObject, "full_text": text as NSObject ]) Google Analytics 5. ユーザープロパティ Analytics.setUserProperty(food, forName: "favorite_food")

Slide 31

Slide 31 text

Cloud Messaging (通知メッセージ)

Slide 32

Slide 32 text

Cloud Messaging メッセージの処理 ΞϓϦͷঢ়ଶ ௨஌ ϝοηʔδ σʔλ ϝοηʔδ ௨஌ϝοηʔδ
 ʴσʔλϖΠϩʔυ ϑΥΞάϥ΢ϯυ PO.FTTBHF
 3FDFJWFE PO.FTTBHF
 3FDFJWFE PO.FTTBHF
 3FDFJWFE όοΫάϥ΢ϯυ γεςϜτϨΠ PO.FTTBHF
 3FDFJWFE γεςϜτϨΠ ʴ
 -BVODIFS"DUJWJUZ ͷ*OUFOU

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

Cloud Messaging バックグラウンド 2) Notifications Composerからメッセージ送信 • ターゲット:単⼀の端末 • FCM 登録トークン:取得したFCMトークン これだけ

Slide 35

Slide 35 text

Cloud Messaging フォアグラウンド

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

複数プロダクトの連携 とユースケース

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

1. Remote Config のパラメータの設定 • 開始画⾯のメッセージをパラメータとして保 存(リリースなしで更新可能) 2. アナリティクス のユーザー層またはユーザー のプロパティの設定 • 対象となるユーザーの設定 3. Remote Config 条件の設定 • プロパティを条件としてパーソナライズ アプリ開始画⾯のカスタマイズ

Slide 41

Slide 41 text

• Analticsのデバッグ⽅法 • Firebase Console > Analytics DebugView アプリ開始画⾯のカスタマイズ

Slide 42

Slide 42 text

Analytics 
 + Tag Manager

Slide 43

Slide 43 text

Google Tag Manager • プラットフォーム: • 複数プロダクトの計測タグを発⾏可能 • Google Analytics for Firebase • Google Analytics • 広告プロダクト等 • Consoleがドキュメントに • アプリのリリースなしに計測設計を更新可能 • Google Analyticsに統合

Slide 44

Slide 44 text

Google Tag Manager • 変数 • トリガー:タグの発⽕条件 • 例)EventName が screen_view のとき • タグ:発⽕する計測タグの情報

Slide 45

Slide 45 text

Google Tag Manager タグ設定例

Slide 46

Slide 46 text

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

Slide 47

Slide 47 text

val firebaseAnalytics = FirebaseAnalytics.getInstance(this) firebaseAnalytics.logEvent("share_image", Bundle().apply { putString("name", name) putString("full_text", text) }) 3. タグの発⽕ 4. コンテナの公開 • プレビュー、デバッグでコンテナをテスト • コンテナは公開後、24時間以内にアプリに送信 Google Tag Manager

Slide 48

Slide 48 text

Google Tag Manager 1. 同じ仕様のトラッキングを社内ツール、 Google Analyticsそれぞれで計測したい • タグを複数作成することでクライアントでの 送信コードは統⼀できる 2. コンテンツ視聴の開始、その後1秒毎にそれ ぞれ計測したい ユースケース

Slide 49

Slide 49 text

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以降を視聴継続として
 計測

Slide 50

Slide 50 text

ニュースアプリでのユースケース • 利⽤プロダクト: • 前提:読了率の⾼いユーザーは継続率が⾼い • 課題:読了しない • 仮設:良い記事に出会えていない • どうやって良い記事に出会うのか • アプリTOPの流⼊数が圧倒的に多い • アプリTOPに良質な記事を表⽰する • 刺さらなかったときに逃げ道を

Slide 51

Slide 51 text

ニュースアプリでのユースケース ৽ چ ൺֱ શମ116 هࣄ116 ཌ೔ܧଓ཰ 表:新旧アプリ⽐比較 • 良くない記事に出会ってしまったときに逃げ道を

Slide 52

Slide 52 text

まとめ

Slide 53

Slide 53 text

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

Slide 54

Slide 54 text

Yuki Shiho @shihochan Thank you GDG DevFest Tokyo 2018 in 2018/09/01