AdMob+Firebase 102 Unity: アプリを更新せずにアプリの動作を調整

1. はじめに

Google Play ストアでアプリを公開した後、アプリ内のいくつかのパラメータの値を調整する必要があるとします。通常は、アプリの新しいバージョンを再公開し、ユーザーもスマートフォンでアプリを更新する必要があります。

一般的に、アプリに長期的な変更をコミットする場合は、アプリの更新が機能します。しかし、アプリ内のいくつかのパラメータの値を頻繁に調整する場合はどうでしょうか?また、最適なアプリ構成を見つけるためにテストを実施したい場合はどうすればよいでしょうか?

このような場合、アプリの更新は正常に機能しません。アップデートがユーザーに完全に反映されるまでには時間がかかるためです。また、複数のアプリ バージョンでテストを実施するのは非常に困難です。

また、アプリのユーザー ジャーニーが意図したとおりに機能しているかどうかを判断するにはどうすればよいですか?Google Play Console のユーザー コメントをご利用ください。ただし、明確な判断を下すには十分な精度が得られない場合があります。

学習内容

  • Firebase 向け Google アナリティクスでファネルを作成する方法
  • Firebase Remote Config の使用方法
  • Firebase A/B テストの実行方法

必要なもの

  • Unity 2018.4.4f1 以降
  • Xcode 10 以降(iOS のターゲットをビルドするため)
  • Google アカウント
  • Android 5.0 以降を搭載したテストデバイス(デバイスを接続するための USB ケーブル付き)、または Play ストア/Google API をサポートするシステム イメージを搭載した AVD(Android 仮想デバイス)を実行する Android エミュレータ
  • iOS 8.0 以降を搭載した iOS デバイスまたはシミュレータ

AdMob の使用経験についてお答えください。

初心者 中級者 上級者

ご自身の Firebase 使用経験をどのように評価されますか。

初心者 中級者 上級者

2. 開発環境をセットアップする

コードをダウンロードする

次のボタンをクリックして、この Codelab のすべてのコードをダウンロードします。

ダウンロードした zip ファイルを解凍すると、これにより、admob-firebase-codelabs-unity-master という名前のルートフォルダが展開されます。

または、コマンドラインから GitHub リポジトリのクローンを作成します。

$ git clone https://github.com/googlecodelabs/admob-firebase-codelabs-unity

リポジトリには、次の 4 つのフォルダが含まれています。

  • android_studio_folder.png101-base - この Codelab で作成する開始コード。
  • android_studio_folder.png101-complete_and_102-base - この Codelab の完成したコードと 102 Codelab のスターター。
  • android_studio_folder.png102-complete - 102 Codelab の完成したコード。

必要なファイルを準備する

Awesome Drawing Quiz は、プロジェクトのコンパイルと実行に必要な複数のオープンソース コードを使用しています。

ターミナルを開き、リポジトリのルート ディレクトリに移動します。次に、ターミナルから ./gradlew :prepareThirdPartyFiles(Windows の場合は gradlew.bat :prepareThirdPartyFiles)を実行して、必要なファイルをプロジェクトにコピーします。

スターター アプリをインポートする

Unity を起動し、ウェルカム画面で [Open] を選択します。次に、ダウンロードしたコードから 101-complete_and_102-base ディレクトリを選択します。

これで、Unity でプロジェクトが開きます。

Google Mobile Ads Unity プラグインを追加する

Unity アプリで AdMob 広告を配信するには、Google Mobile Ads Unity プラグインをプロジェクトに追加する必要があります。

  1. Google Mobile Ads Unity プラグイン 3.18.1 パッケージをダウンロードします。(この Codelab は、プラグインの他のバージョンと互換性がない場合があります)。
  2. Awesome Drawing Quiz Unity プロジェクト。プロジェクトで、[Assets] > [Import Package] > [Custom Package] を選択します。
  3. ダウンロードしたプロジェクトに GoogleMobileAds.unitypackage をインポートします。

AdMob アプリ ID も設定する必要があります。Unity Editor で、メニューから [Assets](アセット)> [Google Mobile Ads](Google モバイル広告)> [Settings](設定)を選択します。

