1. Introdução
Os anúncios são uma parte crucial da experiência geral do usuário no seu app. Boas implementações de anúncios podem ajudar a melhorar a experiência geral do app e até mesmo a retenção e o engajamento dos usuários. Por exemplo, com os anúncios premiados, você pode oferecer aos usuários moedas ou itens no app por assistir anúncios em vídeo. Assim, eles podem alcançar novos níveis, em vez de ficarem presos e desistirem.
No entanto, criar uma excelente experiência de anúncios não é fácil. Você pode ter dúvidas como: com que frequência devo mostrar esses anúncios? Onde e quando você deve mostrá-los? Qual deve ser o prêmio? Infelizmente, a resposta varia de app para app e de posição para posição. Não existe uma resposta única para todos os casos.
Com o Google Analytics para Firebase, a AdMob e várias outras ferramentas eficientes e fáceis de usar oferecidas pelo Firebase, ficou muito mais fácil e simples ajustar seu app com base em dados. Hoje, vamos mostrar como começar!
O que você vai criar
Este é o primeiro de três codelabs que vão ajudar você a criar um app chamado Awesome Drawing Quiz, um jogo em que os jogadores adivinham o nome do desenho. Ele vai mostrar como incorporar anúncios premiados e serviços do Firebase no seu jogo.
Neste codelab, você vai integrar o Google Analytics para Firebase e registrar alguns eventos importantes do app. Além disso, você vai aprender a ler as análises de aplicativos mostradas no console do Firebase.
|
|
Se você encontrar algum problema (bugs no código, erros gramaticais, instruções pouco claras, etc.) neste codelab, informe o problema no link Informar um erro no canto inferior esquerdo do codelab.
O que você vai aprender
- Como configurar o Google Analytics para Firebase no seu app
- Como gravar os eventos do app
- Como ler a análise de aplicativos mostrada no console do Firebase
O que é necessário
- O Android Studio versão 4.1 ou mais recente.
- Uma Conta do Google
- Um dispositivo de teste com Android 5.0 ou mais recente e um cabo USB para conectar o dispositivo ou um Android Emulator executando AVD (dispositivo virtual Android) com uma imagem do sistema compatível com a Google Play Store/APIs do Google
Como você classificaria seu nível de experiência com a AdMob?
Qual é seu nível de experiência com o Firebase?
2. Configurar o ambiente de desenvolvimento
Baixar o código
Clique no botão abaixo para fazer o download de todo o código deste codelab:
Descompacte o arquivo ZIP transferido por download. Isso vai descompactar uma pasta raiz chamada admob-firebase-codelabs-android.
...ou clone o repositório do GitHub pela linha de comando.
$ git clone https://github.com/googlecodelabs/admob-firebase-codelabs-android
O repositório contém quatro pastas:
101-base: código inicial que você vai criar neste codelab.
101-complete_and_102-base: código completo para este codelab e inicialização para o codelab 102.
102-complete: código completo para o codelab 102.
Importar o app inicial
Inicie o Android Studio e escolha Import project na tela de boas-vindas. Em seguida, selecione o diretório 101-base no código baixado.
Agora o projeto deve estar aberto no Android Studio.
3. Configurar um bloco de anúncios em vídeo premiado (opcional)
Para sua conveniência, o app inicial já inclui um bloco de anúncios em vídeo premiado dedicado. Você pode pular esta etapa se não quiser criar uma nova conta na AdMob.
Para criar um novo app da AdMob na sua conta, siga estas instruções:
- Acesse o Console da AdMob.
- No menu Apps, clique em Adicionar app.
- Quando perguntarem "Você publicou seu app no Google Play ou na App Store?", responda NÃO.
- Dê o nome "Awesome Drawing Quiz" ao app, escolha "Android" como plataforma e clique em Adicionar.
Depois de criar um app da AdMob na sua conta, siga as etapas descritas abaixo para criar um bloco de anúncios em vídeo premiados.
- Clique no menu Apps no front-end da AdMob e selecione Awesome Drawing Quiz na lista de apps.
- Clique em ADICIONAR BLOCO DE ANÚNCIOS para criar um bloco de anúncios em vídeo premiados.
- Selecione Premiado para o formato do anúncio.

- Dê o nome que preferir ao bloco de anúncios. Em seguida, defina o valor da recompensa como 1 e o item como "dica". Essa é a recompensa que o app oferece aos usuários atualmente. Clique em CRIAR BLOCO DE ANÚNCIOS para criar um bloco de anúncios em vídeo premiados.

- Quando a criação for concluída, você verá instruções semelhantes a estas:

