Firebase In-App Messaging で

過去バージョンのユーザーへ更新を促したい!

After iOSDC Japan 2020

Sansan株式会社
Sansan事業部 プロダクト開発部
中川 泰夫

自己紹介

  • 🍎 iOS Engineer@Sansan
  • ⌨️ bat43 / yosino58
  • 🐦 @ynakagawa33

h:320

アジェンダ

  1. あらすじ
  2. Firebase In-App Messaging で実現できること
  3. Firebase In-App Messaging を採用するメリット
  4. Sansan に Firebase In-App Messaging を導入してみた
  5. まとめ

あらすじ

とあるプロジェクトにて

PM 「バージョンアップなしに過去バージョンのユーザーへガイドできないか?」
私「Firebase In-App Messaging が使えるかなー?」
⬇️
技術調査開始 🔍

Firebase In-App Messaging

で実現できること

Firebase In-App Messaging

で実現できること

Firebase In-App Messaging はアクティブユーザーへ文脈に応じたメッセージを配信できます

Firebase In-App Messaging

を採用するメリット

Firebase In-App Messaging

を採用するメリット

  1. メッセージを実装する度にコードを増やさずに済む
  2. 特定のユーザーに特定のタイミングでメッセージを送信できる
  3. メッセージごとにデザインのカスタマイズができる

Firebase In-App Messaging

を採用するメリット

  1. メッセージを実装する度にコードを増やさずに済む
  2. 特定のユーザーに特定のタイミングでメッセージを送信できる
  3. メッセージごとにデザインのカスタマイズができる

メッセージを実装する

度にコードを増やさず

に済む

※画像はイメージです

Firebase In-App Messaging

を採用するメリット

  1. メッセージを実装する度にコードを増やさずに済む
  2. 特定のユーザーに特定のタイミングでメッセージを送信できる
  3. メッセージごとにデザインのカスタマイズができる

特定のユーザーに特定のタイミングで

メッセージを送信できる

ユーザー タイミング
アプリ / バージョン / 言語 / プロパティ / オーディエンス / Predications / 初回起動 / 前回の利用からの経過日 on_foregrand / app_launch / app_exception / dynamic_link_open / os_update / screen_view / session_start

Firebase In-App Messaging

を採用するメリット

  1. メッセージを実装する度にコードを増やさずに済む
  2. 特定のユーザーに特定のタイミングでメッセージを送信できる
  3. メッセージごとにデザインのカスタマイズができる

メッセージごとにデザイン

のカスタマイズができる

  • カード
  • モーダル
  • 画像のみ
  • トップバナー

Sansan に

Firebase In-App Messaging

を導入してみた

Sansan に

Firebase In-App Messaging

を導入してみた

  1. 事前準備
  2. アプリに Firebase In-App Messaging を追加する
  3. テストメッセージを送信する

Sansan に

Firebase In-App Messaging

を導入してみた

  1. 事前準備
  2. アプリに Firebase In-App Messaging を追加する
  3. テストメッセージを送信する

事前準備

  • Firebase が有効なアプリ
  • Xcode 10.3 以降
  • CocoaPods 1.4.0 以降

Firebase を有効にしてない人向け

  • プロジェクトを作成する

Firebase を有効にしてない人向け

  • アプリを作成する

Firebase を有効にしてない人向け

  • ダウンロードした GoogleService-Info.plist
    をXcode プロジェクト
    ルートへ追加し、
    すべてのターゲットに追加

Sansan に

Firebase In-App Messaging

を導入してみた

  1. 事前準備
  2. アプリに Firebase In-App Messaging を追加する
  3. テストメッセージを送信する

アプリに Firebase In-App Messaging を追加する

  • Podfile で次の Pod をインクルードします
    • ※事前に CocoaPods の導入を済ませておいてください
pod 'Firebase'
pod 'Firebase/InAppMessaging'
pod 'Firebase/Analytics'
  • pod install を実行し、 .xcworkspace ファイルを
    開きます
    • ※うまく行かなかったら、 pod update

アプリに Firebase In-App Messaging を追加する

  • Firebase モジュールを UIApplicationDelegate
    インポート
import Firebase

アプリに Firebase In-App Messaging を追加する

  • FirebaseApp 共有インスタンスを構成
    • 通常はアプリの application:didFinishLaunchingWithOptions:
      メソッド
// Use Firebase library to configure APIs
FirebaseApp.configure()

