AdMob+Firebase 101 Android: 設定とアナリティクスの基本

1. はじめに

広告は、アプリの全体的なユーザー エクスペリエンスの重要な要素です。適切な広告の実装は、アプリの全体的なエクスペリエンスの向上に役立つだけでなく、ユーザー維持率とエンゲージメントの向上にもつながります。たとえば、リワード広告では、動画広告を視聴するためのアプリ内通貨やアイテムをユーザーに提供できます。これにより、ユーザーは新たな高みに到達し、それがなければ行き詰まって離脱する可能性がある状況でも、新たな高みに到達することができます。

しかし、優れた広告エクスペリエンスを生み出すのは容易ではありません。「これらの広告をどのくらいの頻度で表示すべきか」といった疑問が生じるかもしれません。いつ、どこで表示すべきか。どのような賞にするか残念ながら、その答えはアプリによって、また配置によっても異なります。すべてのケースに当てはまる万能の答えはありません。

Firebase 向け Google アナリティクス、AdMob、および Firebase が提供するその他の強力かつ使いやすいツールにより、データに基づく方法でアプリを微調整する作業がはるかに容易かつ合理的に行えるようになりました。本日は、その方法をご紹介します。

作成するアプリの概要

この Codelab は、Awesome Drawing Quiz というアプリの作成手順を説明する 3 つの Codelab のうちの 1 件です。これは、プレーヤーが描画の名前を推測できるゲームです。リワード広告と Firebase サービスをゲームに組み込む方法を紹介します。

この Codelab では、Firebase 向け Google アナリティクスを統合して重要なアプリイベントを記録します。また、Firebase コンソールに表示されるアプリ解析の見方についても説明します。

この Codelab で問題(コードのバグ、文法的な誤り、不明確な表現など)が見つかった場合は、Codelab の左下隅にある [誤りを報告] から問題を報告してください。

学習内容

  • Firebase 向け Google アナリティクスをアプリに設定する方法
  • アプリイベントを記録する方法
  • Firebase コンソールに表示されるアプリ解析の見方

必要なもの

  • Android Studio バージョン 4.1 以降
  • Google アカウント
  • Android 5.0 以降を搭載したテストデバイスと、デバイスを接続するための USB ケーブル、または Google Play ストアや Google API をサポートするシステム イメージがインストールされた、AVD(Android Virtual Device)を搭載した Android Emulator

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

初心者 中級者 上級者

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

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

2. 開発環境を設定する

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

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

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

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

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

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

  • android_studio_folder.png101 ベース - この Codelab で作成する開始コード。
  • android_studio_folder.png101-complete_and_102-base - この Codelab の最終的なコードおよび入門編です。
  • android_studio_folder.png102-complete — 102 Codelab の完成したコード。

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

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

Android Studio でプロジェクトが開いているはずです。

3. 動画リワード広告ユニットを設定する(省略可)

スターター アプリには、便宜上、専用の動画リワード広告ユニットがすでに含まれています。AdMob アカウントで新規作成しない場合は、この手順をスキップできます。

アカウントで新しい AdMob アプリを作成する手順は次のとおりです。

  1. AdMob コンソールに移動します。
  2. [アプリ] メニューから [アプリを追加] をクリックします。
  3. [Google Play または App Store でアプリを公開しましたか] というメッセージが表示されたら、「いいえ」と回答します。
  4. アプリに「Awesome Drawing Quiz」という名前を付けます。プラットフォームとして [Android] を選択し、[追加] をクリックします。

アカウントで AdMob アプリを作成したら、以下の手順に沿って新しい動画リワード広告ユニットを作成します。

  1. AdMob のフロントエンドで [アプリ] メニューをクリックし、アプリリストから [Awesome Drawing Quiz] を選択します。
  2. [広告ユニットを追加] をクリックして、新しい動画リワード広告ユニットを作成します。
  3. 広告フォーマットには [リワード] を選択します。

7672f41ec611101b.png

  1. 任意の広告ユニットの名前を入力します。次に、報酬の金額を 1 に、報酬のアイテムを「ヒント」(アプリが現在ユーザーに提供している報酬)に設定します。[広告ユニットを作成] をクリックして、新しい動画リワード広告ユニットを作成します。