- Volte ao Projeto do Android e atualize as constantes de ID do app da AdMob e ID do bloco de anúncios para as que você criou na etapa anterior.
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. Configurar projeto do Firebase
Criar um projeto no console do Firebase
- Acesse o Console do Firebase.
- Selecione Adicionar projeto e nomeie o projeto como "Awesome Drawing Quiz". Verifique se o botão de opção Ativar o Google Analytics neste projeto está ativado.
- Selecione a conta do Google Analytics que você planeja usar. Para a maioria das pessoas, basta selecionar a opção Conta padrão para Firebase. No entanto, se você quiser usar outra conta do Google Analytics, selecione-a aqui.
- Clique em Criar projeto.
Adicionar o app Android
- Na tela de visão geral do novo projeto, clique em Adicionar o Firebase ao app Android.
- Insira o nome do pacote do codelab: com.codelab.awesomedrawingquiz
- Defina um apelido para o app: Awesome Drawing Quiz
- Deixe o campo SHA-1 em branco, já que ele não é necessário para este projeto.
- Selecione Registrar app para registrar seu app.
Adicionar o arquivo google-services.json ao app
Em seguida, uma tela vai aparecer para que você faça o download de um arquivo de configuração com todos os metadados necessários do Firebase para seu app. Clique em Fazer o download do google-service.json e copie o arquivo para o diretório
app no seu projeto.

Declarar versões de dependência
Vamos começar adicionando a versão de cada dependência necessária para integrar o Firebase ao projeto. Abra o arquivo dependencies.gradle localizado na raiz do projeto e adicione o plug-in google-services, o SDK do Analytics e a versão do SDK do Firebase Core.
dependencies.gradle
ext {
...
// TODO: Declare google-services plugin version (101)
googleServicesPluginVersion = '4.3.4'
...
// TODO: Declare Firebase BOM version (101)
firebaseBomVersion = '26.2.0'
...
}
Aplicar o plug-in google-services ao seu app
O plug-in google-services usa o arquivo google-services.json para configurar seu aplicativo para usar o Firebase.
Adicione google-services como um caminho de classe no arquivo build.gradle localizado no diretório raiz do projeto.
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"
...
}
}
...
Em seguida, aplique o plug-in google-services adicionando uma linha no arquivo app/build.gradle da seguinte maneira:
app/build.gradle
apply plugin: 'com.android.application'
// TODO: Apply google-services plugin (101)
apply plugin: 'com.google.gms.google-services'
android {
...
}
dependencies {
...
}
Adicionar o SDK do Firebase ao projeto
Ainda no arquivo app/build.gradle, adicione o SDK do Analytics às dependências do app.
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'
...
}
...
Sincronize seu projeto com arquivos do Gradle
Para garantir que todas as dependências estejam disponíveis para seu app, sincronize o projeto com os arquivos do Gradle. Selecione o menu File > Sync Project with Gradle Files para sincronizar seu projeto com arquivos do Gradle.
5. Vincular a AdMob ao projeto do Firebase
Siga estas etapas para vincular seus apps ao Firebase:
- Faça login na sua conta da AdMob em https://apps.admob.com.
- Clique em "Apps" na barra lateral.
- Selecione "Awesome Drawing Quiz". Se ele não aparecer na lista de apps recentes, clique em Ver todos os aplicativos para pesquisar todos aqueles que você adicionou à AdMob.
- Clique em Configurações do app na barra lateral.
- Clique em Vincular ao Firebase.
- Selecione a opção Vincular a um projeto do Firebase e criar um novo app do Firebase. Em seguida, selecione o projeto "Awesome Drawing Quiz" no menu suspenso.
- Depois de clicar no botão CONTINUAR, você vai ver a mensagem Vinculação concluída. Clique no botão "CONCLUÍDO" para terminar.
Depois de vincular seu app da AdMob ao Projeto do Firebase, você vai desbloquear alguns recursos adicionais no console da AdMob e no console do Firebase, como:
Card de receita (AdMob)
No card "Receita", você pode conferir todas as possíveis fontes de receita em um só lugar. As fontes de receita aceitas são as seguintes:
- AdMob (estimada)
- Redes de publicidade de mediação (observadas)
- Compras no app
- Compras de e-commerce

Card de métricas do usuário (AdMob)
No card de métricas do usuário, você pode conferir como as mudanças na experiência dos anúncios podem afetar o comportamento do usuário.

Relatório de anúncios premiados (AdMob)
O relatório de anúncios premiados oferece várias métricas que ajudam os editores a entender como os usuários interagem com os anúncios premiados.

