1. はじめに
広告は、アプリの全体的なユーザー エクスペリエンスにおいて重要な役割を果たします。広告を適切に実装すると、アプリ全体のユーザー エクスペリエンスが向上し、ユーザーの維持率やエンゲージメントを高めることもできます。たとえば、リワード広告を使用すると、動画広告を視聴したユーザーにアプリ内通貨やアイテムを提供できます。これにより、ユーザーは行き詰まって離脱する可能性があった状況を乗り越えて、新たな高みに到達できます。
しかし、優れた広告エクスペリエンスを実現するのは簡単ではありません。このような広告をどのくらいの頻度で表示すればよいか、疑問に思うかもしれません。どこで、いつ表示すべきですか?どのような賞にすべきですか?残念ながら、アプリごと、プレースメントごとに回答が異なります。万能な答えはありません。
Firebase 向け Google アナリティクス、AdMob、その他 Firebase が提供する強力かつ使いやすいツールを使用することで、データに基づいた方法でアプリを微調整することが、はるかに簡単かつ効率的になりました。今回は、その方法をご紹介します。
作成するアプリの概要
この Codelab は、ユーザーが描画の名前を推測するゲームの Awesome Drawing Quiz というアプリを作成する手順を説明する 3 つの Codelab のうちの最初の Codelab です。このセッションでは、リワード広告と Firebase サービスをゲームに組み込む方法について説明します。
この Codelab では、Firebase 向け Google アナリティクスを統合して、重要なアプリイベントを記録します。また、Firebase コンソールに表示されるアプリ分析の読み取り方法についても説明します。
|
|
この Codelab で問題(コードのバグ、文法的な誤り、不明確な表現など)が見つかった場合は、Codelab の左下隅にある [誤りを報告] から問題を報告してください。
学習内容
- アプリで Firebase 向け Google アナリティクスを設定する方法
- アプリ イベントを記録する方法
- Firebase コンソールに表示されるアプリ分析の読み方
必要なもの
- Android Studio バージョン 4.1 以降
- Google アカウント
- Android 5.0 以降を搭載したテストデバイス(デバイスを接続するための USB ケーブル付き)、または Play ストア/Google API をサポートするシステム イメージを搭載した AVD(Android 仮想デバイス)を実行する Android エミュレータ
AdMob の使用経験についてお答えください。
ご自身の Firebase 使用経験をどのように評価されますか。
2. 開発環境をセットアップする
コードをダウンロードする
次のボタンをクリックして、この Codelab のすべてのコードをダウンロードします。
ダウンロードした zip ファイルを解凍すると、これにより、admob-firebase-codelabs-android という名前のルートフォルダが展開されます。
または、コマンドラインから GitHub リポジトリのクローンを作成します。
$ git clone https://github.com/googlecodelabs/admob-firebase-codelabs-android
リポジトリには、次の 4 つのフォルダが含まれています。
101-base - この Codelab で作成する開始コード。
101-complete_and_102-base - この Codelab の完成したコードと 102 Codelab のスターター。
102-complete - 102 Codelab の完成したコード。
スターター アプリをインポートする
Android Studio を起動し、ウェルカム画面で [Import project] を選択します。次に、ダウンロードしたコードから 101-base ディレクトリを選択します。
これで、Android Studio でプロジェクトが開きます。
3. 動画リワード広告ユニットを設定する(省略可)
スターター アプリには、便宜上、専用の動画リワード広告ユニットがすでに含まれています。AdMob アカウントで新しいアカウントを作成したくない場合は、この手順をスキップしてもかまいません。
アカウントで新しい AdMob アプリを作成する手順は次のとおりです。
- AdMob コンソールに移動します。
- [アプリ] メニューで、[アプリを追加] をクリックします。
- 「Google Play または App Store でアプリを公開したことがありますか?」という質問が表示されたら、「いいえ」と答えます。
- アプリに「Awesome Drawing Quiz」という名前を付け、プラットフォームとして [Android] を選択し、[追加] をクリックします。
アカウントで AdMob アプリを作成したら、以下の手順に沿って新しいリワード動画広告ユニットを作成します。
- AdMob フロントエンドで [アプリ] メニューをクリックし、アプリのリストから [Awesome Drawing Quiz] を選択します。
- [広告ユニットを追加] をクリックして、新しいリワード動画広告ユニットを作成します。
- [広告フォーマット] で [リワード] を選択します。

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

- 正常に作成されると、次のような手順が表示されます。