6d067814a2c38264.png

  1. 正常に作成されると、ff872a005a07b75e.png のような手順が表示されます。
  2. Android プロジェクトに戻り、AdMob アプリ ID と広告ユニット ID の定数を、前のステップで作成したものに変更します。

strings.xml

<!-- Update the value with your AdMob app id -->
<string name="admob_app_id">YOUR_ADMOB_APP_ID</string>

GameActivity.kt

// Update the value with your Rewarded Video ad unit id
private const val AD_UNIT_ID = "<YOUR_AD_UNIT_ID>";

4. Firebase プロジェクトを設定する

Firebase コンソールで新しいプロジェクトを作成する

  1. Firebase コンソールに移動します。
  2. [プロジェクトを追加] を選択し、プロジェクトに「Awesome Drawing Quiz」という名前を付けます。[このプロジェクトの Google アナリティクスを有効にする] ラジオボタンがオンになっていることを確認します。
  3. 使用する Google アナリティクス アカウントを選択します。ほとんどの場合は [Firebase のデフォルト アカウント] を選択するだけで十分ですが、別の Google アナリティクス アカウントを使用する場合は、ここで選択します。
  4. [プロジェクトを作成] をクリックします。

Android アプリを追加する

  1. 新しいプロジェクトの概要画面で、[Android アプリに Firebase を追加] をクリックします。
  2. Codelab のパッケージ名(com.codelab.awesomedrawingquiz)を入力します。
  3. アプリのニックネームを設定する: Awesome Drawing Quiz
  4. このプロジェクトでは SHA-1 が必要ないため、[SHA-1] フィールドは空白のままにします。
  5. [アプリを登録] を選択してアプリを登録します。

アプリに google-services.json ファイルを追加する

次に、アプリに必要なすべての Firebase メタデータを含む構成ファイルをダウンロードできる画面が表示されます。[google-service.json をダウンロード] をクリックし、ファイルをプロジェクトの android_studio_folder.pngapp ディレクトリにコピーします。

32419a0fa25a1405.png

依存関係のバージョンを宣言する

まず、プロジェクトに Firebase を統合するために必要な各依存関係のバージョンを追加します。プロジェクトのルートにある dependencies.gradle ファイルを開き、google-services プラグイン、Firebase Analytics SDK、Firebase Core SDK バージョンを追加します。

dependencies.gradle

ext {
    ...

    // TODO: Declare google-services plugin version (101)
    googleServicesPluginVersion = '4.3.4'

    ...

    // TODO: Declare Firebase BOM version (101)                                                                                                                                                                                                   
    firebaseBomVersion = '26.2.0'

    ...
}

アプリに google-services プラグインを適用する

google-services プラグインは、google-services.json ファイルを使用して、Firebase を使用するようにアプリケーションを構成します。

プロジェクトのルート ディレクトリにある build.gradle ファイルに、google-services をクラスパスとして追加します。

build.gradle

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    ...
    
    dependencies {
        classpath "com.android.tools.build:gradle:$androidPluginVersion"

        // TODO: Add google-services plugin (101)
        classpath "com.google.gms:google-services:$googleServicesPluginVersion"

        ...
    }
}

...

次に、次のように app/build.gradle ファイルに行を追加して、google-services プラグインを適用します。

app/build.gradle

apply plugin: 'com.android.application'

// TODO: Apply google-services plugin (101)
apply plugin: 'com.google.gms.google-services'

android {
    ...
}

dependencies {
    ...
}

プロジェクトに Firebase SDK を追加する

引き続き app/build.gradle ファイルで、アプリの依存関係にアナリティクス SDK を追加します。

app/build.gradle

apply plugin: 'com.android.application'

android {
    ...
}

dependencies {
    ...

    // TODO: Import the Firebase BoM (101)
    implementation platform("com.google.firebase:firebase-bom:$firebaseBomVersion")

    // COMPLETE: Add Firebase Analytics dependency (101)
    implementation 'com.google.firebase:firebase-analytics-ktx'

    ...
}

...

プロジェクトと Gradle ファイルを同期する

アプリですべての依存関係を使用できるようにするには、プロジェクトを Gradle ファイルと同期します。[ファイル >Sync Project with Gradle Files] メニューをクリックして、プロジェクトを Gradle ファイルと同期します。

5. AdMob を Firebase プロジェクトにリンクする