Card "Total de receita" (Firebase)
Depois de vincular seu app da AdMob ao Firebase, o card "Receita total" no painel do Firebase vai mostrar a receita da AdMob, além das compras no app e de e-commerce.

Relatórios de eventos de anúncio (Firebase)
Os eventos específicos de anúncios (clique, impressão e recompensa) são coletados automaticamente e podem ser usados no Google Analytics para Firebase.

6. Executar o projeto
Depois de compilar e executar o projeto, a tela abaixo vai aparecer quando o app for iniciado.

Depois de clicar em INICIAR UM JOGO,um desenho vai aparecer na tela. Sua missão é adivinhar o nome do desenho usando a dica mostrada na parte de cima, com base na qual você pode deduzir a primeira letra e o comprimento do nome do desenho.

Se você não tiver ideia de qual é o nome do desenho, clique no botão PULAR para pular a fase.
Talvez você queira uma pista extra para adivinhar a resposta. Para receber uma dica extra, clique no botão DICA e assista um anúncio em vídeo premiado. Depois de assistir o anúncio, uma letra extra será revelada como recompensa.

7. Adicionar eventos do app
Para entender melhor a jornada do usuário no Awesome Drawing Quiz,defina alguns eventos personalizados que rastreiam o comportamento do usuário no jogo da seguinte forma:
Nome do evento | Acionado… | Parâmetros |
game_start | quando um usuário inicia um novo jogo. | nenhum |
level_start | quando um usuário inicia um novo nível (um novo teste de desenho) em uma fase. (há seis níveis em um estágio) | level_name |
level_wrong_answer | quando um usuário envia uma resposta errada. | level_name |
ad_reward_prompt | quando um usuário toca no botão de dica e é solicitado a assistir um anúncio em vídeo premiado. | ad_unit_id |
ad_reward_impression | quando um usuário começa a assistir um anúncio em vídeo premiado. | ad_unit_id |
level_success | quando um usuário envia uma resposta correta (conclui um nível). | level_name, number_of_attempts, elapsed_time_sec, hint_used |
level_fail | quando um usuário pula um nível. | level_name, number_of_attempts, elapsed_time_sec, hint_used |
game_complete | quando o jogo terminar | number_of_correct_answers |
Confira a descrição de cada parâmetro associado a cada evento:
Nome do evento | Nome do parâmetro | Descrição |
level_start | level_name | Nome do desenho mostrado no nível (por exemplo, "banana") |
level_wrong_answer | level_name | quando um usuário envia uma resposta errada. |
ad_reward_prompt | ad_unit_id | Um ID de bloco de anúncios usado para mostrar um anúncio em vídeo premiado. |
ad_reward_impression | ad_unit_id | Um ID de bloco de anúncios usado para mostrar um anúncio em vídeo premiado. |
level_success | level_name | Nome do desenho mostrado no nível (por exemplo, "banana") |
level_success | number_of_attempts | Número de tentativas feitas para limpar um nível |
level_success | elapsed_time_sec | Tempo decorrido para concluir um nível, em segundos |
level_success | hint_used | Se um usuário usou uma dica (assistiu um anúncio em vídeo premiado) ou não para passar de um nível (1: usou uma dica / 0: passou de um nível sem uma dica) |
level_fail | level_name | Nome do desenho mostrado no nível (por exemplo, "banana") |
level_fail | number_of_attempts | Número de tentativas feitas para limpar um nível |
level_fail | elapsed_time_sec | Tempo decorrido para concluir um nível, em segundos |
level_fail | hint_used | Se um usuário usou uma dica (assistiu um anúncio em vídeo premiado) ou não para passar de um nível (1: usou uma dica / 0: passou de um nível sem uma dica) |
game_complete | number_of_correct_answers | Número de fases concluídas no jogo |
Criar uma classe auxiliar para registrar eventos personalizados
Para registrar o evento do Google Analytics com facilidade, crie uma classe auxiliar para gerenciar eventos personalizados.
Primeiro, crie um novo arquivo Kotlin (não uma classe Kotlin) e nomeie-o como QuizAnalytics.kt no pacote com.codelab.awesomedrawingquiz. Crie campos que definam o nome dos seus eventos personalizados e os parâmetros deles.
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"
Em seguida, adicione funções de extensão que ajudam a registrar eventos personalizados no jogo. A maioria dos eventos personalizados inclui parâmetros para que você tenha mais contexto de cada um deles. Além disso, alguns nomes e parâmetros de eventos (FirebaseAnalytics.Event.LEVEL_NAME e FirebaseAnalytics.Event.LEVEL_START) já estão definidos pelo Google Analytics, então vamos usá-los.
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())
}
}
Registrar eventos de análise no jogo
Na classe GameViewModel, adicione uma nova propriedade para a instância FirebaseAnalytics.
GameViewModel.kt
class GameViewModel(
...
// TODO: Accept FirebaseAnalytics instance as a parameter (101)
private val analytics: FirebaseAnalytics,
) : ViewModel() {
...
}
Em seguida, na classe AwesomeDrawingQuizViewModelFactory, adicione uma nova propriedade como fez anteriormente em GameViewModel.
AwesomeDrawingQuizViewModelFactory.kt
class AwesomeDrawingQuizViewModelFactory(
...
// TODO: Accept FirebaseAnalytics instance as a parameter (101)
private val analytics: FirebaseAnalytics,
) : ViewModelProvider.Factory {
...
}
Em seguida, na classe AwesomeDrawingQuiz, adicione a função provideFirebaseAnalytics() e atualize a função provideViewModelFactory() para transmitir a instância FirebaseAnalytics ao AwesomeDrawingViewModelFactory.
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
...
}
Agora você já pode implementar eventos personalizados. Primeiro, na função startGame(), chame logGameStart() para indicar que um jogo começou.
Como logGameStart() é uma função de extensão da classe FirebaseAnalytics, é possível chamá-la da instância da classe FirebaseAnalytics.
GameViewModel.kt
fun startGame() {
...
// TODO: Log game_start event (101)
analytics.logGameStart()
...
}
Em seguida, na função checkAnswer(), adicione eventos level_success e 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)
...
}
}
Em seguida, na função skipLevel(), adicione o evento level_fail para marcar o nível como falho.
GameViewModel.kt
fun skipLevel() {
...
// TODO: Log level_fail event (101)
analytics.logLevelFail(
levelName = drawing.word,
numberOfAttempts = numAttempts,
elapsedTimeSec = elapsedTimeInSeconds,
hintUsed = isHintUsed,
)
...
}
Em seguida, implemente as funções logAdRewardPrompt() e logAdRewardImpression() para rastrear o comportamento do usuário em relação ao anúncio em vídeo premiado.
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)
}
Por fim, modifique as funções requestNewDrawing() e finishGame() para adicionar os eventos personalizados level_start e 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. Depurar eventos do Google Analytics
Use o DebugView no Console do Firebase para verificar se os eventos estão sendo registrados corretamente. Com o DebugView, você pode ver dados brutos de eventos registrados pelo seu app quase em tempo real em dispositivos de desenvolvimento.
Isso é muito útil para fins de validação durante a fase de instrumentação do desenvolvimento e pode ajudar você a descobrir erros na sua implementação do Analytics.
Ativar o modo de depuração
Em geral, os eventos registrados no seu app são agrupados durante um período de aproximadamente uma hora e depois são carregados juntos. Para validar sua implementação de análises em tempo real, ative o modo de depuração no seu dispositivo de desenvolvimento para fazer upload de eventos com atrasos mínimos.
Para ativar o modo de depuração, siga estas etapas:
- Abra a janela de ferramentas Terminal no Android Studio (View > Tool Windows > Terminal).

