【iOS】Firebase In-App Messagingでユーザープロパティが送信対象絞り込み条件として適用されるタイミングを調べてみた

2022.06.23

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

前回の記事では、Firebaseのアプリ内メッセージで特定のイベントをトリガーに表示させるところまでを行いました。

【iOS】Firebase In-App Messagingでイベントをトリガーにメッセージを送ってみた

今回は、Firebase In-App Messagingではユーザープロパティの値で送信対象を絞り込むことが出来るので、そのやり方とアプリ側から送られたユーザープロパティが絞り込みの条件として適用されるタイミングについて調べてみました。

環境

  • Xcode 13.3
  • Firebase Apple SDK 9.1.0

はじめに

今回は【iOS】Firebase In-App Messagingでイベントをトリガーにメッセージを送ってみたの記事の続きなのでFirebaseInAppMessaging-BetaFirebaseAnalyticsのパッケージがすでにプロジェクトに追加されており、各機能が使用出来る前提で進めていきます。

Firebaseをプロジェクトに追加する方法や、Packageインストール方法についてはFirebaseをAppleプロジェクトに追加するをご覧にいただければと思います。

ユーザープロパティを設定する

まず対象条件を絞り込む為には、Firebaseにユーザープロパティを設定する必要があります。

設定するメソッドを使用する為には、まずはFirebaseAnalyticsをインポートします。

import FirebaseAnalytics

あとは、ユーザープロパティを設定したい箇所でAnalytics.setUserPropertyメソッドを呼びます。

class func setUserProperty(_ value: String?, forName name: String)

第一引数valueは、ユーザープロパティに設定する文字列の値で、第二引数nameはユーザープロパティの名前です。

引数設定時の注意点は、

  • value
    • valueは、最大36文字
    • 値をnilに設定すると、ユーザープロパティが削除される
    • 英字で始める必要がある
    • 記号はアンダースコア_のみ使用できる
  • name
    • nameは最大25文字

条件に満たない場合は、正常にユーザープロパティが設定されません。

使用例

Analytics.setUserProperty("テスト中", forName: "test_device")

カスタムディメンションを設定する

ユーザープロパティをアプリ内メッセージの送信対象条件として使用する為には、アプリ側からユーザープロパティを設定するだけではなく、カスタムディメンションの登録が必要となります。

まず、FirebaseコンソールでCustom Definitionsを選択して、表示された画面のカスタムディメンションを作成をクリックします。

新しいカスタムディメンションの登録画面が出てくるので範囲をユーザーにします。これでユーザープロパティのカスタムディメンションの登録が行えます。

  • ディメンション名
    • レポートで表示する名前
  • 説明
    • カスタムディメンションまたはカスタム指標の説明(省略可)
  • ユーザープロパティ
    • 今後収集するパラメータまたはプロパティの名前を入力します

今回は検証用にtest_deviceというユーザープロパティを設定したカスタムディメンションを作成しました。

以上で配信対象を絞るためのユーザープロパティに準備が整いました。

アプリ内メッセージ配信対象を絞る

メッセージ作成

FirebaseコンソールのエンゲージメントにあるMessagingを選択し、表示された画面の新しいキャンペーンを作成を押します。

通知とアプリ内メッセージングが選択できるのでアプリ内メッセージングを選択します。

まず最初にメッセージのスタイルと内容を確定させて、宛先を選択します。

宛先の設定

宛先の対象ユーザーの項目のアプリにはメッセージを送りたい先のアプリを設定します。その後、横にあるおよびというボタンを押すことで、メッセージを送る対象をさらに絞り込むことが出来ます。

およびを押すとさらに対象を設定するフォームが追加されます。

ユーザープロパティを選択し、対象条件として、test_deviceが追加します。

さらに指定したユーザープロパティの値がどうなっているユーザーを対象にするか指定します。デフォルトでは、次を含むになっており、今回はユーザープロパティtest_deviceテスト中になっているユーザーをメッセージ送信対象としました。

宛先はこれで設定出来たので、スケジュールを設定します。

スケジュールの設定

今回も前回同様にtrigger_testのイベントをトリガーにメッセージを表示させることにしました。

今回のメッセージの設定は以上になるので、確認を押下後、メッセージを公開します。

