Conceitos básicos do Unity na AdMob e no Firebase Princípios básicos do Google Analytics

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 ajudam a melhorar a experiência geral no app e até mesmo a retenção e o engajamento de usuários. Por exemplo, com os anúncios premiados, você pode recompensar os usuários com moeda do app ou itens por assistirem a anúncios em vídeo. Assim, eles alcançam novos patamares onde ficam presos e desistem.

No entanto, não é fácil criar uma experiência de anúncios excelente. Você pode se perguntar, por exemplo: com que frequência você deve exibir esses anúncios? Onde e quando você deve mostrá-los? Qual deve ser o prêmio? Infelizmente, a resposta varia de acordo com o app e com a posição. Não existe uma resposta única para todos.

Com o Google Analytics para Firebase, a AdMob e várias outras ferramentas eficientes e fáceis de usar que o Firebase oferece, ficou muito mais fácil e simplificado ajustar seu app com base em dados. Hoje, vamos mostrar como você pode começar.

O que você vai criar

Este é o primeiro de três codelabs que vão guiar você na criação de um app chamado Awesome Drawing Quiz, um jogo em que os jogadores podem adivinhar o nome do desenho. Ele demonstrará como incorporar anúncios premiados e serviços do Firebase ao seu jogo.

Neste codelab, você vai integrar o Google Analytics para Firebase para registrar alguns eventos importantes do app. Além disso, você vai aprender a ler a análise de aplicativos mostrada no console do Firebase.

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

  • Unity 2018.4.4f1 ou mais recente
  • Xcode 10 ou mais recente (para criar o destino para o iOS)
  • Uma Conta do Google
  • Um dispositivo de teste com Android 5.0 ou versões mais recentes com um cabo USB para conectar o dispositivo ou um Android Emulator executando um AVD(Android Virtual Device) com uma imagem do sistema que oferece suporte à Play Store/APIs do Google.
  • Um dispositivo iOS ou um simulador com iOS 8.0 ou versão mais recente.

Como você classificaria seu nível de experiência com a AdMob?

Iniciante Intermediário Proficiente

Como você classificaria seu nível de experiência com o Firebase?

Iniciante Intermediário Proficiente

2. Configurar o ambiente de desenvolvimento

Fazer o download do código

Clique no botão abaixo para fazer o download de todo o código para este codelab:

Descompacte o arquivo ZIP transferido por download. Isso descompactará uma pasta raiz chamada admob-firebase-codelabs-unity-master.

...ou clonar o repositório do GitHub pela linha de comando.

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

O repositório contém quatro pastas, da seguinte maneira:

  • android_studio_folder.png101-base: código inicial que você vai criar neste codelab.
  • android_studio_folder.png101-complete_and_102-base: código completo para este codelab e inicial para o codelab 102.
  • android_studio_folder.png102-complete: código completo para o codelab 102.

Preparar os arquivos necessários

O Awesome Drawing Quiz usa vários códigos de código aberto para compilar e executar o projeto.

Abra o terminal e acesse o diretório raiz do repositório. Em seguida, execute ./gradlew :prepareThirdPartyFiles (gradlew.bat :prepareThirdPartyFiles no Windows) no terminal para copiar os arquivos necessários para o projeto.

Importar o app inicial

Inicie o Unity e selecione Open na tela inicial. Em seguida, selecione o diretório 101-base no código que você baixou.

O projeto deve estar aberto no Unity.

3. Configurar 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 outra na sua conta da AdMob.

Configuração para Android

Para criar um novo app da AdMob na sua conta, siga as instruções abaixo:

  1. Acesse o Console da AdMob.
  2. No menu Apps, clique em Adicionar app.
  3. Quando aparecer a pergunta "Você publicou seu app no Google Play ou na App Store", responda "NÃO".
  4. Nomeie o app como Awesome Drawing Quiz. escolha Android como a plataforma e clique em Add.