アプリを Firebase にリンクするには、次の手順を行います。

  1. https://apps.admob.com から AdMob アカウントにログインします。
  2. サイドバーで [アプリ] をクリックします。
  3. [Awesome Drawing Quiz] を選択します。最近使ったアプリのリストに目的のアプリが表示されない場合は、[アプリをすべて表示] をクリックして、AdMob に追加したすべてのアプリの一覧から検索できます。
  4. サイドバーの [アプリの設定] をクリックします。
  5. [Firebase にリンク] をクリックします。
  6. [既存の Firebase プロジェクトにリンクして新しい Firebase アプリを作成] オプションを選択します。次に、プルダウン メニューから [Awesome Drawing Quiz] プロジェクトを選択します。
  7. [続行] ボタンをクリックすると、「正常にリンクされました」というメッセージが表示されます。[DONE] ボタンをクリックして終了します。

AdMob アプリを Firebase プロジェクトにリンクすると、AdMob と Firebase コンソールで次のような追加機能を利用できるようになります。

収益カード(AdMob)

収益カードでは、考えられるすべての収益源を 1 か所で包括的に把握できます。サポートされている収益源は次のとおりです。

  • AdMob(推定)
  • メディエーション向け広告ネットワーク(計測データ)
  • アプリ内購入
  • e コマースでの購入

10fe118249e11150.png

ユーザーに関する指標カード(AdMob)

ユーザーに関する指標のカードでは、広告エクスペリエンスの変更がユーザー行動にどのように影響するかを確認できます。

5f56366f1b31d4a1.png

リワード広告レポート(AdMob)

リワード広告レポートでは、ユーザーがリワード広告をどのように操作しているかを把握するためのさまざまな指標を確認できます。

658a2868777690ea.png

総収益カード(Firebase)

AdMob アプリを Firebase にリンクすると、Firebase ダッシュボードの [合計収益] カードに、アプリ内購入と e コマース購入とともに AdMob からの収益が表示されます。

98cb283977b023a.png

広告イベント レポート(Firebase)

広告固有のイベント(クリック イベント、インプレッション イベント、リワード イベント)は自動的に収集され、Firebase 向け Google アナリティクスで使用できます。

bf77bd8c00c1441b.png

6. プロジェクトを実行する

プロジェクトをコンパイルして実行すると、アプリの起動時に次の画面が表示されます。

15f1d8041988974c.png

[ゲームを開始] をクリックすると、画面に描画が表示されます。あなたの任務は、上部に表示されたヒントを使って図形描画の名前を推測することです。ヒントを参考にして、図形描画の名前の最初の文字と長さを推測します。

8e87e96256d6874a.png 9c4a0143c3234cb2.png

図形描画の名前がわからない場合は、[スキップ] ボタンをクリックしてそのレベルをスキップできます。

答えを推測するのに役立つ手がかりがさらに必要になることもあります。[HINT] ボタンをクリックして動画リワード広告を視聴すると、その他の手がかりが得られます。広告の視聴が完了すると、特典として追加の文字が開示されます。

edcf6f0d833ea4ea.png 47ab9a07b1c71711.png

7. アプリイベントを追加する

Awesome Drawing Quiz のユーザー ジャーニーについて深く理解するために、ゲーム内でのユーザーの行動を追跡するカスタム イベントを次のように定義します。

イベント名

トリガー

パラメータ

game_start

ユーザーが新しいゲームを開始したとき

なし

level_start

ユーザーがステージ内で新しいレベル(新しい描画クイズ)を開始したとき。(1 つのステージに 6 つのレベルがある)

level_name

level_wrong_answer

ユーザーが間違った回答を送信したとき

level_name

ad_reward_prompt

ユーザーがヒントボタンをタップし、動画リワード広告を視聴するよう求められたとき

ad_unit_id

ad_reward_impression

ユーザーが動画リワード広告の視聴を開始したとき

ad_unit_id

level_success

ユーザーが正解を送信したとき(レベルをクリアしたとき)

level_name、number_of_attempts、elapsed_time_sec、hint_used

level_fail

ユーザーがレベルをスキップしたとき

level_name、number_of_attempts、elapsed_time_sec、hint_used

game_complete

試合が終了したとき

number_of_correct_answers

各イベントに関連付けられた各パラメータの説明は次のとおりです。