- Android プロジェクトに戻り、AdMob アプリ ID と広告ユニット 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 コンソールから新しいプロジェクトを作成する
- Firebase コンソールに移動します。
- [プロジェクトを追加] を選択し、プロジェクトに「Awesome Drawing Quiz」という名前を付けます。[このプロジェクトで Google アナリティクスを有効にする] ラジオボタンがオンになっていることを確認します。
- 使用する Google アナリティクス アカウントを選択します。ほとんどの場合は [Firebase のデフォルト アカウント] オプションを選択すれば十分ですが、使用したい別の Google アナリティクス アカウントがある場合は、ここで選択します。
- [プロジェクトを作成] をクリックします。
Android アプリを追加する
- 新しいプロジェクトの概要画面で、[Android アプリに Firebase を追加] をクリックします。
- コードラボのパッケージ名(com.codelab.awesomedrawingquiz)を入力します。
- アプリのニックネーム(Awesome Drawing Quiz)を設定します。
- このプロジェクトでは SHA-1 は不要なので、SHA-1 フィールドは空白のままにします。
- [アプリを登録] を選択してアプリを登録します。
アプリに google-services.json ファイルを追加する
次に、アプリに必要なすべての Firebase メタデータを含む構成ファイルをダウンロードできる画面が表示されます。[Download google-service.json] をクリックし、ファイルをプロジェクトの
app ディレクトリにコピーします。

依存関係のバージョンを宣言する
まず、プロジェクトに Firebase を統合するために必要な各依存関係のバージョンを追加します。プロジェクトのルートにある dependencies.gradle ファイルを開き、google-services プラグイン、Firebase アナリティクス 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 ファイルに 1 行を追加して、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 ファイルと同期します。[File] > [Sync Project with Gradle Files] メニューを選択して、プロジェクトを Gradle ファイルと同期します。
5. AdMob を Firebase プロジェクトにリンクする
アプリを Firebase にリンクする手順は以下のとおりです。
- https://apps.admob.com から AdMob アカウントにログインします。
- サイドバーで [アプリ] をクリックします。
- [Awesome Drawing Quiz] を選択します。最近使ったアプリのリストに目的のアプリが表示されない場合は、[すべてのアプリを表示] をクリックし、AdMob に追加したすべてのアプリから目的のアプリを選択します。
- サイドバーで [アプリの設定] をクリックします。
- [Firebase にリンク] をクリックします。
- [既存の Firebase プロジェクトにリンクして、新しい Firebase アプリを作成する] オプションを選択します。プルダウン メニューから [Awesome Drawing Quiz] プロジェクトを選択します。
- [続行] ボタンをクリックすると、[リンクが完了しました] というメッセージが表示されます。[完了] ボタンをクリックして終了します。
AdMob アプリを Firebase プロジェクトにリンクすると、AdMob と Firebase の両方のコンソールで、次のような追加機能が利用できるようになります。
収益カード(AdMob)
[収益] カードでは、考えられるすべての収益源を 1 か所で包括的に確認できます。サポートされている収益源は次のとおりです。
- AdMob(推定値)
- メディエーション広告ネットワーク(実際の値)
- アプリ内購入
- e コマース購入数

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

リワード広告レポート(AdMob)
リワード広告レポートでは、ユーザーがリワード広告にどのように関わっているかを把握するのに役立つさまざまな指標を確認できます。

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

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

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

[ゲームを開始] をクリックすると、画面に絵が表示されます。ミッションは、上部に表示されるヒントを使用して絵の名前を推測することです。ヒントから、絵の名前の最初の文字と長さを推測できます。

絵の名前がわからない場合は、[SKIP] ボタンをクリックしてレベルをスキップできます。
答えを推測するのに役立つ追加のヒントが必要になる場合があります。[ヒント] ボタンをクリックして動画リワード広告を視聴すると、追加のヒントを得ることができます。広告の視聴が完了すると、報酬として 1 文字が追加で公開されます。

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 | ゲームでクリアしたレベルの数 |
カスタム イベントをロギングするためのヘルパークラスを作成する
分析イベントを簡単に記録するために、カスタム イベントを管理するヘルパークラスを作成します。
まず、com.codelab.awesomedrawingquiz パッケージの下に、QuizAnalytics.kt という名前の新しい Kotlin ファイル(Kotlin クラスではない)を作成します。カスタム イベントの名前とそのパラメータを定義するフィールドを作成します。
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_NAME と FirebaseAnalytics.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 時間の周期でバッチ処理され、まとめてアップロードされます。アナリティクスの実装をその場で検証するには、開発デバイスでデバッグモードを有効にして、最小限の遅延でイベントをアップロードする必要があります。
デバッグモードを有効にするには、次の手順を行います。
- Android Studio で Terminal ツール ウィンドウを開きます([View] > [Tool Windows] > [Terminal])。