Depois de criar um app da AdMob na sua conta, siga as etapas descritas abaixo para criar um novo bloco de anúncios em vídeo premiado.

  1. Clique no menu Apps no front-end da AdMob e selecione Awesome Drawing Quiz na lista de apps.
  2. Clique no menu Blocos de anúncios e, em seguida, em ADICIONAR BLOCO DE ANÚNCIOS para criar um novo bloco de anúncios em vídeo premiado.
  3. Selecione Premiado como formato do anúncio.

7672f41ec611101b.png

  1. Forneça o nome do bloco de anúncios como preferir. Em seguida, defina o valor do prêmio como 1 e o item como "hint" (prêmio que o app oferece atualmente aos usuários). Clique em CRIAR BLOCO DE ANÚNCIOS para criar um novo bloco de anúncios em vídeo premiado.

6d067814a2c38264.png

  1. Após a criação, serão exibidas instruções como as seguintes.

4bc1b3b341a5a81c.png

  1. Volte para o projeto do Unity e atualize as constantes dos IDs do app e do bloco de anúncios da AdMob para as que você criou na etapa anterior.

Ads/AdManager.cs (link em inglês)

namespace AwesomeDrawingQuiz.Ads {
    public class AdManager {

        public const string APP_ID_ANDROID = "YOUR_ADMOB_APP_ID";
        
        ...

        #elif UNITY_ANDROID
        private const string APP_ID = APP_ID_ANDROID;
        public const string AD_UNIT_ID = "<YOUR_AD_UNIT_ID>";

        ...
    }
}

Configuração para iOS

Para criar um novo app da AdMob na sua conta, siga as instruções abaixo:

  1. Acesse o Console da AdMob.
  2. No menu Apps, clique em Adicionar app.
  3. Quando aparecer a pergunta "Você publicou seu app no Google Play ou na App Store", responda "NÃO".
  4. Nomeie o app como Awesome Drawing Quiz. escolha iOS como a plataforma e clique em Adicionar.

Depois de criar um app da AdMob na sua conta, siga as etapas descritas abaixo para criar um novo bloco de anúncios em vídeo premiado.

  1. Clique no menu Apps no front-end da AdMob e selecione Awesome Drawing Quiz na lista de apps.
  2. Clique no menu Blocos de anúncios e, em seguida, em ADICIONAR BLOCO DE ANÚNCIOS para criar um novo bloco de anúncios em vídeo premiado.
  3. Selecione Premiado como formato do anúncio.

7672f41ec611101b.png

  1. Forneça o nome do bloco de anúncios como preferir. Em seguida, defina o valor do prêmio como 1 e o item como "hint" (prêmio que o app oferece atualmente aos usuários). Clique em CRIAR BLOCO DE ANÚNCIOS para criar um novo bloco de anúncios em vídeo premiado.

6d067814a2c38264.png

  1. Após a criação, serão exibidas instruções como as seguintes.

4bc1b3b341a5a81c.png

  1. Volte para o projeto do Unity e atualize as constantes dos IDs do app e do bloco de anúncios da AdMob para as que você criou na etapa anterior.

Ads/AdManager.cs (link em inglês)

namespace AwesomeDrawingQuiz.Ads {
    public class AdManager {

        public const string APP_ID_IOS = "YOUR_ADMOB_APP_ID";
        
        ...

        #elif UNITY_IOS
        private const string APP_ID = APP_ID_IOS;
        public const string AD_UNIT_ID = "<YOUR_AD_UNIT_ID>";

        ...
    }
}

4. Adicionar o plug-in dos anúncios para dispositivos móveis do Google para Unity

Importar o plug-in

Para veicular anúncios da AdMob no app Unity, adicione o plug-in dos anúncios para dispositivos móveis do Google para Unity ao projeto.

  1. Faça o download do pacote do plug-in dos anúncios para dispositivos móveis do Google para Unity 3.18.1. Este codelab pode não ser compatível com a outra versão do plug-in.
  2. No projeto do Unity Awesome Drawing Quiz. No projeto, navegue até Recursos > Importar pacote > Pacote personalizado.
  3. Importe o GoogleMobileAds.unitypackage para o projeto que você baixou.