イベント名

パラメータ名

説明

level_start

level_name

レベルに表示される図形描画の名前(例:「banana」)

level_wrong_answer

level_name

ユーザーが間違った回答を送信したとき

ad_reward_prompt

ad_unit_id

動画リワード広告の表示に使用される広告ユニット ID

ad_reward_impression

ad_unit_id

動画リワード広告の表示に使用される広告ユニット ID

level_success

level_name

レベルに表示される図形描画の名前(例:「banana」)

level_success

number_of_attempts

レベルのクリアが試行された回数

level_success

elapsed_time_sec

レベルをクリアするまでの経過時間(秒)

level_success

hint_used

ユーザーがヒントを使用した(動画リワード広告を視聴した)かどうか(1: ヒントを使用した / 0: ヒントなしでレベルをクリアした)かどうか

level_fail

level_name

レベルに表示される図形描画の名前(例:「banana」)

level_fail

number_of_attempts

レベルのクリアが試行された回数

level_fail

elapsed_time_sec

レベルをクリアするまでの経過時間(秒)

level_fail

hint_used

ユーザーがヒントを使用した(動画リワード広告を視聴した)かどうか(1: ヒントを使用した / 0: ヒントなしでレベルをクリアした)かどうか

game_complete

number_of_correct_answers

ゲームでクリアしたレベルの数

カスタム イベントをロギングするためのヘルパークラスを作成する

分析イベントを簡単にロギングするために、カスタム イベントを管理するヘルパークラスを作成します。

まず、(Kotlin クラスではなく)新しい Kotlin ファイルを作成し、com.codelab.awesomedrawingquiz パッケージの下に QuizAnalytics.kt という名前を付けます。カスタム イベントの名前とそのパラメータを定義するフィールドを作成します。

QuizAnalytics.kt

private const val EVENT_AD_REWARD_PROMPT = "ad_reward_prompt"

private const val EVENT_AD_REWARD_IMPRESSION = "ad_reward_impression"

private const val EVENT_LEVEL_FAIL = "level_fail"

private const val EVENT_LEVEL_SUCCESS = "level_success"

private const val EVENT_LEVEL_WRONG_ANSWER = "level_wrong_answer"

private const val EVENT_GAME_START = "game_start"

private const val EVENT_GAME_COMPLETE = "game_complete"

private const val PARAM_AD_UNIT_ID = "ad_unit_id"

private const val PARAM_ELAPSED_TIME_SEC = "elapsed_time_sec"

private const val PARAM_HINT_USED = "hint_used"

private const val PARAM_NUMBER_OF_ATTEMPTS = "number_of_attempts"

private const val PARAM_NUMBER_OF_CORRECT_ANSWERS = "number_of_correct_answers"

次に、ゲーム内のカスタム イベントをログに記録するための拡張関数を追加します。なお、ほとんどのカスタム イベントにはパラメータが含まれているため、各イベントの詳細を確認できます。また、いくつかのイベント名とパラメータ(FirebaseAnalytics.Event.LEVEL_NAMEFirebaseAnalytics.Event.LEVEL_START)はアナリティクスですでに定義されているため、今回はこれらを使用します。

QuizAnalytics.kt

...

fun FirebaseAnalytics.logGameStart() = logEvent(EVENT_GAME_START, null)

fun FirebaseAnalytics.logLevelStart(levelName: String) {
    logEvent(FirebaseAnalytics.Event.LEVEL_START) {
        param(FirebaseAnalytics.Param.LEVEL_NAME, levelName)
    }
}

fun FirebaseAnalytics.logLevelWrongAnswer(levelName: String) {
    logEvent(EVENT_LEVEL_WRONG_ANSWER) {
        param(FirebaseAnalytics.Param.LEVEL_NAME, levelName)
    }
}

fun FirebaseAnalytics.logAdRewardPrompt(adUnitId: String) {
    logEvent(EVENT_AD_REWARD_PROMPT) {
        param(PARAM_AD_UNIT_ID, adUnitId)
    }
}

fun FirebaseAnalytics.logAdRewardImpression(adUnitId: String) {
    logEvent(EVENT_AD_REWARD_IMPRESSION) {
        param(PARAM_AD_UNIT_ID, adUnitId)
    }
}