44fc84fe88235c1f.png

[Google AdMob] セクションの [Enabled](有効)チェックボックスをオンにして、AdMob を有効にします。次に、AdMob アプリ ID を次のように入力します。

  • Android: ca-app-pub-3940256099942544~3048611032
  • iOS: ca-app-pub-3940256099942544~2753522596

a6ad7402d4daf330.png

Unity プロジェクトに Firebase 構成ファイルを追加する

  1. Awesome Drawing Quiz プロジェクトの概要画面で、設定アイコン 9bacb5ada7cbaaf6.png をクリックします。
  2. [全般] タブで、Android アプリと iOS アプリをそれぞれ選択して、google-service.json(Android 用)ファイルと GoogleService-Info.plist(iOS 用)ファイルをダウンロードします。
  3. 両方の構成ファイルを Unity プロジェクトの android_studio_folder.pngAssets フォルダに移動します。

704aa8e97df63c4e.png

Firebase アナリティクス SDK を追加する

  1. Firebase Unity SDK 5.5.0 をダウンロードし、適切な場所で解凍します。(SDK をすでにダウンロードしている場合は、この手順をスキップしてください)
  2. Awesome Drawing Quiz Unity プロジェクトを開き、[Assets] > [Import Package] > [Custom Package] の順に選択します。
  3. 解凍した SDK から Firebase アナリティクス SDK(dotnet4/FirebaseAnalytics.unitypackage)をインポートします。
  4. [Import Unity package] ウィンドウで [Import] をクリックします。

3. コンソールから Firebase プロジェクトを開く

次のステップに進む前に、AdMob+Firebase 101 Codelab「Firebase プロジェクトを設定する」ステップで作成したプロジェクトを Firebase コンソールから開きます。

e0a028059c9e00cb.png

4. アプリ イベントのファネルを作成する

アプリ内のユーザー アクティビティをトラッキングするために追加したアプリイベントがいくつかあるかもしれません。各アプリイベントのレポートを読むことで、イベントに関連付けられた詳細情報(合計数、ユーザーあたりの平均数、ユーザー属性など)を取得できます。

ただし、特定のイベントに焦点を当てるのではなく、一連のイベントの完了率を確認したい場合はどうすればよいでしょうか。Firebase 向け Google アナリティクスでは、目標到達プロセスを使用して、一連のアプリ内イベントの完了率を視覚化し、最適化できます。

目標到達プロセスを作成する

目標到達プロセスを作成するには:

  1. Firebase コンソールに移動し、先ほど作成した Awesome Drawing Quiz プロジェクトを選択します。
  2. [ファネル] をクリックします。
  3. [新しい目標到達プロセス] をクリックします。
  4. 目標到達プロセスの名前と説明を入力します。
  5. 目標到達プロセスのステップとして使用する、最初の 2 つのイベントを選択します。
  6. 追加したステップごとに [別のイベントを追加] をクリックし、イベントを選択します。
  7. [作成] をクリックします。

上記の手順に沿って、次のファネルを作成します。

#1 ファネル名: レベルの成功率 イベント: level_startlevel_successd3bc78ef61a261d7.png

#2 ファネル名: リワード広告の完了率 イベント: ad_reward_promptad_reward_impressionad_reward45c9542dfa663014.png

#3 ファネル名: ゲーム完了率 イベント: game_startgame_completedab25e8501746d5f.png

目標到達プロセスの分析を表示する

ファネルを作成すると、Firebase コンソールの [ファネル] メニューからアクセスできるようになります。リストでファネル名をクリックすると、各ファネルの詳細な分析結果が表示されます。

620c0e84587c8ad4.png

たとえば、[レベルの成功率] をクリックします。ファネルの詳細は次のように表示されます。

c889f9b6ece15847.png

上のスクリーンショットでは、レベルを開始(level_start イベントをトリガー)した後にレベルをクリア(level_success イベントをトリガー)したユーザーの割合を確認できます。この例では、46.2% のユーザーがレベルをクリアしています。

[イベント数] をクリックすると、次のようにイベント数に基づく指標が表示されます。

d044fb7b07e6e0d9.png