- 次のコマンドを実行します(テスト用の 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 レポートに表示されることを確認します。

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

詳しくは、DebugView のヘルプセンター記事をご覧ください。
9. カスタム ディメンションとカスタム指標を有効にする
デフォルトでは、Firebase 向け Google アナリティクスはイベントの総数を収集します。関心のあるイベント パラメータごとに、そのパラメータのレポートを明示的にオンにする必要があります。Firebase 向け Google アナリティクスでは、カスタム パラメータの統計情報を表示する追加のカードが表示されます。
カスタム ディメンションとカスタム指標を登録するには:
- Firebase コンソールに移動し、先ほど作成した Awesome Drawing Quiz プロジェクトを選択します。
- ナビゲーション メニューで [分析] > [イベント] をクリックします。
- [カスタム定義を管理] をクリックします。
- [カスタム ディメンション] タブで、[カスタム ディメンションを作成] をクリックします。
- [イベント パラメータ名] フィールドに「level_name」と入力し、[保存] をクリックしてパラメータの登録を完了します。

- 次に、[カスタム指標] タブを選択し、[カスタム指標を作成] をクリックします。
- 次のパラメータのパラメータ名と測定単位を入力します。
パラメータ名 | パラメータの型 | 測定単位 |
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 パラメータに関連付けられた値が次のように表示されます。

上のスクリーンショットから、horizon の不正解数が最も多いことがわかります。これは、他のレベルと比較してユーザーにとって難しいことを意味します。
この分析情報に基づいて、初心者ユーザーには難しいレベルを提供しないことで、高いリテンション率を維持できます。
レベルをクリアするまでに平均何回試行されましたか?
Awesome Drawing Quiz では、ユーザーは各レベルの答えを何度でも送信できます。
level_success イベントの number_of_attempts パラメータでパラメータ レポートを有効にしているため、そのパラメータの詳細な指標を確認できます。
イベント レポートで level_success イベントをクリックします。level_success イベント レポートで、number_of_attemps カードを見つけます。カードには、次のように平均試行回数が表示されます。

この分析情報を基に、ゲームの難易度を平均的に最適化できます。たとえば、平均試行回数が 1 に近い場合は、ゲームの難易度を少し上げることを検討してください。
ユーザーは、最終的にレベルをクリアできなかったとしても、ヒントを得て問題を解決しようとしましたか?
ユーザーがレベルをスキップすると、level_fail イベントがトリガーされます。ユーザーが決定した理由はさまざまです。
ただし、ゲームではリワード動画広告を視聴した後にヒントが表示されるため、ユーザーがヒントを利用してレベルをクリアしようとしたかどうかを把握することが重要です。
イベント レポートで level_fail イベントをクリックします。level_fail イベント レポートで、hint_used カードを見つけます。hint_used イベント パラメータの平均数が表示されます。ヒントが使用された場合、パラメータの値は 1 になり、ヒントが使用されなかった場合、パラメータの値は 0 になります。

hint_used カードの数値が 0 に近い場合、そのユーザーにとって報酬(ヒント)が十分な助けになっていないことを示しています。また、動画リワード広告による収益を増やす機会も失われています。
そのため、より大きな報酬を提供して、ユーザーがゲームに深く関与できるようにすることを検討してください。そうすることで、リワード動画広告からの収益を増やすことができます。
各ゲームでクリアされたレベルの平均数はどのくらいですか?
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 イベント パラメータの平均数が表示されます。

クリアされたレベルの平均数が少なすぎる場合は、ゲーム内のレベルを再構成して、ユーザーが初期のレベルをより簡単にクリアできるようにすることを検討してください。そうすることで、ユーザーは興味を失うことなくゲームをプレイし続けることができます。
11. 完了
AdMob と Firebase の基本 Android Codelab が完了しました。この Codelab の完成したコードは、
101-complete_and_102-base フォルダにあります。
AdMob+Firebase Codelab の次のパートでは、ファネルを使用してアプリのイベントフローを可視化する方法を学びます。次のパートでは、Remote Config と A/B テストを使用して、アプリを更新せずにゲーム内のパラメータ値を最適化する方法についても説明します。