fun FirebaseAnalytics.logLevelSuccess(
    levelName: String,
    numberOfAttempts: Int,
    elapsedTimeSec: Int,
    hintUsed: Boolean
) {
    logEvent(EVENT_LEVEL_SUCCESS) {
        param(FirebaseAnalytics.Param.LEVEL_NAME, levelName)
        param(PARAM_NUMBER_OF_ATTEMPTS, numberOfAttempts.toLong())
        param(PARAM_ELAPSED_TIME_SEC, elapsedTimeSec.toLong())
        param(PARAM_HINT_USED, if (hintUsed) 1 else 0)
    }
}

fun FirebaseAnalytics.logLevelFail(
    levelName: String,
    numberOfAttempts: Int,
    elapsedTimeSec: Int,
    hintUsed: Boolean
) {
    logEvent(EVENT_LEVEL_FAIL) {
        param(FirebaseAnalytics.Param.LEVEL_NAME, levelName)
        param(PARAM_NUMBER_OF_ATTEMPTS, numberOfAttempts.toLong())
        param(PARAM_ELAPSED_TIME_SEC, elapsedTimeSec.toLong())
        param(PARAM_HINT_USED, if (hintUsed) 1 else 0)
    }
}

fun FirebaseAnalytics.logGameComplete(
    numberOfCorrectAnswers: Int
) {
    logEvent(EVENT_GAME_COMPLETE) {
        param(PARAM_NUMBER_OF_CORRECT_ANSWERS, numberOfCorrectAnswers.toLong())
    }
}

ゲームで分析イベントをログに記録する

GameViewModel クラスで、FirebaseAnalytics インスタンスの新しいプロパティを追加します。

GameViewModel.kt

class GameViewModel(
    ...
    // TODO: Accept FirebaseAnalytics instance as a parameter (101)
    private val analytics: FirebaseAnalytics,
) : ViewModel() {
   ...
}

次に、AwesomeDrawingQuizViewModelFactory クラスで、以前 GameViewModel で行ったように新しいプロパティを追加します。

AwesomeDrawingQuizViewModelFactory.kt

class AwesomeDrawingQuizViewModelFactory(
    ...
    // TODO: Accept FirebaseAnalytics instance as a parameter (101)
    private val analytics: FirebaseAnalytics,
) : ViewModelProvider.Factory {
    ...
}

次に、AwesomeDrawingQuiz クラスに provideFirebaseAnalytics() 関数を追加し、FirebaseAnalytics インスタンスを AwesomeDrawingViewModelFactory に渡すように provideViewModelFactory() 関数を更新します。

AwesomeDrawingQuiz.kt

class AwesomeDrawingQuiz : Application() {

    ...

    fun provideViewModelFactory() = AwesomeDrawingQuizViewModelFactory(
        this,
        provideGameSettings(),
        // TODO: Pass FirebaseAnalytics instance as a parameter (101)
        provideFirebaseAnalytics(),
    )

    // TODO: Provide FirebaseAnalytics instance (101)
    private fun provideFirebaseAnalytics() = Firebase.analytics

    ...

}

これで、カスタム イベントを実装する準備が整いました。まず、startGame() 関数で logGameStart() を呼び出して、ゲームが開始されたことを示します。

logGameStart()FirebaseAnalytics クラスの拡張関数であるため、FirebaseAnalytics クラスのインスタンスから呼び出すことができます。

GameViewModel.kt

fun startGame() {
    ...

    // TODO: Log game_start event (101)
    analytics.logGameStart()

    ...
}

次に、checkAnswer() 関数に、level_success イベントと level_wrong_answer イベントを追加します。

GameViewModel.kt

fun checkAnswer(userAnswer: String) {
    ...
    if (correct) {
        ...

        // TODO: Log level_success event (101)
        analytics.logLevelSuccess(
            levelName = drawing.word,
            numberOfAttempts = numAttempts,
            elapsedTimeSec = elapsedTimeInSeconds,
            hintUsed = isHintUsed,
        )

        ...
    } else {
        // TODO: Log level_wrong_answer event (101)
        analytics.logLevelWrongAnswer(levelName = drawing.word)

        ...
    }
}

次に、skipLevel() 関数に level_fail イベントを追加して、レベルを失敗としてマークします。

GameViewModel.kt