Configurar o ID do app AdMob

No editor do Unity, selecione Assets > Anúncios para dispositivos móveis do Google > Configurações no menu.

44fc84fe88235c1f.png

Para ativar a AdMob, clique na caixa de seleção Ativado na seção Google AdMob. Em seguida, insira o ID do app AdMob da seguinte forma:

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

a6ad7402d4daf330.png

5. Configurar o projeto do Firebase

Criar um novo projeto no Console do Firebase

  1. Acesse o Console do Firebase.
  2. Selecione Adicionar projeto e dê a ele o nome Awesome Drawing Quiz.

Adicionar o app Unity

  1. Na tela de visão geral do novo projeto, clique em Adicionar o Firebase ao app do Unity.
  2. Marque a caixa de seleção "Registrar como app iOS".
  3. Insira o ID do pacote iOS como: com.codelab.awesomedrawingquiz.unity (em inglês).
  4. Dê um apelido ao app como: Awesome Drawing Quiz (Unity no iOS).
  5. Marque a caixa de seleção "Registrar como app Android".
  6. Digite o nome do pacote Android como: com.codelab.awesomedrawingquiz.unity (em inglês).
  7. Dê um apelido ao app como: Awesome Drawing Quiz (Unity no Android).
  8. Selecione Registrar app para registrar apps Android e iOS.

Adicionar arquivos de configuração do Firebase ao projeto do Unity

Em seguida, será exibida uma tela em que é possível fazer o download de um arquivo de configuração que contenha todos os metadados necessários do Firebase para seu app. Faça o download dos arquivos google-service.json e GoogleService-Info.plist e mova-os para a pasta android_studio_folder.pngAssets no projeto do Unity.

331c165d80ba105e.png

Adicionar o SDK do Firebase Analytics

  1. Faça o download do SDK do Firebase para Unity 5.5.0 e descompacte-o em um local prático.
  2. Abra o projeto do Unity Awesome Drawing Quiz e navegue até Assets > Importar pacote > Pacote personalizado.
  3. No SDK descompactado, importe o SDK da Configuração remota (dotnet4/FirebaseAnalytics.unitypackage).
  4. Na janela "Importar pacote do Unity", clique em Importar.

6. Vincular a AdMob ao projeto do Firebase

Siga as etapas abaixo para vincular seus apps ao Firebase.

  1. Faça login na sua conta da AdMob em https://apps.admob.com.
  2. Clique em "Apps" na barra lateral.
  3. Selecione "Awesome Drawing Quiz". Se ele não aparecer na lista de aplicativos recentes, clique em "Mostrar todos os aplicativos" para pesquisar uma lista de todos os aplicativos que você adicionou à AdMob.
  4. Clique em Configurações do aplicativo na barra lateral.
  5. Clique em "Vincular ao Firebase".
  6. Selecione a opção Vincular a um projeto do Firebase e criar um novo app do Firebase. Depois selecione o projeto "Awesome Drawing Quiz" no menu suspenso.
  7. Depois de clicar no botão CONTINUAR, você verá a mensagem "Vinculado com sucesso". Clique no botão CONCLUÍDO para concluir.

Ao vincular seu app da AdMob ao projeto do Firebase, ele desbloqueia alguns recursos adicionais na AdMob e no console do Firebase, como mostrado a seguir:

Card de receita (AdMob)

No card "Receita", você pode ter uma visão abrangente de todos os fluxos de receita possíveis em um só lugar. As fontes de receita aceitas são as seguintes:

  • AdMob (estimativa)
  • Redes de publicidade mediadas (observadas)
  • Compras no app
  • Compras de e-commerce

10fe118249e11150.png

Card de métricas do usuário (AdMob)

No card de métricas do usuário, você pode ver como as alterações na experiência dos anúncios podem afetar o comportamento dos usuários.

5f56366f1b31d4a1.png

Relatório de anúncios premiados (AdMob)

O Relatório de anúncios premiados oferece várias métricas para ajudar os editores a entender como os usuários estão interagindo com os anúncios premiados.