Sansan に

Firebase In-App Messaging

を導入してみた

  1. 事前準備
  2. アプリに Firebase In-App Messaging を追加する
  3. テストメッセージを送信する

テストメッセージを送信する

  • Xcode プロジェクトを開き、上部のメニューバーから [Product] > [Scheme] > [Edit scheme] の順に選択

テストメッセージを送信する

  • ポップアップ表示されたダイアログの [Arguments] タブを開く

テストメッセージを送信する

  • [Arguments Passed On Launch][+ Add items] をクリック
  • 新しく作成されたフィールドに「-FIRDebugEnabled」と入力

テストメッセージを送信する

  • [Close] をクリックし、アプリを実行します。
  • アプリの実行が開始されたら、Xcode コンソールのログで次の行を探します。

[Firebase/InAppMessaging][I-IAM180017] Starting InAppMessaging runtime with Instance ID YOUR_APP_ID

テストメッセージを送信する

  • Starting InAppMessaging runtime でフィルターすると探しやすい

テストメッセージを送信する

  • Firebase コンソールで [In-App Messaging] を開きます。

テストメッセージを送信する

  • [最初のキャンペーンを作成] をクリックします。

テストメッセージを送信する

  • メッセージの
    タイトルを入力します
    • メッセージレイアウトはトップバナーを選びます

テストメッセージを送信する

  • [デバイスでテスト] をクリックします

テストメッセージを送信する

  • [インストール ID の追加] フィールドにアプリの Firebase インストール ID を入力します。

テストメッセージを送信する

  • [テスト] をクリックしてメッセージを送信します。

テストメッセージを送信する

🎉

まとめ

この話には続きがあります

Firebase In-App Messaging 採用されんかった 😢

なぜ、採用できなかったか

  1. 外部サービスに依存することによるリスク
  2. すでにあるお知らせの機能を拡張したほうが運用面で楽
  3. アプリのアップデートを促すプロジェクトが別にあった

なぜ、採用できなかったか

  1. 外部サービスに依存することによるリスク
  2. すでにあるお知らせの機能を拡張したほうが運用面で楽
  3. アプリのアップデートを促すプロジェクトが別にあった

外部サービスに依存することによるリスク

  • Sansan アプリは AWS にすでに依存している
  • ベータ版である In-App Messaging に依存することは可用性の観点から難しい

なぜ、採用できなかったか

  1. 外部サービスに依存することによるリスク
  2. すでにあるお知らせの機能を拡張したほうが運用面で楽
  3. アプリのアップデートを促すプロジェクトが別にあった

すでにあるお知らせの機能を拡張したほうが運用面で楽

  • お知らせを出せば、デイリーで 900 タップされている (DAU 65000)
  • お知らせに Push 通知をつけたり、トップ画面にフルスクリーンで出したり…

なぜ、採用できなかったか

  1. 外部サービスに依存することによるリスク
  2. すでにあるお知らせの機能を拡張したほうが運用面で楽
  3. アプリのアップデートを促すプロジェクトが別にあった

アプリのアップデートを促すプロジェクトが別にあった

  • ArtSabintsev/Siren を使って、 App Store のメタ情報とアプリバージョンを比較して、ユーザーにアプリの更新を促す
  • この機能とお知らせの合わせ技で PM の欲求を満たせる 💪

まとめ

まとめ

  • Firebase を導入しておけば、アプリ内メッセージは簡単に表示できる
  • ただし、外部サービスなので、リスク分析した上で用法、容量を守って使おう

# はじめに スライドの QR -> Twitter のプロフィールページに飛べる 本トークのスライドをつぶやいている 手元の環境で見たい方はチェック # iOS Engineer@Sansan # キーボード ものを作ることが好きで最近は自作キーボード沼にはまっている 右下の画像はリモートワーク用とプライベート用のキーボード

# 本 LT のアジェンダです。 あらすじから Firebase In-App Messaging で実現できることを説明し、採用するメリットを述べます。その後、 Sansan アプリに導入した際の手順を共有して、まとめとします。

スライドの動画は機能のアップデートが必要なユーザーに対して、モーダルを表示し、アップデートボタンに App Store Connect のアプリページへのリンクを仕込んでおき、タップしたユーザーへ更新を促している動画です。