fun skipLevel() {
   ...

    // TODO: Log level_fail event (101)
    analytics.logLevelFail(
        levelName = drawing.word,
        numberOfAttempts = numAttempts,
        elapsedTimeSec = elapsedTimeInSeconds,
        hintUsed = isHintUsed,
    )

    ...
}

次に、logAdRewardPrompt() 関数と logAdRewardImpression() 関数を実装して、動画リワード広告に対するユーザーの行動をトラッキングします。

GameViewModel.kt

fun logAdRewardPrompt(adUnitId: String) {
    // TODO: Log ad_reward_prompt event (101)
    analytics.logAdRewardPrompt(adUnitId)
}

fun logAdRewardImpression(adUnitId: String) {
    // TODO: Log ad_reward_impression event (101)
    analytics.logAdRewardImpression(adUnitId)
}

最後に、requestNewDrawing() 関数と finishGame() 関数を変更して、level_start カスタム イベントと game_complete カスタム イベントを追加します。

GameViewModel.kt

private fun requestNewDrawing() {
    ...

    drawingRequestDisposable = drawingDao.getRandomDrawings(seenWords)
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe { d ->
            ...

            // TODO: Log level_start event (101)
            analytics.logLevelStart(d.word)

            ...
        }
}

private fun finishGame() {
    // TODO: Log game_complete event (101)
    analytics.logGameComplete(numCorrectAnswers)

    ...
}

8. 分析イベントをデバッグする

Firebase コンソールの DebugView を使用すると、イベントが正しくロギングされていることを確認できます。DebugView を使用すると、開発デバイス上のアプリによって記録された未加工のイベントデータをほぼリアルタイムで表示できます。

これは、開発の計測フェーズで検証を行うのに非常に便利で、分析実装のエラーを発見するのに役立ちます。

デバッグモードを有効にする

通常、アプリで記録されたイベントは、約 1 時間にわたってバッチ処理され、まとめてアップロードされます。アナリティクスの実装をその場で検証するには、開発デバイスでデバッグモードを有効にして、最小限の遅延でイベントをアップロードする必要があります。

デバッグモードを有効にする手順は次のとおりです。

  1. Android Studio で [Terminal] ツール ウィンドウを開きます([View] > [Tool Windows] > [Terminal])。

c8dc1b4f08a224b8.png

  1. 次のコマンドを実行します(テスト用 Android デバイスがパソコンに接続されているか、Android Emulator が実行されていることを確認してください)。
adb shell setprop debug.firebase.analytics.app com.codelab.awesomedrawingquiz

この動作は、次のコマンドを実行してデバッグモードを明示的に無効にするまで継続します。

adb shell setprop debug.firebase.analytics.app .none.

DebugView を使用してアナリティクス イベントをデバッグする

テストデバイスでデバッグモードを有効にしたら、Firebase コンソールでプロジェクトに移動し、[アナリティクス] >DebugView] を選択します。次に、テストデバイスでゲームをプレイし、イベントがログに記録されて DebugView レポートに表示されることを確認します。

827059255d09ac00.png

イベント名をクリックすると、各イベントの詳細情報を確認できます。たとえば、次のスクリーンショットは、level_start イベントに関連付けられたパラメータの詳細を示しています。

475db00d05d03ab8.png

詳しくは、DebugView ヘルプセンターの記事をご覧ください。

9. カスタム ディメンションとカスタム指標を有効にする

Firebase 向け Google アナリティクスは、デフォルトでイベントの合計数を収集します。測定するイベント パラメータごとに、そのパラメータのレポートを明示的に有効にする必要があります。Firebase 向け Google アナリティクスでは、カスタム パラメータの統計情報を示す追加のカードを表示できます。

カスタム ディメンションとカスタム指標を登録するには:

  1. Firebase コンソールに移動し、先ほど作成した Awesome Drawing Quiz プロジェクトを選択します。
  2. [アナリティクス] >[イベント] を選択します。
  1. [カスタム定義を管理] をクリックします。
  2. [カスタム ディメンション] タブで、[カスタム ディメンションを作成] をクリックします。
  3. [イベント パラメータ名] 欄に「level_name」と入力し、[保存] をクリックしてパラメータの登録を完了します。