上記のスクリーンショットの指標に基づくと、期間中に 116 回の試行(level_start イベントをトリガー)と 57 回のクリア(level_success イベントをトリガー)がありました。

イベントに基づく完了率(49.1%)はユーザーに基づく完了率(46.2%)をわずかに上回っているため、他のユーザーよりもパフォーマンスの高いユーザーが少数いると言えます。

5. Remote Config をアプリに統合する

アプリイベントとファネルに基づいてアプリに関する分析情報を取得できるため、アプリを最適化することをおすすめします。通常、アプリのパラメータ値の微調整が含まれます。これらのパラメータの値を変更するには、変更がユーザーに適用されるようにアプリを更新する必要があります。

Firebase の Remote Config を使用すると、アプリのアップデートなしでこれらの値を調整できます。つまり、ユーザーにアップデートのダウンロードを強制して迷惑をかけることなく、アプリの動作を変更できます。

この Codelab では、Remote Config を使用して、アプリのアップデートなしで報酬額(リワード動画広告の視聴後に開示される文字数)を調整する方法を学びます。

Firebase Remote Config SDK を追加する

  1. Firebase Unity SDK 5.5.0 をダウンロードし、適切な場所で解凍します。
  2. Awesome Drawing Quiz Unity プロジェクトを開き、[Assets] > [Import Package] > [Custom Package] の順に選択します。
  3. 解凍した SDK の中から Remote Config SDK(dotnet4/FirebaseRemoteConfig.unitypackage)をインポートします。
  4. [Import Unity package] ウィンドウで [Import] をクリックします。

Firebase.RemoteConfig をインポートする

完全修飾名を使用しなくても Firebase.RemoteConfig の型を使用できるように、Main.cs を変更します。

Scenes/Main.cs

...

using AwesomeDrawingQuiz.Game;

// TODO: Import Firebase.RemoteConfig (102)
using Firebase.RemoteConfig;

namespace AwesomeDrawingQuiz.Scene {
    ...
}

Remote Config の値を初期化して取得する

Main.csInitAndFetchRemoteConfig() メソッドを変更して、次のように Remote Config インスタンスを初期化します。GameSettings.KEY_REWARD_AMOUNT には、Remote Config のパラメータの名前が格納されます。(このフィールドは、この Codelab でまもなく宣言します)

Scenes/Main.cs

private Task InitAndFetchRemoteConfig() {
    // TODO: Initialize and Fetch values from the Remote Config (102)
    Dictionary<string, object> defaults = new Dictionary<string, object>();
    defaults.Add(GameSettings.KEY_REWARD_AMOUNT, 1);
    FirebaseRemoteConfig.SetDefaults(defaults);

    if (Debug.isDebugBuild) {
        ConfigSettings config = new ConfigSettings();
        config.IsDeveloperMode = true;
        FirebaseRemoteConfig.Settings = config;
        return FirebaseRemoteConfig.FetchAsync(System.TimeSpan.Zero);
    } else {
        return FirebaseRemoteConfig.FetchAsync();
    }
}