- Execute o seguinte comando (verifique se o dispositivo Android de teste está conectado ao computador ou se o Android Emulator está em execução):
adb shell setprop debug.firebase.analytics.app com.codelab.awesomedrawingquiz
O modo de depuração vai permanecer ativado até que você execute a linha de comando a seguir:
adb shell setprop debug.firebase.analytics.app .none.
Depurar eventos do Google Analytics com o DebugView
Depois de ativar o modo de depuração no seu dispositivo de teste, acesse o projeto no Console do Firebase e selecione Analytics > DebugView no menu. Em seguida, no dispositivo de teste, jogue para ver os eventos sendo registrados e mostrados no relatório do DebugView.

Clique no nome de um evento para acessar informações detalhadas sobre ele. Por exemplo, a captura de tela a seguir mostra detalhes de parâmetros associados ao evento level_start.

Consulte o artigo da Central de Ajuda sobre a DebugView para mais detalhes.
9. Ativar dimensões e métricas personalizadas
Por padrão, o Google Analytics para Firebase coleta o número total de eventos. Para cada parâmetro de evento que você quer analisar, é necessário ativar explicitamente a geração de relatórios. Em seguida, o Google Analytics para Firebase pode mostrar outros cards com as estatísticas dos parâmetros personalizados.
Para registrar dimensões e métricas personalizadas:
- Acesse o console do Firebase e selecione o projeto Awesome Drawing Quiz que você criou antes.
- Clique em Analytics > Eventos no menu de navegação.
- Clique em Gerenciar definições personalizadas.
- Na guia "Dimensões personalizadas", clique em Criar dimensões personalizadas.
- No campo "Nome do parâmetro do evento", digite level_name e clique em Salvar para concluir o registro do parâmetro.