3d20ee9d7de74e9b.png

  1. 次に、[カスタム指標] タブを選択し、[カスタム指標を作成] をクリックします。
  2. パラメータ名と、以下のパラメータの測定単位を入力します。

パラメータ名

パラメータ タイプ

測定単位

number_of_attempts

数値

標準

hint_used

数値

標準

elapsed_time_sec

数値

number_of_correct_answers

数値

標準

10. イベント レポートから分析情報を取得する

ゲームにいくつかのイベントを追加したので、ゲームのユーザーの行動に関する質問に答えられるはずです。ここでは、Firebase イベント レポートで確認できる情報をいくつかご紹介します。

不正解数が最も多いレベルはどれですか。

この質問に答えるには、各レベルごとにトリガーされた level_wrong_answer イベントの数を確認する必要があります。

イベント レポートの level_wrong_answer をクリックします。level_wrong_answer イベント レポートで level_name カードを探します。そのカードの level_name パラメータに関連付けられた値は次のように表示されます。

25da426bbc0c612c.png

上のスクリーンショットによると、ホライズンが最も不正解数が最も多いことが簡単にわかります。つまり、他のレベルと比較して、ユーザーが回答しづらいということです。

ここで得られた分析情報を参考にして、初心者ユーザーに難しいレベルを提示しないようにして、高い維持率を維持することができます。

レベルをクリアするために試行した平均回数

Awesome Drawing Quiz では、各レベルに好きなだけ回答を送信できます。

level_success イベントの number_of_attempts パラメータに関するパラメータ レポートを有効にしているため、そのパラメータの詳細な指標を確認できます。

イベント レポートで level_success イベントをクリックします。level_success イベント レポートで number_of_attemps カードを探します。カードの平均試行回数が次のように表示されます。

43de290f9f1a0ac9.png

ここからの分析情報を使用して、平均的なゲーム難易度を最適化できます。たとえば、平均試行回数が 1 回に近すぎる場合は、ゲームをもう少し難易度を上げてみましょう。

ユーザーは最後にレベルをクリアできませんでしたが、ヒントを表示することで質問に答えようとしましたか?

ユーザーがレベルをスキップすると、level_fail イベントがトリガーされます。ユーザーが判断する理由はさまざまです。

ただし、動画リワード広告の視聴後にゲームからヒントが提供されるため、ユーザーがヒントを活用してレベルをクリアしようとしたかどうかを確認することが重要です。

イベント レポートで level_fail イベントをクリックします。level_fail イベント レポートで hint_used カードを探します。hint_used イベント パラメータの平均数が表示されます。パラメータの値は、ヒントが使用された場合は 1、ヒントが使用されなかった場合は 0 になります。

313814372cd7c8a4.png

hint_used カード上の数字が 0 に近い場合は、報酬(ヒント)がユーザーの役に立つものではないことを示しています。また、動画リワード広告の収益を増やす機会を失っています。

そのため、ユーザーにゲームをより深く関わってもらい、動画リワード広告による収益を増やせるよう、報酬を増やすことをおすすめします。

1 回のゲームでクリアしたレベルは?

Awesome Drawing Quiz には、ゲームごとに合計 6 つのレベルがあります。ユーザーが 6 つのレベルをクリアすると(各レベルをクリアしたか失敗したかにかかわらず)、number_of_correct_answers をパラメータとして game_complete イベントがトリガーされます。number_of_correct_answers パラメータは、ユーザーが正解したレベルの数を示します。

イベント レポートで game_complete イベントをクリックします。game_complete イベント レポートで number_of_correct_answers カードを確認します。number_of_correct_answers イベント パラメータの平均数が表示されます。

d9eeaa019d1bceb4.png

クリアしたレベルの平均数が少なすぎる場合は、ユーザーが以前のレベルをクリアしやすくなるように、ゲームのレベルの並べ替えを検討して、関心を失わずにゲームを続けられるようにしましょう。

11. 完了

「AdMob + Firebase 101 Android Codelab」を修了しました。この Codelab の最終的なコードは、android_studio_folder.png101-complete_and_102-base フォルダで確認できます。

AdMob と Firebase の Codelab の次のパートでは、ファネルを使用してアプリのイベントフローを可視化する方法を学びます。次のパートでは、Remote Config と A/B Testing を使用して、アプリをアップデートせずにゲームのパラメータ値を最適化する方法も説明します。