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

1. はじめに

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

一般的に、アプリのアップデートは長期的な変更をアプリに適用したい場合に有効です。しかし、アプリの一部のパラメータの値を頻繁に調整する場合はどうでしょうか。あるいは、アプリの最適な構成を見つけるためにテストを実施したい場合はどうすればよいでしょうか。

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

また、アプリのユーザー ジャーニーが意図したとおりに機能しているかどうかを、どのように判断できるでしょうか。Google Play Console に対するユーザーのコメントをお役立てください。ただし、明確な決定を下すのに十分な精度ではない可能性があります。

学習内容

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

必要なもの

  • Unity 2018.4.4f1 以降
  • Xcode 10 以降(iOS のターゲットをビルドする場合)
  • Google アカウント
  • Android 5.0 以降を搭載し、デバイスを接続するための USB ケーブルが付属したテストデバイス、または Google Play ストアや Google API をサポートするシステム イメージがインストールされた、AVD(Android Virtual Device)を搭載した Android Emulator
  • iOS 8.0 以降を実行している iOS デバイスまたはシミュレータ

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

初心者 中級者 上級者

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

<ph type="x-smartling-placeholder"></ph> 初心者 中級 上達 をご覧ください。

2. 開発環境を設定する

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

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

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

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

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

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

  • android_studio_folder.png101 ベース - この Codelab で作成する開始コード。
  • android_studio_folder.png101-complete_and_102-base - この 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 Plugin 3.18.1 パッケージをダウンロードします。(この Codelab は、他のバージョンのプラグインと互換性がない場合があります)。
  2. Awesome Drawing Quiz Unity プロジェクト内プロジェクトで [Assets] >パッケージをインポート >カスタム パッケージ
  3. ダウンロードしたプロジェクトに GoogleMobileAds.unitypackage をインポートします。

AdMob アプリ ID も設定する必要があります。Unity エディタで、[Assets] >Google モバイル広告 >設定] を選択します。

44fc84fe88235c1f.png

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

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

a6ad7402d4daf330.png

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

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

704aa8e97df63c4e.png

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

  1. Firebase Unity SDK 5.5.0 をダウンロードし、適切な場所で解凍します。(SDK をすでにダウンロードしている場合は、この手順をスキップしてください)
  2. Awesome Drawing Quiz Unity プロジェクトを開き、[Assets] >パッケージをインポート >カスタム パッケージ
  3. 解凍した SDK から、Firebase 向け Google アナリティクス 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

例として、[Level success Rate] をクリックします。ファネルの詳細が次のように表示されます。

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] >パッケージをインポート >カスタム パッケージ
  3. 解凍した SDK から Remote Config SDK(dotnet4/FirebaseRemoteConfig.unitypackage)をインポートします。
  4. [Import Unity package] ウィンドウで [Import] をクリックします。

Firebase.RemoteConfig をインポートする

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

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 から報酬額を取得する

Remote Config から報酬額を取得するように GameSettings クラスを変更します。

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 コンソールで設定できるようになりました。

このセクションでは、報酬額を 1 から 2 に変更して、リワード広告の視聴後にさらに 2 キャラクターがヒントとして表示されるようにします。

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

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

9a9bd8a26a39bfe3.png

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

d6a6aa4a60e06ee9.png

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

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

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

特典としてさらに 2 文字を表示

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

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

Firebase A/B Testing を使用すると、アプリ全体のユーザー エクスペリエンスを最適化するためのテストを実施できます。アプリを更新したり、各テストを実行してパフォーマンスを追跡するための別のツールを作成したりする必要はありません。

テストを設計する

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

  • 項目: 何を最適化したいですか?(ゲームの難易度、広告のタイミングや表示頻度など)
  • 理由: テストを実施する際のビジネス目標は何ですか?(例: 広告収益の最大化、ユーザー維持率の向上など)
  • 対象者: テストの対象者(例: すべてのユーザー、特定のユーザー オーディエンスなど)

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

テストを作成する

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

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

f38a85328ab54e7e.png

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

15d552adb61c0b08.png

ターゲティング オプションを構成します。この Codelab では、Awesome Drawing Quiz のすべてのユーザーを対象にします。

61b316741a63050f.png

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

694641b57d90ff65.png

最後に、どちらのグループのパフォーマンスが優れているかを把握できるように、コントロールとパターン グループを設定します。コントロール グループから [reward_amount] を選択し、値は変更しないでください。バリエーション グループには「Less Rewards」という名前を付けてから、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

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

テストを継続し、最も効果的なパターン(最も効果的なパターン)を特定できたら、そのテストを 100% のユーザーに展開します。A/B Testing で明確な最も効果的なパターンが判明したら、その代表パターンをすべてのユーザーに展開するよう促します。

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 フォルダで確認できます。