658a2868777690ea.png

Card "Receita total" (Firebase)

Depois que você vincular seu app da AdMob ao Firebase, o card "Receita total" no painel do Firebase vai exibir a receita da AdMob, além das compras no app e de e-commerce.

98cb283977b023a.png

Relatórios de eventos de anúncio (Firebase)

Eventos específicos de anúncios (eventos de clique, impressão e prêmio) são coletados automaticamente e ficam disponíveis para uso no Google Analytics para Firebase.

bf77bd8c00c1441b.png

7. Executar o projeto

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

f5fbf4565c5d8647.png

Depois de clicar em INICIAR UM JOGO, você verá um desenho na tela. Sua missão é adivinhar o nome do desenho usando a dica exibida na parte de cima, a partir da qual você pode inferir a primeira letra e o comprimento do nome do desenho.

bbdf4d23fb08a519.png ad82d7e657945c4d.png

Se você não tem ideia do nome do desenho, pule o nível clicando no botão PULAR.

Você pode querer uma pista adicional que ajude você a adivinhar a resposta. Outra dica é clicar no botão HINT e assistir a um anúncio em vídeo premiado. Depois que você terminar de assistir ao anúncio, uma letra extra será divulgada como recompensa.

8c33687361f83a13.png b048d6587c10e9df.png

8. Adicionar eventos do app