アプリ側の実装

Storyboard

今回の検証プロジェクトのStoryboardはこのようになっています。

まず、遷移というボタンのあるViewが最初に表示されます。その遷移ボタンを押すと、TriggerViewControllerに遷移します。

TriggerViewController

TriggerViewControllerはこのような実装になっています。

import UIKit
import FirebaseAnalytics

class TriggerViewController: UIViewController {

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        Analytics.setUserProperty("テスト中", forName: "test_device")
        Analytics.logEvent("trigger_test", parameters: nil)
    }

    @IBAction private func closeButtonTapped() {
        dismiss(animated: true)
    }
}

viewDidAppearのタイミングで、Firebase ユーザープロパティの設定とイベントの記録を行なっています。

  1. ユーザープロパティtest_deviceの設定
  2. イベントtrigger_testの記録

また、Viewの上部にある×マークを押すことで画面を閉じます。

メッセージが表示されるか確認

それでは全ての用意が整ったのでメッセージが表示されるか確認してみましょう。

フォアグラウンドのまま確認する

アプリを立ち上げて、何度か最初のViewControllerTriggerViewControllerを行き来しています。

in-app-messaging-not-background

TriggerViewControllerが表示されたタイミングでAnalytics.setUserPropertyAnalytics.logEventの処理が行われているはずですが、メッセージが表示されませんでした。ユーザープロパティが初めて設定されてから、イベントがトリガーされるまでの間隔が短すぎて配信対象として絞れていない場合も考え、何度かTriggerViewControllerを表示させてみましたが、メッセージが表示されることはありませんでした。

バックグラウンドにアプリを移動させる

上記の手順と基本は同じなのですが、メッセージが表示されないのを確認した後でアプリを一度バックグラウンドに移動して、再びフォアグラウンドに戻し使用するとメッセージが表示されました!

in-app-messaging-background-2

ユーザープロパティが配信対象条件として適用されるのはいつか?

実際に、Firebaseサポートに問い合わせしてみました。

Q.ローカルのユーザープロパティを実際にアプリ内メッセージやプッシュ通知の条件として使用できるのはいつですか?

A.ユーザープロパティの場合、これはクライアント側で評価される為、数分後に使用出来ます。ただし、オーディエンス(イベントに基づく)の場合、オーディエンスの一部として認識されていることを確認する必要がある為、最大24時間かかる場合があります。

いただいた回答では、数分後には使用出来るとのこと。

しかし、フォアグラウンドのまま確認するで行なっていたように24時間フォアグランドのままで何度かTriggerViewControllerを表示させてメッセージが出るか確認したのですが、一度も表示されることはなかったです。24時間経過後に、一度アプリをバックグラウンドに移動して、フォアグラウンドに戻すとメッセージが表示されました。

結論

今回の検証で試したところ、ユーザープロパティが送信対象絞り込み条件として適用されるタイミングは、アプリ側で新しいユーザープロパティの値が設定された後、対象アプリが一度バックグラウンドに移動した後にアプリがフォアグラウンドに戻ってきた時という結果になりました。

実際に試した結果はこのようになったのですが、もし間違いや指摘等ありましたら教えていただければと思います。

おわりに

今回は調べていく中で、ユーザープロパティが配信条件として適用される時間だけなく、Firebase Analyticsにデータが表示される時間も知ることが出来ました。 iOSアプリでは、各Firebaseが導入されたアプリ毎に1時間のタイマーが動いており、1時間毎にデータが送られているとのことでした。また、アプリをバックグラウンドに移動したタイミングでもデータが送信されているようです。

Firebaseサポートに問い合わせたところ、送信されたデータがレポートに反映されるまでにパイプライン内に遅延がなければ、3~4時間で反映されるとのことでした。

Firebaseはとても便利なサービスなので今後も理解を深めていきたいですね。

参考

モバイルアプリ開発のチームメンバー絶賛募集中!

モバイル事業部では事業会社様と一緒に、数年間にわたり長期でモバイルアプリをグロースさせています。

そんなモバイルアプリ開発のチームメンバーを絶賛募集中です!

もちろんモバイルアプリ開発以外のエンジニアも募集中です!

クラスメソッド採用サイト