簡易なアラートであれば、そこまでコードは増えないと思いますが、デザインされたカードやモーダル、ボタンのアクションに画面遷移のロジックを埋め込んだりする場合、メッセージを実装するたびにコードが増えたり、分岐が増えたりします。 右の画像はとあるダイアログのコードですが、種別に応じて、高さやタイトル、 Description などを分岐しています。 Firebase In-App Messaging を使えば、テンプレートのデザインのままでよければ、アプリ本体にコードを追記せずに新たなメッセージを追加することが出来ます。

以下の表にどんなユーザーにどんなタイミングで送信できるかまとめています。 ユーザーについてはアプリ、アプリのバージョン、 OS の言語とこの後3つの項目については補足します。 プロパティ: Firebase Analytics の機能でユーザーに対して任意の属性を付与することが出来、その属性のユーザーに対して、メッセージを発信することが出来る。例えば、無課金ユーザーに課金することによってアプリでどんな事ができるようになるか紹介するメッセージを配信したり出来るかも。 オーディエンス: Firebase Analytics の機能でイベント、パラメータ、プロパティを組み合わせることでユーザーを分類して、一覧を作ることが出来、こちらもプロパティと同じく利用可能。 Predictions: Firebase Predictions の機能で、アナリティクスデータに機械学習を適用し、予測された行動に基づいて動的にユーザーを分類します。 Sansan は法人向けアプリということもあり、 Predictions のメインのユースケースであるコンバージョンを高めたり、アプリの利用が停止することが予測されるユーザーへのアクションしても、効果が低いため、使っていません。 残り2つは初回起動時のユーザー、前回のアプリ利用から指定した日にちが経過したユーザーです。 タイミングについては表に乗せているのは Sansan アプリで利用可能なものだけでこれ以外にも Firebase Analytics が自動で収集してくれるイベントは利用できますし、自分で Firebase Analytics でイベントを追加すれば、 Firebase In-App Messaging のタイミングとして利用できるようになります。

デザインのテンプレートはカード、モーダル、画像のみ、トップバナーがあり、 Firebase コンソールからはレイアウトは変更ができませんが、中身のコンテンツは自由に変更することが可能です。

まず、 Firebase プロジェクトを作成しましょう。 プロジェクト名を入力し、 Firebase Analytics の設定を有効にするか選択します。 Firebase In-App Messaging は Firebase Analytics を利用するので、有効にした状態でプロジェクトを作成します。

次に Firebase プロジェクトにアプリを登録します。 アプリの Bundle Itentifier を入力し、 Firebase の設定ファイルをダウンロードします。 それ以降の手順はスキップして構いません。

注意事項に「アプリを開くと、テストメッセージがトリガーされます」とありますが、 アプリの起動時に仕込んだ FirebaseApp.configure() の内部とアプリが前面に出る前のイベントにメッセージを取得するフローが登録されていることが SDK から分かりました。

スライドの動画は Sansan アプリを開いて、テストメッセージの「Hello world!」がトップバナーに表示される様子です。 Sansan アプリはすでに Firebase は導入済みでしたので、 Podfile に InAppMessaging を追加するだけでメッセージを表示できるようになりました。 とてもお手軽ですね。

悲しいですが、 Sansan アプリには Firebase In-App Messaging を採用できませんでした。次になぜ、採用できなかったのか理由を共有しようと思います。

Sansan アプリは AWS の EC2 サーバーにデプロイされた API を叩いているため、すでに AWS に依存しています。 そこからさらに現在、ベータ版である Firebae In-App Messaging に依存することはアプリの可用性の観点から難しかったです。 API は動いているけど、 In-App Messaging が動いていないからガイドが出来ないといったことも考えられます。

実は Sansan アプリにはお知らせ機能があって、 お知らせを出せば、デイリーで 900 タップされているそうです。 現状はスライドの画像のように何もお知らせがないユーザーがほとんどですが、 お知らせに Push 通知をつけたり、トップ画面でフルスクリーンで表示するなどの改善を施すことも出来ますし、すでにある運用フローをそのまま利用することも可能です。

弊社では今年の5月に「Builders Box」というエンジニアのための情報サブスクリプションを立ち上げました。 Builders Boxにご登録いただくと、会員専用サイトを通じて厳選情報を受け取ったり、会員限定イベントへの招待、技術カンファレンス参加支援などの特典が受けられます。 詳細はこちらのQRコードから、もしくは「buildersbox-online」と検索していただき、ご確認いただければと思います。