Para entender profundamente a jornada do usuário no Awesome Drawing Quiz,você definirá alguns eventos personalizados que rastreiam o comportamento do usuário no jogo da seguinte maneira:

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) dentro de uma etapa. (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 recebe uma solicitação para 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 (libera uma fase)

nível_nome, número_de_tentativas, tempo_de_passado_sec, dica_usado

level_fail

quando um usuário pula um nível.

nível_nome, número_de_tentativas, tempo_de_passado_sec, dica_usado

game_complete

quando o jogo terminar

number_of_correct_answers

A descrição de cada parâmetro associado a cada evento é a seguinte:

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

Nome do desenho mostrado no nível (por exemplo, "banana")

ad_reward_prompt

ad_unit_id

Um ID de bloco de anúncios usado para exibir um anúncio em vídeo premiado

ad_reward_impression

ad_unit_id

Um ID de bloco de anúncios usado para exibir 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 de eliminar uma fase

level_success

elapsed_time_sec

Tempo decorrido para concluir uma fase (em segundos)

level_success

hint_used

Se um usuário usou uma dica (assistiu um anúncio em vídeo premiado) ou não concluiu um nível (1: usou uma dica / 0: concluiu 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 de eliminar uma fase

level_fail

elapsed_time_sec

Tempo decorrido para concluir uma fase (em segundos)

level_fail

hint_used

Se um usuário usou uma dica (assistiu um anúncio em vídeo premiado) ou não concluiu um nível (1: usou uma dica / 0: concluiu um nível sem uma dica)

game_complete

number_of_correct_answers

Número de níveis apagados no jogo

Criar uma classe auxiliar para registrar eventos personalizados

Para registrar o evento de análise com facilidade, você vai criar uma classe auxiliar para gerenciar eventos personalizados.

Primeiro, crie uma nova pasta na pasta Assets/Scripts com o nome Analytics. Em seguida, crie um novo script em C# e nomeie-o como QuizAnalytics.cs na pasta Analytics.

Adicione o código abaixo ao arquivo QuizAnalytics.cs.

Analytics/QuizAnalytics.cs

using Firebase.Analytics;

namespace AwesomeDrawingQuiz.Analytics {

    public class QuizAnalytics {

        private const string EVENT_AD_REWARD_PROMPT = "ad_reward_prompt";

        private const string EVENT_AD_REWARD_IMPRESSION = "ad_reward_impression";

        private const string EVENT_LEVEL_FAIL = "level_fail";

        private const string EVENT_LEVEL_SUCCESS = "level_success";

        private const string EVENT_LEVEL_WRONG_ANSWER = "level_wrong_answer";

        private const string EVENT_GAME_START = "game_start";

        private const string EVENT_GAME_COMPLETE = "game_complete";

        private const string PARAM_AD_UNIT_ID = "ad_unit_id";

        private const string PARAM_ELAPSED_TIME_SEC = "elapsed_time_sec";

        private const string PARAM_HINT_USED = "hint_used";

        private const string PARAM_NUMBER_OF_ATTEMPTS = "number_of_attempts";

        private const string PARAM_NUMBER_OF_CORRECT_ANSWERS = "number_of_correct_answers";

        public const string SCREEN_MAIN = "main";

        public const string SCREEN_GAME = "game";

        public static void LogGameStart() {
            FirebaseAnalytics.LogEvent(EVENT_GAME_START);
        }

        public static void LogLevelStart(string levelName) {
            FirebaseAnalytics.LogEvent(FirebaseAnalytics.EventLevelStart, 
                FirebaseAnalytics.ParameterLevelName, levelName);
        }

        public static void LogLevelWrongAnswer(string levelName) {
            FirebaseAnalytics.LogEvent(EVENT_LEVEL_WRONG_ANSWER, 
                FirebaseAnalytics.ParameterLevelName, levelName);
        }

        public static void LogAdRewardPrompt(string adUnitId) {
            FirebaseAnalytics.LogEvent(EVENT_AD_REWARD_PROMPT, PARAM_AD_UNIT_ID, adUnitId);
        }

        public static void LogAdRewardImpression(string adUnitId) {
            FirebaseAnalytics.LogEvent(EVENT_AD_REWARD_IMPRESSION, PARAM_AD_UNIT_ID, adUnitId);
        }

        public static void LogLevelSuccess(
            string levelName, int numberOfAttemps, int elapsedTimeInSec, bool hintUsed
        ) {
            FirebaseAnalytics.LogEvent(EVENT_LEVEL_SUCCESS, new Parameter[] {
                new Parameter(FirebaseAnalytics.ParameterLevelName, levelName),
                new Parameter(PARAM_NUMBER_OF_ATTEMPTS, numberOfAttemps),
                new Parameter(PARAM_ELAPSED_TIME_SEC, elapsedTimeInSec),
                new Parameter(PARAM_HINT_USED, hintUsed ? 1 : 0)
            });
        }

        public static void LogLevelFail(
            string levelName, int numberOfAttempts, int elapsedTimeInSec, bool hintUsed
        ) {
            FirebaseAnalytics.LogEvent(EVENT_LEVEL_FAIL, new Parameter[] {
                new Parameter(FirebaseAnalytics.ParameterLevelName, levelName),
                new Parameter(PARAM_NUMBER_OF_ATTEMPTS, numberOfAttempts),
                new Parameter(PARAM_ELAPSED_TIME_SEC, elapsedTimeInSec),
                new Parameter(PARAM_HINT_USED, hintUsed ? 1 : 0)
            });
        }

        public static void LogGameComplete(int numberOfCorrectAnswers) {
            FirebaseAnalytics.LogEvent(EVENT_GAME_COMPLETE, 
                PARAM_NUMBER_OF_CORRECT_ANSWERS, numberOfCorrectAnswers);
        }

        public static void SetScreenName(string screenName) {
            FirebaseAnalytics.SetCurrentScreen(screenName, null);
        }
    }
}

Registrar eventos de análise no jogo

Abra o arquivo Game.cs na pasta Assets/Scripts/Scenes. Para usar a classe QuizAnalytics, localizada no namespace AwesomeDrawingQuiz.Analytics, adicione a diretiva de uso desta maneira.

Scenes/Game.cs (link em inglês)

using AwesomeDrawingQuiz.Ads;

// TODO: Import AwesomeDrawingQuiz.Analytics (101)
using AwesomeDrawingQuiz.Analytics;

...

namespace AwesomeDrawingQuiz.Scene {
   ...
}

Em seguida, na função Start(), chame QuizAnalytics.SetScreenName() para mudar o nome da tela atual. Além disso, chame QuizAnalytics.LogGameStart() para indicar que um jogo foi iniciado.

Scenes/Game.cs (link em inglês)

void Start () {
    // TODO: Log screen name (101)
    QuizAnalytics.SetScreenName(QuizAnalytics.SCREEN_GAME);

    ...

    SetHintButtonEnabled(false);

    // TODO: Log game_start event (101)
    QuizAnalytics.LogGameStart();
    
    ...
}

Em seguida, nas funções de callback, adicione chamadas para registrar eventos personalizados da seguinte maneira:

Scenes/Game.cs (link em inglês)

public void OnClickHint() {
    // TODO: Log ad_reward_prompt event (101)
    QuizAnalytics.LogAdRewardPrompt(AdManager.AD_UNIT_ID);

    ...
}

...
  
public void OnAdStarted(object sender, EventArgs args) {
    // TODO: Log ad_reward_impression event (101)
    QuizAnalytics.LogAdRewardImpression(AdManager.AD_UNIT_ID);
}

...

public void OnGameOver(object sender, GameOverEventArgs args) {
    // TODO: Log game_complete event (101)
    QuizAnalytics.LogGameComplete(args.NumCorrectAnswers);

    ...
}

public void OnLevelCleared(object sender, LevelClearEventArgs args) {
    // TODO: Log level_success event (101)
    QuizAnalytics.LogLevelSuccess(
        args.Drawing.word, args.NumAttempts, args.ElapsedTimeInSeconds, args.IsHintUsed);

    ...
}

public void OnLevelSkipped(object sender, LevelSkipEventArgs args) {
    // TODO: Log level_fail event (101)
    QuizAnalytics.LogLevelFail(
        args.Drawing.word, args.NumAttempts, args.ElapsedTimeInSeconds, args.IsHintUsed);
}

public void OnNewLevel(object sender, NewLevelEventArgs args) {
    // TODO: Log level_start event (101)
    QuizAnalytics.LogLevelStart(args.Drawing.word);

    ...
}

public void OnWrongAnwser(object sender, WrongAnswerEventArgs args) {
    // TODO: Log level_wrong_answer event (101)
    QuizAnalytics.LogLevelWrongAnswer(args.Drawing.word);

    ...
}

Por fim, atualize o arquivo Main.cs na pasta Assets/Scripts/Scenes. Verifique se o Firebase está pronto antes de chamar qualquer método no SDK do Firebase.

Scenes/Main.cs (link em inglês)

using AwesomeDrawingQuiz.Ads;

// TODO: Import AwesomeDrawingQuiz.Analytics (101)
using AwesomeDrawingQuiz.Analytics;

...

namespace AwesomeDrawingQuiz.Scene {
    public class Main : MonoBehaviour {

        ...

        void Start () {
            Screen.sleepTimeout = SleepTimeout.SystemSetting;

            #if UNITY_ANDROID
            // Disable 'Start a game' button until
            // Firebase dependencies are ready to use on the Android
            buttonStartGame.interactable = false;

            // TODO: Check Google Play Services on Android (101)
            // Check Google Play Services on Android device is up to date
            Firebase.FirebaseApp.CheckAndFixDependenciesAsync().ContinueWith(task => {
                var dependencyStatus = task.Result;
                if (dependencyStatus == Firebase.DependencyStatus.Available) {
                    Debug.Log("All Firebase services are available");
                    
                    // TODO: Set screen name (101)
                    QuizAnalytics.SetScreenName(QuizAnalytics.SCREEN_MAIN);
                } else {
                    throw new System.InvalidOperationException(System.String.Format(
                        "Could not resolve all Firebase dependencies: {0}", dependencyStatus));
                }
            }).ContinueWith(task => {
                // Enable 'Start a game' button
                UnityMainThreadDispatcher.Instance()
                    .Enqueue(() => buttonStartGame.interactable = true);
            });
            #else
            
            // TODO: Set screen name (101)
            QuizAnalytics.SetScreenName(QuizAnalytics.SCREEN_MAIN);
            #endif
        }

        ...
    }
}   

9. Depurar eventos de análise

Use o DebugView para verificar se os eventos estão sendo registrados corretamente. O DebugView permite que você veja dados brutos de eventos registrados pelo seu app em dispositivos de desenvolvimento quase em tempo real.

Isso é muito útil para fins de validação durante a fase de instrumentação do desenvolvimento e pode ajudar você a descobrir erros e erros na sua implementação de análise.

Ativar o modo de depuração no Android

Geralmente, os eventos registrados no app são agrupados por aproximadamente uma hora e enviados juntos. Para validar a implementação de análises em tempo real, ative o modo de depuração no dispositivo de desenvolvimento para fazer upload de eventos com atrasos mínimos.

Primeiro, abra a ferramenta Terminal no Android Studio. Ele fica na barra de ferramentas inferior.

c8dc1b4f08a224b8.png

Em seguida, 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.google.codelab.awesomedrawingquiz

O modo de depuração vai permanecer ativado até que você execute o seguinte comando:

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

Ativar o modo de depuração no iOS

Para ativar o modo de Depuração do Analytics no seu dispositivo de desenvolvimento, especifique o seguinte argumento de linha de comando no Xcode:

-FIRDebugEnabled

O modo de depuração permanecerá ativo até você especificar o seguinte argumento de linha de comando:

-FIRDebugDisabled

Depurar eventos do Analytics com o DebugView

Depois de ativar o modo de depuração no seu dispositivo de teste, acesse o Console do Firebase e selecione "DebugView" no menu. No dispositivo de teste, jogue para conferir os eventos sendo registrados e mostrados no Relatório do DebugView.

827059255d09ac00.png

Para acessar informações detalhadas sobre cada evento, clique no nome dele. Como exemplo, a captura de tela abaixo mostra os detalhes do parâmetro associados ao evento level_start.

475db00d05d03ab8.png

Consulte o artigo da Central de Ajuda do DebugView para mais detalhes.

10. Ativar o Relatório de parâmetros

O Google Analytics para Firebase coletará o número total de contagens de eventos por padrão, mas os relatórios de parâmetros personalizados precisam ser explicitamente ativados para cada parâmetro de evento em que você tem interesse. Depois da ativação, o Google Analytics para Firebase exibirá cards adicionais para mostrar as estatísticas dos parâmetros personalizados.

Para registrar os parâmetros personalizados de um evento, siga estas etapas:

  1. Acesse o Console do Firebase e selecione o projeto do Awesome Drawing Quiz que você criou anteriormente.
  2. Clique em Eventos no menu de navegação.
  1. Na linha do evento que você quer modificar, clique em 73afe611adf58774.png> Editar o Relatório de parâmetros.

aad40de06ee0c3ad.png

  1. No campo Insira o nome do parâmetro, digite o nome que você quer registrar.

Observação: se nenhuma correspondência for encontrada, basta inserir o nome do parâmetro e clicar em ADICIONAR.e066c761aae4797f.png5: Consulte a tabela abaixo e defina o campo Tipo como Texto ou Número corretamente. Para parâmetros numéricos, defina também o campo Unidade de medida. 6. Clique no botão SALVAR para concluir a configuração.

Ative os relatórios de parâmetros em cada evento listado abaixo.

Nome do evento

Nome do parâmetro

Tipo de parâmetro

Unidade de medida

level_start

level_name

Texto

N/A

level_wrong_answer

level_name

Texto

N/A

level_success

level_name

Texto

N/A

level_success

number_of_attempts

Número

Padrão

level_success

elapsed_time_sec

Número

Segundos

level_success

hint_used

Número

Padrão

level_fail

level_name

Texto

N/A

level_fail

number_of_attempts

Número

Padrão

level_fail

elapsed_time_sec

Número

Segundos

level_fail

hint_used

Número

Padrão

game_complete

number_of_correct_answers

Número

Padrão

O exemplo a seguir mostra a configuração de relatórios de parâmetros personalizados para o evento level_success:

6d569c8c27df2914.png

Depois de concluir a configuração dos relatórios de parâmetros, você vai conferir os parâmetros associados a cada evento em que esse relatório está ativado.

d1a37589d54bca6b.png

11. Receba insights do Relatório de eventos

Após adicionar alguns eventos, você poderá responder às perguntas sobre o comportamento do usuário no jogo. Veja alguns insights do Relatório de eventos do Firebase.

Qual nível tem o maior número de respostas erradas?

Para responder a essa pergunta, você precisa descobrir quantos eventos level_wrong_answer foram acionados por cada nível.

Clique no level_wrong_answer do relatório de eventos. No relatório de eventos level_wrong_answer, encontre o card level_name. Você vai encontrar os valores associados ao parâmetro level_name nesse card da seguinte forma:

25da426bbc0c612c.png

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 é mais difícil para os usuários em comparação com os outros níveis.

Usando as informações que você tem aqui, você pode decidir não fornecer níveis difíceis para usuários novatos para manter uma taxa de retenção alta.

Em média, quantas tentativas foram feitas para passar de uma fase?

No Awesome Drawing Quiz, os usuários podem enviar as respostas que quiserem para cada nível.

Como você ativou os relatórios de parâmetros no parâmetro number_of_attempts no evento level_success, é possível consultar as métricas detalhadas desse parâmetro.

Clique no evento level_success do Relatório de eventos. No relatório de eventos level_success, encontre o card number_of_attemps. Você verá o número médio de tentativas nesse card da seguinte forma:

43de290f9f1a0ac9.png

Você pode usar essas informações para otimizar a dificuldade média do jogo. Por exemplo, se o número médio de tentativas estiver muito próximo de 1, torne o jogo um pouco mais desafiador.

Os usuários tentaram resolver a pergunta recebendo uma dica, mesmo que finalmente não tenham concluído uma fase?

Quando um usuário decide pular uma fase, um evento level_fail é acionado. Pode haver muitas razões para a decisão do usuário.

No entanto, como o jogo pode dar uma dica depois que eles assistem um anúncio em vídeo premiado, é importante saber se o usuário tentou passar de fase com a ajuda da dica, pelo menos.

Clique no evento level_fail do Relatório de eventos. No relatório de eventos level_fail, encontre o card hint_used. O número médio de parâmetros do evento hint_used vai aparecer. Observe que, quando uma dica é usada, ela é definida como 1 e como 0 quando uma dica não foi usada.

313814372cd7c8a4.png

Se os números no card hint_used estiverem próximos de 0, isso indica que a recompensa (dica) não é muito atrativa para os usuários. Além disso, você perderá a oportunidade de aumentar a receita dos anúncios em vídeo premiados.

Por isso, considere tornar a recompensa mais útil para os usuários, para que eles possam se envolver mais com o jogo e aumentar a receita dos anúncios em vídeo premiados.

Em média, quantas fases foram limpas em cada jogo?

Cada jogo tem um total de seis níveis no Teste do Desenho Incrível. Quando o usuário termina seis níveis (independentemente de ter concluído ou reprovado em cada nível), um evento game_complete é acionado com number_of_correct_answers como parâmetro.

Como number_of_correct_answers indica quantos níveis o usuário limpou (forneceu uma resposta correta), você pode encontrar a resposta nas métricas do parâmetro number_of_correct_answers.

Clique em game_complete evento no relatório de eventos. No relatório de eventos game_complete, localize o card number_of_correct_answers. O número médio de parâmetros do evento number_of_correct_answers vai aparecer.

d9eeaa019d1bceb4.png

Se o número médio de níveis limpos for muito baixo, reorganize o jogo para ajudar as pessoas a vencer uma fase, para que possam continuar jogando sem perder o interesse.

12. Pronto!

Você concluiu o codelab de 101 para Unity da AdMob+Firebase. O código completo deste codelab está na pasta android_studio_folder.png101-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. Além disso, vamos mostrar como usar a Configuração remota e os testes A/B para otimizar o valor do parâmetro no jogo sem atualizar o app.