FirebaseRemoteConfig インスタンスは、デバッグモードでサーバーから最新の値を取得するように構成されており、開発プロセスに役立ちます。(IsDeveloperMode = trueFetchAsync(System.TimeSpan.Zero)

取得した Remote Config の値を有効にする

Remote Config 値を正常にフェッチしたら、それらの値を有効にしてアプリで使用できるようにする必要があります。ActivateRemoteConfigValues() メソッドを次のように変更します。

Scenes/Main.cs

private void ActivateRemoteConfigValues() {
    // TODO: Activate fetched Remote Config values (102)
    FirebaseRemoteConfig.ActivateFetched();
}

Start() メソッドを変更する

アプリの起動時にアプリが Remote Config の値をフェッチして有効にするようにするには、Main.cs ファイルの Start() メソッドを次のように変更します。

Scenes/Main.cs

void Start () {
    ...
    Firebase.FirebaseApp.CheckAndFixDependenciesAsync().ContinueWith(task => {
        ...
    }).ContinueWith(task => { 
        // TODO: Call InitAndFetchRemoteConfig() (102)
        InitAndFetchRemoteConfig();
    }).ContinueWith(task => {
        // TODO: Call ActivateRemoteConfigValues() (102)
        ActivateRemoteConfigValues();

        // Enable 'Start a game' button
        UnityMainThreadDispatcher.Instance()
            .Enqueue(() => buttonStartGame.interactable = true);
    });
    #else
    QuizAnalytics.SetScreenName(QuizAnalytics.SCREEN_MAIN);

    // TODO: Call InitAndFetchRemoteConfig() (102)
    InitAndFetchRemoteConfig().ContinueWith(task => {
        // TODO: Call ActivateRemoteConfigValues() (102)
        ActivateRemoteConfigValues();
    });
    #endif
}

Remote Config から報酬額を取得する

GameSettings クラスを変更して、Remote Config から報酬額を取得します。

Game/GameSettings.cs

// TODO: Import Firebase.RemoteConfig (102)
using Firebase.RemoteConfig;

namespace AwesomeDrawingQuiz.Game {
    public class GameSettings {

        ...
        
        // TODO: Apply reward amount from the Remote Config (102)
        public const string KEY_REWARD_AMOUNT = "reward_amount";

        public static GameSettings Instance {
            get {
                return instance;
            }
        }

        ...

        public int RewardAmount {
            get {
                // TODO: Apply reward amount from the Remote Config (102)
                return (int) FirebaseRemoteConfig.GetValue(KEY_REWARD_AMOUNT).LongValue;
            }
            private set { }
        }
    }
}

コンソールから Remote Config パラメータを作成する

次に、報酬額の新しい Remote Config パラメータを作成して、その値をオンザフライで調整できるようにします。

新しいパラメータを作成するには、Firebase コンソールに移動し、先ほど作成した Awesome Drawing Quiz プロジェクトを選択します。[Remote Config -> 最初のパラメータを追加] ボタンをクリックします。

7f52617141c53726.png

パラメータに reward_amount という名前を付け、デフォルト値を 1 に設定します。[パラメータを追加] ボタンをクリックします。

cbc771fd1685b29c.png

[変更を公開] ボタンをクリックして、変更をユーザーに公開します。

d6a6aa4a60e06ee9.png

6. Remote Config を使用してアプリの動作を変更する

Awesome Drawing Quiz の報酬額を、アプリのコードを更新することなく Firebase コンソールで設定できるようになりました。

このセクションでは、リワード広告を視聴した後にアプリでヒントとして 2 文字を表示するように、報酬額を 1 から 2 に変更します。

reward_amount パラメータのデフォルト値を更新

Firebase コンソールに移動し、先ほど作成した Awesome Drawing Quiz プロジェクトを選択します。[Remote Config] をクリックし、リストから reward_amount をクリックします。次に、デフォルト値を 2 に変更し、[更新] ボタンをクリックします。

9a9bd8a26a39bfe3.png

[変更を公開] ボタンをクリックして、変更をユーザーに公開します。

d6a6aa4a60e06ee9.png

アプリの動作の変更を確認する

アプリの動作変更を確認するには、プロジェクトを再度実行します。リワード広告の視聴が完了すると、Remote Config コンソールで設定したとおり、アプリで報酬として2 文字が表示されます。

リワード広告を視聴する前

報酬として 2 つの文字を公開

7. 報酬額を最適化するテストを作成します。

アプリのアップデートを公開しなくても、報酬の金額を変更できるようになりました。ただし、変更した量がアプリにとって適切かどうかを判断するにはどうすればよいでしょうか?

Firebase A/B Testing を使用すると、アプリを更新したり、各テストのパフォーマンスを実行して追跡するための別のツールを構築したりすることなく、テストを実施してアプリの全体的なユーザー エクスペリエンスを最適化できます。

テストを設計する

新しいテストを作成する前に、テストの明確な目標を設定する必要があります。新しいテストを作成する前に、次のチェックリストを確認してください。

  • What(何を最適化したいか): 最適化したい内容を明確にします。(ゲームの難易度、広告のタイミングや表示など)
  • 理由: テストを実施するビジネス上の目標は何ですか?(例: 広告収入を最大化する、ユーザー維持率を高めるなど)
  • 対象: テストの対象となるのは誰ですか?(例: すべてのユーザー、特定のユーザー オーディエンスなど)

この Codelab では、Awesome Drawing Quiz の 1 日あたりのユーザー エンゲージメントを最大化するために、報酬額の値を最適化するテストを作成します。

テストを作成する

Firebase コンソールで Awesome Drawing Quiz プロジェクトを開きます。[A/B テスト] メニューを選択し、[テストを作成] ボタンをクリックします。

[Remote Config] を選択して、Remote Config テストを作成します。

f38a85328ab54e7e.png

次のスクリーンショットに示すように、テストに「Amount of the Reward」という名前を付けます。

15d552adb61c0b08.png

ターゲティング オプションを設定します。この Codelab では、Awesome Drawing Quiz のユーザーの 100% を対象にします。

61b316741a63050f.png

テストの主な目的は、1 日のユーザー エンゲージメントを最大化する最適な値を見つけることであるため、追跡するメインの指標として [1 日のユーザー エンゲージメント] を選択します。

694641b57d90ff65.png

最後に、コントロール グループとバリエーション グループを設定して、どちらのグループのパフォーマンスが高いかを確認します。コントロール グループから reward_amount を選択し、その値を変更しないままにします。バリエーション グループの名前を「Less reward」に変更し、reward_amount の値を 1 に変更します。

10ed7f5b06858519.png

この設定では、「報酬が少ない」グループのユーザーには報酬として文字が 1 つ付与され、「コントロール グループ」のユーザーには報酬として文字が 2 つ付与されます。その結果、報酬額がユーザーに与える影響を確認できます。

[確認] ボタンをクリックすると、次のようにテストの概要が表示されます。

ae6477ce79f6265d.png

テストを実施する

[テストを開始] ボタンをクリックして、テストを実行します。テストの開始後にテスト構成を変更することはできません。

7131bf9b4fa74fa5.png

8. テストを管理する

テストの進行状況を確認する

テストの進捗状況は、Firebase コンソールの [A/B Testing] メニューで確認できます。次のスクリーンショットをご覧ください。カードには、過去 30 分間にテストに参加したユーザー数も表示されます。

8a7009bdd8871d95.png

リストからテストをクリックすると、テストの詳細が表示されます。テストでリーダー(パフォーマンスが最も高いバリエーション)を宣言できるようになるまで、「リーダーを宣言するには時期尚早です」というメッセージが表示されます。

a4e7ca3e3f4711cd.png

テストがしばらく実行されると、[改善の概要] セクションに、テストで収集されたデータが表示されるようになります。各バリエーションのパフォーマンスを比較して、どちらのパフォーマンスが高いかを確認できます。次のスクリーンショットは、[改善の概要] セクションの例を示しています。

e2d00fc27c053fd3.png

[改善の概要] セクションの下の表で、テストの目標指標の詳細と、テストでトラッキングされているその他の指標を確認できます。次のスクリーンショットは、指標の詳細セクションの例を示しています。

c3859d642f85cc52.png

リーダーをすべてのユーザーにロールアウトする

目標指標に対する「リーダー」、つまり最良のバリエーションを見つけるのに十分な期間テストを実行したら、次は全ユーザーにテストを展開します。A/B テストで明確なリーダーが特定されると、そのバリアントをすべてのユーザーにロールアウトするよう促されます。

86cb6a6c07516634.png

ただし、テストで明確な候補が示されなかった場合でも、バリアントをすべてのユーザーに展開できます。

テストの詳細画面で、コンテキスト メニュー(73afe611adf58774.png)をクリックし、[バリアントを展開] をクリックします。

374e1c72be1d0656.png

すべてのユーザーにロールアウトするバリエーションを選択し、[Remote Config で確認] ボタンをクリックして、Remote Config で変更を行う前に変更を確認します。

e176f6e6a72c754.png

下書きに問題がないことを確認したら、[変更を公開] ボタンをクリックして、すべてのユーザーに変更を反映します。

d65d545620ce93f6.png

9. 完了

AdMob と Firebase 102 Unity Codelab を完了しました。この Codelab の完成したコードは、android_studio_folder.png102-complete フォルダにあります。