- Em seguida, selecione a guia Métricas personalizadas e clique em Criar métricas personalizadas.
- Insira o nome e a unidade de medida para os seguintes parâmetros.
Nome do parâmetro | Tipo de parâmetro | Unidade de medida |
number_of_attempts | Número | Padrão |
hint_used | Número | Padrão |
elapsed_time_sec | Número | Segundos |
number_of_correct_answers | Número | Padrão |
10. Receber insights do relatório de eventos
Como você adicionou alguns eventos ao jogo, já é possível responder às perguntas sobre o comportamento do usuário. Confira alguns insights que você pode receber do relatório de eventos do Firebase.
Qual nível tem o maior número de respostas erradas?
Para responder a essa pergunta, descubra quantos eventos level_wrong_answer foram acionados por nível.
Clique no level_wrong_answer no relatório de eventos. No relatório de eventos level_wrong_answer, encontre o card level_name. Os valores associados ao parâmetro level_name vão aparecer no card da seguinte forma:

De acordo com a captura de tela acima, é fácil descobrir que o horizonte tem o maior número de respostas erradas, o que significa que é difícil para os usuários em comparação com os outros níveis.
Com base no insight que você teve aqui, é possível decidir não oferecer níveis difíceis para usuários iniciantes e manter uma alta taxa de retenção.
Em média, quantas tentativas foram feitas para passar de fase?
No Awesome Drawing Quiz, os usuários podem enviar a resposta de cada nível quantas vezes quiserem.
Como você ativou os relatórios de parâmetros no parâmetro number_of_attempts do evento level_success, é possível conferir as métricas detalhadas desse parâmetro.
Clique no evento level_success no relatório de eventos. No relatório de eventos level_success, encontre o card number_of_attemps. O número médio de tentativas vai aparecer no card da seguinte forma:

Use esse insight para otimizar a dificuldade média do jogo. Por exemplo, se o número médio de tentativas estiver muito próximo de 1, considere tornar o jogo um pouco mais desafiador.
Os usuários tentaram resolver a questão recebendo uma dica, mesmo que não tenham conseguido passar de um nível no final?
Quando um usuário decide pular um nível, um evento level_fail é acionado. Há muitos motivos para a decisão do usuário.
No entanto, como o jogo pode dar uma dica depois que o usuário assiste a um anúncio em vídeo premiado, é importante saber se ele tentou passar de fase com a ajuda da dica.
Clique no evento level_fail no relatório de eventos. No relatório de eventos level_fail, encontre o card hint_used. Você vai ver o número médio de parâmetros de evento hint_used. O valor do parâmetro é 1 se uma dica foi usada e 0 se não foi.

Se os números no card hint_used estiverem próximos de zero, isso significa que a recompensa (dica) não é útil o suficiente para esses usuários. Além disso, você perde a oportunidade de aumentar a receita com um anúncio em vídeo premiado.
Portanto, considere oferecer uma recompensa maior para que os usuários se envolvam mais com o jogo, aumentando a receita dos anúncios em vídeo premiados.
Em média, quantas fases foram concluídas em cada jogo?
Cada jogo do Awesome Drawing Quiz tem seis níveis. Quando o usuário termina seis níveis (não importa se ele passou ou não em cada um), um evento game_complete é acionado com number_of_correct_answers como parâmetro. O parâmetro number_of_correct_answers indica o número de níveis em que o usuário deu uma resposta correta.
Clique no evento game_complete no relatório de eventos. No relatório de eventos game_complete, encontre o card number_of_correct_answers. Você vai ver o número médio de parâmetros de evento number_of_correct_answers.

Se o número médio de níveis concluídos for muito baixo, considere reorganizar os níveis do jogo para ajudar as pessoas a passar dos primeiros níveis com mais facilidade e continuar jogando sem perder o interesse.
11. Pronto!
Você concluiu o codelab do Android AdMob+Firebase 101. O código completo deste codelab está na pasta
101-complete_and_102-base.
Na próxima parte do codelab AdMob + Firebase, você vai aprender a usar um funil para visualizar o fluxo de eventos do app. A próxima parte também vai abordar como usar a Configuração remota e o teste A/B para otimizar o valor de parâmetro no jogo sem uma atualização do app.