Podstawy AdMob dla Unity: konfiguracja Podstawy Analytics

1. Wprowadzenie

Reklamy są kluczowym elementem ogólnej wygody użytkowników aplikacji. Dobre wdrożenia reklam mogą poprawić ogólne wrażenia użytkowników z aplikacji, a nawet zwiększyć ich zaangażowanie i utrzymanie użytkowników. Na przykład reklamy z nagrodą umożliwiają nagradzanie użytkowników walutą lub elementami dodawanymi w aplikacji w zamian za oglądanie reklam wideo. Dzięki temu użytkownicy mogą osiągać nowe poziomy, na których w innych okolicznościach mogliby utknąć i zrezygnować z aplikacji.

Zapewnienie doskonałych wrażeń związanych z reklamami nie jest jednak łatwe. Możesz mieć pytania takie jak: jak często wyświetlać te reklamy? Gdzie i kiedy należy je wyświetlać? Jaka powinna być nagroda? Niestety odpowiedź różni się w zależności od aplikacji i miejsca docelowego. Nie ma jednej uniwersalnej odpowiedzi.

Dzięki Google Analytics dla Firebase, AdMob i kilku innym zaawansowanym, ale łatwym w obsłudze narzędziom, które oferuje Firebase, precyzyjne dostosowywanie aplikacji na podstawie danych stało się znacznie prostsze i bardziej efektywne. Dziś pokażemy Ci, jak zacząć.

Co utworzysz

Te ćwiczenia z programowania są pierwszymi z trzech, które pomogą Ci stworzyć aplikację Awesome Drawing Quiz, czyli grę, w której gracze zgadują nazwę rysunku. Pokazuje, jak w grze można wykorzystać reklamy z nagrodą i usługi Firebase.

W tym laboratorium kodowania zintegrujesz Google Analytics dla Firebase, aby rejestrować ważne zdarzenia w aplikacji. Dowiesz się też, jak odczytywać dane analityczne aplikacji wyświetlane w konsoli Firebase.

Czego się nauczysz

  • Jak skonfigurować Google Analytics dla Firebase w aplikacji
  • Jak rejestrować zdarzenia w aplikacji
  • Jak odczytywać dane analityczne aplikacji wyświetlane w konsoli Firebase

Czego potrzebujesz

  • Unity w wersji 2018.4.4f1 lub nowszej
  • Xcode 10 lub nowsza wersja (do tworzenia wersji docelowej na iOS)
  • konto Google,
  • Urządzenie testowe z Androidem w wersji 5.0 lub nowszej i kabel USB do podłączenia urządzenia albo Android Emulator z urządzeniem wirtualnym z Androidem(AVD) z obrazem systemu, który obsługuje Sklep Play lub interfejsy API Google.
  • urządzenie z iOS lub symulator z iOS 8.0 lub nowszym,

Jak oceniasz swoje doświadczenie z AdMob?

Początkujący Średnio zaawansowany Zaawansowany

Jak oceniasz swoje doświadczenie z Firebase?

Początkujący Średnio zaawansowany Zaawansowany

2. Konfigurowanie środowiska programistycznego

Pobieranie kodu

Aby pobrać cały kod do tych ćwiczeń, kliknij ten przycisk:

Rozpakuj pobrany plik ZIP. Spowoduje to rozpakowanie folderu głównego o nazwie admob-firebase-codelabs-unity-master.

…lub sklonuj repozytorium GitHub z poziomu wiersza poleceń.

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

Repozytorium zawiera 4 foldery:

  • android_studio_folder.png101-base – kod początkowy, który będziesz rozwijać w tych ćwiczeniach z programowania.
  • android_studio_folder.png101-complete_and_102-base – ukończony kod do tych ćwiczeń z programowania i kod początkowy do ćwiczeń z programowania 102.
  • android_studio_folder.png102-complete – ukończony kod do ćwiczeń z programowania 102.

Przygotuj wymagane pliki

Awesome Drawing Quiz korzysta z kilku kodów open source, które są wymagane do skompilowania i uruchomienia projektu.

Otwórz terminal i przejdź do głównego katalogu repozytorium. Następnie uruchom ./gradlew :prepareThirdPartyFiles (gradlew.bat :prepareThirdPartyFiles w systemie Windows) w terminalu, aby skopiować wymagane pliki do projektu.

Importowanie aplikacji startowej

Uruchom Unity i na ekranie powitalnym kliknij „Otwórz”. Następnie wybierz katalog 101-base z pobranego kodu.

Projekt powinien być teraz otwarty w Unity.

3. Konfigurowanie jednostki reklamy wideo z nagrodą (opcjonalnie)

Aplikacja startowa zawiera już specjalną jednostkę reklamy wideo z nagrodą. Jeśli nie chcesz tworzyć nowego konta podrzędnego na koncie AdMob, możesz pominąć ten krok.

Konfiguracja na Androidzie

Aby utworzyć nową aplikację w AdMob na swoim koncie, wykonaj te czynności:

  1. Otwórz konsolę AdMob.
  2. W menu Aplikacje kliknij Dodaj aplikację.
  3. Na pytanie „Czy aplikacja została opublikowana w Google Play lub App Store?” odpowiedz „NIE”.
  4. Nazwij aplikację „Awesome Drawing Quiz”,jako platformę wybierz „Android”, a potem kliknij „Dodaj”.

Po utworzeniu aplikacji w AdMob na koncie wykonaj czynności opisane poniżej, aby utworzyć nową jednostkę reklamy wideo z nagrodą.

  1. W interfejsie AdMob kliknij menu Aplikacje, a potem na liście aplikacji wybierz „Awesome Drawing Quiz”.
  2. Kliknij kolejno menu Jednostki reklamoweDODAJ JEDNOSTKĘ REKLAMOWĄ, aby utworzyć nową jednostkę reklamy wideo z nagrodą.
  3. Wybierz Reklama z nagrodą jako format reklamy.

7672f41ec611101b.png

  1. Podaj dowolną nazwę jednostki reklamowej. Następnie ustaw liczbę nagród na 1, a nagrodę na „podpowiedź” (jest to nagroda, którą aplikacja obecnie przyznaje użytkownikom). Następnie kliknij UTWÓRZ JEDNOSTKĘ REKLAMOWĄ, aby utworzyć nową jednostkę reklamową wideo z nagrodą.

6d067814a2c38264.png

  1. Po utworzeniu zobaczysz instrukcje podobne do tych poniżej.

4bc1b3b341a5a81c.png

  1. Wróć do projektu Unity i zmień stałe identyfikatora aplikacji w AdMob i identyfikatora jednostki reklamowej na te, które zostały utworzone w poprzednim kroku.

Ads/AdManager.cs

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>";

        ...
    }
}

Konfiguracja na iOS

Aby utworzyć nową aplikację w AdMob na swoim koncie, wykonaj te czynności:

  1. Otwórz konsolę AdMob.
  2. W menu Aplikacje kliknij Dodaj aplikację.
  3. Na pytanie „Czy aplikacja została opublikowana w Google Play lub App Store?” odpowiedz „NIE”.
  4. Nazwij aplikację „Awesome Drawing Quiz”,jako platformę wybierz „iOS”, a potem kliknij „Dodaj”.

Po utworzeniu aplikacji w AdMob na koncie wykonaj czynności opisane poniżej, aby utworzyć nową jednostkę reklamy wideo z nagrodą.

  1. W interfejsie AdMob kliknij menu Aplikacje, a potem na liście aplikacji wybierz „Awesome Drawing Quiz”.
  2. Kliknij kolejno menu Jednostki reklamoweDODAJ JEDNOSTKĘ REKLAMOWĄ, aby utworzyć nową jednostkę reklamy wideo z nagrodą.
  3. Wybierz Reklama z nagrodą jako format reklamy.

7672f41ec611101b.png

  1. Podaj dowolną nazwę jednostki reklamowej. Następnie ustaw liczbę nagród na 1, a nagrodę na „podpowiedź” (jest to nagroda, którą aplikacja obecnie przyznaje użytkownikom). Następnie kliknij UTWÓRZ JEDNOSTKĘ REKLAMOWĄ, aby utworzyć nową jednostkę reklamową wideo z nagrodą.

6d067814a2c38264.png

  1. Po utworzeniu zobaczysz instrukcje podobne do tych poniżej.

4bc1b3b341a5a81c.png

  1. Wróć do projektu Unity i zmień stałe identyfikatora aplikacji w AdMob i identyfikatora jednostki reklamowej na te, które zostały utworzone w poprzednim kroku.

Ads/AdManager.cs

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. Dodawanie wtyczki reklam mobilnych Google dla środowiska Unity

Importowanie wtyczki

Aby wyświetlać reklamy AdMob w aplikacji Unity, musisz dodać do projektu wtyczkę reklam mobilnych Google dla środowiska Unity.

  1. Pobierz pakiet wtyczki reklam mobilnych Google dla środowiska Unity w wersji 3.18.1. (Pamiętaj, że ten Codelab może nie być zgodny z inną wersją wtyczki).
  2. W projekcie Unity Awesome Drawing Quiz. W projekcie kliknij Assets > Import Package > Custom Package (Zasoby > Importuj pakiet > Własny pakiet).
  3. Zaimportuj plik GoogleMobileAds.unitypackage do pobranego projektu.

Konfigurowanie identyfikatora aplikacji w AdMob

W edytorze Unity w menu kliknij Assets > Google Mobile Ads > Settings (Zasoby > Reklamy mobilne Google > Ustawienia).

44fc84fe88235c1f.png

Aby włączyć AdMob, w sekcji Google AdMob kliknij pole wyboru Włączono. Następnie wpisz identyfikator aplikacji w AdMob w ten sposób:

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

a6ad7402d4daf330.png

5. Konfigurowanie projektu Firebase

Tworzenie nowego projektu w konsoli Firebase

  1. Otwórz konsolę Firebase.
  2. Kliknij Dodaj projekt i nadaj mu nazwę „Super quiz rysunkowy”.

Dodawanie aplikacji w Unity

  1. Na ekranie przeglądu nowego projektu kliknij Add Firebase to your Unity app (Dodaj Firebase do aplikacji w Unity).
  2. Zaznacz pole wyboru Zarejestruj jako aplikację na iOS.
  3. Wpisz identyfikator pakietu na iOS w formacie com.codelab.awesomedrawingquiz.unity.
  4. Podaj pseudonim aplikacji w formacie: Awesome Drawing Quiz (Unity on iOS)
  5. Zaznacz pole wyboru Zarejestruj jako aplikację na Androida.
  6. Wpisz nazwę pakietu na Androida w formacie: com.codelab.awesomedrawingquiz.unity
  7. Podaj pseudonim aplikacji w formacie: Awesome Drawing Quiz (Unity na Androidzie)
  8. Aby zarejestrować aplikacje na Androida i iOS, kliknij Zarejestruj aplikację.

Dodawanie plików konfiguracyjnych Firebase do projektu w Unity

Następnie pojawi się ekran, na którym możesz pobrać plik konfiguracji zawierający wszystkie niezbędne metadane Firebase dla Twojej aplikacji. Pobierz pliki google-service.jsonGoogleService-Info.plist, a następnie przenieś je do folderu android_studio_folder.pngAssets w projekcie Unity.

331c165d80ba105e.png

Dodawanie pakietu SDK Firebase Analytics

  1. Pobierz pakiet Firebase Unity SDK w wersji 5.5.0 i rozpakuj go w wygodnym miejscu.
  2. Otwórz projekt Unity Awesome Drawing Quiz i kliknij Assets > Import Package > Custom Package (Zasoby > Importuj pakiet > Własny pakiet).
  3. W rozpakowanym pakiecie SDK zaimportuj pakiet SDK Zdalnej konfiguracji (dotnet4/FirebaseAnalytics.unitypackage).
  4. W oknie Import Unity package (Importowanie pakietu dla Unity) kliknij Import (Importuj).

6. Łączenie AdMob z projektem Firebase

Aby połączyć aplikacje z Firebase, wykonaj podane niżej czynności.

  1. Zaloguj się na konto AdMob na stronie https://apps.admob.com.
  2. Na pasku bocznym kliknij „Aplikacje”.
  3. Wybierz „Awesome Drawing Quiz” (Super quiz rysunkowy). Jeśli nie widzisz jej na liście ostatnio używanych aplikacji, kliknij „Zobacz wszystkie”, aby wyświetlić listę wszystkich aplikacji dodanych przez Ciebie w AdMob.
  4. Na pasku bocznym kliknij „Ustawienia aplikacji”.
  5. Kliknij Połącz z Firebase.
  6. Wybierz opcję „Połącz z istniejącym projektem w Firebase i utwórz nową aplikację w Firebase”. Następnie w menu wybierz projekt „Awesome Drawing Quiz”.
  7. Po kliknięciu przycisku „DALEJ” zobaczysz komunikat „Połączono”. Aby zakończyć, kliknij przycisk „GOTOWE”.

Po połączeniu aplikacji w AdMob z projektem w Firebase odblokujesz dodatkowe funkcje w konsolach AdMob i Firebase:

Karta przychodów (AdMob)

Na karcie Przychody możesz w jednym miejscu sprawdzić wszystkie możliwe źródła przychodów. Obsługiwane źródła przychodów to:

  • AdMob (szacunkowe)
  • Sieci reklamowe z zapośredniczeniem (zaobserwowane)
  • Zakupy w aplikacji
  • Zakupy e-commerce

10fe118249e11150.png

Karta danych o użytkownikach (AdMob)

Na karcie danych o użytkownikach możesz sprawdzić, jak zmiany w reklamach mogą wpływać na zachowania użytkowników.

5f56366f1b31d4a1.png

Raport dotyczący reklam z nagrodą (AdMob)

Raport dotyczący reklam z nagrodą zawiera różne dane, które pomagają wydawcom zrozumieć, jak użytkownicy wchodzą w interakcje z ich reklamami z nagrodą.

658a2868777690ea.png

Karta Łączne przychody (Firebase)

Po połączeniu aplikacji AdMob z Firebase na karcie Łączne przychody na panelu Firebase będą wyświetlane przychody z AdMob oraz przychody z zakupów w aplikacji i zakupów e-commerce.

98cb283977b023a.png

Raportowanie zdarzeń związanych z reklamami (Firebase)

Zdarzenia związane z reklamami (zdarzenia kliknięcia, wyświetlenia i nagrody) są zbierane automatycznie i dostępne do użycia w Google Analytics dla Firebase.

bf77bd8c00c1441b.png

7. Uruchamianie projektu

Po skompilowaniu i uruchomieniu projektu zobaczysz ten ekran po uruchomieniu aplikacji.

f5fbf4565c5d8647.png

Gdy klikniesz „ROZPOCZNIJ GRĘ”, na ekranie pojawi się rysunek. Twoim zadaniem jest odgadnięcie nazwy rysunku na podstawie wskazówki wyświetlanej u góry, z której możesz wywnioskować pierwszą literę i długość nazwy rysunku.

bbdf4d23fb08a519.png ad82d7e657945c4d.png

Jeśli nie masz pomysłu na nazwę rysunku, możesz pominąć poziom, klikając przycisk „POMIŃ”.

Możesz potrzebować dodatkowej wskazówki, która pomoże Ci odgadnąć odpowiedź. Dodatkową wskazówkę możesz uzyskać, klikając przycisk „PODPOWIEDŹ” i oglądając reklamę wideo z nagrodą. Po obejrzeniu reklamy otrzymasz dodatkową literę jako nagrodę.

8c33687361f83a13.png b048d6587c10e9df.png

8. Dodawanie zdarzeń w aplikacji

Aby dokładnie poznać ścieżkę użytkownika w Awesome Drawing Quiz, zdefiniujesz kilka zdarzeń niestandardowych, które będą śledzić zachowania użytkowników w grze w ten sposób:

Nazwa zdarzenia

Aktywowano…

Parametry

game_start

gdy użytkownik rozpoczyna nową grę.

brak

level_start

gdy użytkownik rozpoczyna nowy poziom (nowy quiz rysunkowy) w ramach etapu. (na jednym etapie jest 6 poziomów)

level_name

level_wrong_answer

gdy użytkownik prześle błędną odpowiedź.

level_name

ad_reward_prompt

gdy użytkownik naciśnie przycisk podpowiedzi i zostanie poproszony o obejrzenie reklamy wideo z nagrodą.

ad_unit_id

ad_reward_impression

gdy użytkownik zaczyna oglądać reklamę wideo z nagrodą.

ad_unit_id

level_success

gdy użytkownik prześle prawidłową odpowiedź (ukończy poziom).

level_name, number_of_attempts, elapsed_time_sec, hint_used

level_fail

gdy użytkownik pominie poziom.

level_name, number_of_attempts, elapsed_time_sec, hint_used

game_complete

po zakończeniu gry.

number_of_correct_answers

Opis każdego parametru powiązanego z poszczególnymi zdarzeniami:

Nazwa zdarzenia

Nazwa parametru

Opis

level_start

level_name

Nazwa rysunku widoczna na poziomie (np. „banan”).

level_wrong_answer

level_name

Nazwa rysunku widoczna na poziomie (np. „banan”).

ad_reward_prompt

ad_unit_id

Identyfikator jednostki reklamowej używany do wyświetlania reklamy wideo z nagrodą.

ad_reward_impression

ad_unit_id

Identyfikator jednostki reklamowej używany do wyświetlania reklamy wideo z nagrodą.

level_success

level_name

Nazwa rysunku widoczna na poziomie (np. „banan”).

level_success

number_of_attempts

Liczba prób przejścia poziomu

level_success

elapsed_time_sec

Czas potrzebny na ukończenie poziomu w sekundach

level_success

hint_used

Czy użytkownik skorzystał z podpowiedzi (obejrzał reklamę wideo z nagrodą), aby przejść poziom (1 – skorzystał z podpowiedzi, 0 – przeszedł poziom bez podpowiedzi).

level_fail

level_name

Nazwa rysunku widoczna na poziomie (np. „banan”).

level_fail

number_of_attempts

Liczba prób przejścia poziomu

level_fail

elapsed_time_sec

Czas potrzebny na ukończenie poziomu w sekundach

level_fail

hint_used

Czy użytkownik skorzystał z podpowiedzi (obejrzał reklamę wideo z nagrodą), aby przejść poziom (1 – skorzystał z podpowiedzi, 0 – przeszedł poziom bez podpowiedzi).

game_complete

number_of_correct_answers

Liczba poziomów ukończonych w grze

Tworzenie klasy pomocniczej do rejestrowania zdarzeń niestandardowych

Aby łatwo rejestrować zdarzenia Analytics, utwórz klasę pomocniczą do zarządzania zdarzeniami niestandardowymi.

Najpierw utwórz nowy folder w folderze Assets/Scripts i nadaj mu nazwę Analytics. Następnie utwórz nowy skrypt C# i nadaj mu nazwę QuizAnalytics.cs w folderze Analytics.

Dodaj do pliku QuizAnalytics.cs ten kod:

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);
        }
    }
}

Rejestrowanie zdarzeń analitycznych w grze

Otwórz plik Game.cs w folderze Assets/Scripts/Scenes. Aby użyć klasy QuizAnalytics, która znajduje się w przestrzeni nazw AwesomeDrawingQuiz.Analytics, dodaj dyrektywę using w ten sposób:

Scenes/Game.cs

using AwesomeDrawingQuiz.Ads;

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

...

namespace AwesomeDrawingQuiz.Scene {
   ...
}

Następnie w funkcji Start() wywołaj funkcję QuizAnalytics.SetScreenName(), aby zmienić nazwę bieżącego ekranu. Wywołaj też funkcję QuizAnalytics.LogGameStart(), aby wskazać, że gra się rozpoczęła.

Scenes/Game.cs

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

    ...

    SetHintButtonEnabled(false);

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

Następnie w funkcjach wywołania zwrotnego dodaj wywołania do rejestrowania zdarzeń niestandardowych w ten sposób:

Scenes/Game.cs

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);

    ...
}

Na koniec zaktualizuj plik Main.cs w folderze Assets/Scripts/Scenes. Zanim wywołasz jakąkolwiek metodę w pakiecie Firebase SDK, sprawdź, czy Firebase jest gotowy.

Scenes/Main.cs

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. Debugowanie zdarzeń Analytics

Aby sprawdzić, czy zdarzenia są prawidłowo rejestrowane, możesz użyć raportu DebugView. DebugView umożliwia wyświetlanie w czasie zbliżonym do rzeczywistego nieprzetworzonych danych o zdarzeniach rejestrowanych przez aplikację na urządzeniach programistycznych.

Jest to bardzo przydatne do celów weryfikacji na etapie instrumentacji w trakcie programowania. Pomaga wykrywać błędy i pomyłki w implementacji Analytics.

Włączanie trybu debugowania na urządzeniu z Androidem

Zdarzenia logowane w aplikacji są zwykle grupowane w ciągu około godziny i przesyłane razem. Aby na bieżąco sprawdzać poprawność implementacji Analytics, musisz włączyć tryb debugowania na urządzeniu używanym do programowania, aby przesyłać zdarzenia z minimalnymi opóźnieniami.

Najpierw otwórz narzędzie Terminal w Android Studio. Znajduje się na dolnym pasku narzędzi.

c8dc1b4f08a224b8.png

Następnie wykonaj to polecenie (upewnij się, że testowe urządzenie z Androidem jest podłączone do komputera lub Android Emulator jest uruchomiony):

adb shell setprop debug.firebase.analytics.app com.google.codelab.awesomedrawingquiz

Tryb debugowania pozostanie włączony, dopóki nie wyłączysz go tym poleceniem:

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

Włączanie trybu debugowania na iOS

Aby włączyć tryb debugowania Analytics na urządzeniu, którego używasz do programowania, wpisz w Xcode ten argument wiersza poleceń:

-FIRDebugEnabled

Tryb debugowania pozostanie włączony, dopóki nie wyłączysz go za pomocą tego argumentu:

-FIRDebugDisabled

Debugowanie zdarzeń Analytics za pomocą raportu DebugView

Po włączeniu trybu debugowania na urządzeniu testowym otwórz konsolę Firebase i w menu wybierz DebugView. Następnie na urządzeniu testowym uruchom grę, aby zobaczyć, jak zdarzenia są rejestrowane i wyświetlane w raporcie DebugView.

827059255d09ac00.png

Aby uzyskać szczegółowe informacje o poszczególnych zdarzeniach, kliknij ich nazwy. Na przykład na tym zrzucie ekranu widać szczegóły parametrów powiązanych ze zdarzeniem level_start.

475db00d05d03ab8.png

Więcej informacji znajdziesz w tym artykule w Centrum pomocy.

10. Włącz raportowanie parametrów

Google Analytics dla Firebase domyślnie zbiera łączną liczbę zdarzeń, ale raportowanie parametrów niestandardowych musi być włączone osobno dla każdego parametru zdarzenia, który Cię interesuje. Po włączeniu tej opcji Google Analytics dla Firebase będzie wyświetlać dodatkowe karty z informacjami o statystykach parametrów niestandardowych.

Aby zarejestrować parametry niestandardowe dla zdarzenia:

  1. Otwórz konsolę Firebase i wybierz utworzony wcześniej projekt Awesome Drawing Quiz.
  2. W menu nawigacyjnym kliknij Zdarzenia.
  1. W wierszu zdarzenia, które chcesz zmodyfikować, kliknij 73afe611adf58774.png> Edytuj raportowane parametry.

aad40de06ee0c3ad.png

  1. W polu Wpisz nazwę parametru wpisz nazwę parametru, który chcesz rejestrować.

Uwaga: jeśli nie zostaną znalezione pasujące wyniki, wpisz nazwę parametru i kliknij DODAJ.e066c761aae4797f.png 5. Zapoznaj się z tabelą poniżej i w polu Typ ustaw odpowiednio wartość Tekst lub Liczba. W przypadku parametrów liczbowych ustaw też wartość w polu Jednostka miary. 6. Aby zakończyć konfigurację, kliknij przycisk ZAPISZ.

Włącz raportowanie parametrów w przypadku każdego zdarzenia wymienionego poniżej.

Nazwa zdarzenia

Nazwa parametru

Typ parametru

Jednostka miary

level_start

level_name

Tekst

Nie dotyczy

level_wrong_answer

level_name

Tekst

Nie dotyczy

level_success

level_name

Tekst

Nie dotyczy

level_success

number_of_attempts

Liczba

Standardowe

level_success

elapsed_time_sec

Liczba

Sekundy

level_success

hint_used

Liczba

Standardowe

level_fail

level_name

Tekst

Nie dotyczy

level_fail

number_of_attempts

Liczba

Standardowe

level_fail

elapsed_time_sec

Liczba

Sekundy

level_fail

hint_used

Liczba

Standardowe

game_complete

number_of_correct_answers

Liczba

Standardowe

W przykładzie poniżej pokazujemy konfigurację raportowania parametrów niestandardowych dla zdarzenia level_success:

6d569c8c27df2914.png

Po skonfigurowaniu raportowania parametrów możesz wyświetlać parametry powiązane z każdym zdarzeniem, w przypadku którego włączono raportowanie parametrów.

d1a37589d54bca6b.png

11. Wyświetlanie statystyk z raportu Zdarzenie

Po dodaniu kilku zdarzeń w grze powinna być możliwość udzielenia odpowiedzi na pytania dotyczące zachowania użytkowników w grze. Oto kilka informacji, które możesz uzyskać z raportu o zdarzeniach w Firebase.

Na którym poziomie jest najwięcej błędnych odpowiedzi?

Aby odpowiedzieć na to pytanie, musisz sprawdzić, ile level_wrong_answer zdarzeń zostało wywołanych na każdym poziomie.

W raporcie o zdarzeniach kliknij level_wrong_answer. W raporcie zdarzenia level_wrong_answer odszukaj kartę level_name. Na tej karcie zobaczysz wartości powiązane z parametrem level_name w ten sposób:

25da426bbc0c612c.png

Z powyższego zrzutu ekranu wynika, że najwięcej błędnych odpowiedzi uzyskano w przypadku horyzontu, co oznacza, że jest on trudniejszy dla użytkowników niż pozostałe poziomy.

Na podstawie tych informacji możesz zdecydować, aby nie udostępniać trudnych poziomów początkującym użytkownikom, aby utrzymać wysoki wskaźnik utrzymania.

Ile prób przejścia poziomu podejmowano średnio?

Awesome Drawing Quiz użytkownicy mogą przesyłać odpowiedzi na każdym poziomie tyle razy, ile chcą.

Ponieważ w przypadku parametru number_of_attempts w zdarzeniu level_success masz włączone raportowanie parametrów, możesz wyświetlać szczegółowe dane dotyczące tego parametru.

W raporcie o zdarzeniach kliknij zdarzenie level_success. W raporcie zdarzenia level_success odszukaj kartę number_of_attemps. Na karcie zobaczysz średnią liczbę prób w ten sposób:

43de290f9f1a0ac9.png

Na podstawie tych danych możesz zoptymalizować średni poziom trudności gry. Jeśli na przykład średnia liczba prób jest zbyt bliska 1, możesz nieco utrudnić grę.

Czy użytkownicy próbowali rozwiązać pytanie, korzystając z podpowiedzi, mimo że ostatecznie nie udało im się przejść poziomu?

Gdy użytkownik zdecyduje się pominąć poziom, wywoływane jest level_failzdarzenie. Decyzja użytkownika może być spowodowana wieloma czynnikami.

Ponieważ jednak gra może podać wskazówkę po obejrzeniu przez użytkownika reklamy wideo z nagrodą, ważne jest, aby wiedzieć, czy użytkownik próbował przejść poziom z pomocą wskazówki.

W raporcie o zdarzeniach kliknij zdarzenie level_fail. W raporcie zdarzenia level_fail odszukaj kartę hint_used. Zobaczysz średnią liczbę parametrów zdarzeń hint_used. Pamiętaj, że gdy używana jest wskazówka, wartość jest ustawiona na 1, a gdy nie jest używana, wartość jest ustawiona na 0.

313814372cd7c8a4.png

Jeśli liczby na karcie hint_used są bliskie 0, oznacza to, że nagroda (wskazówka) nie jest zbyt atrakcyjna dla użytkowników. Tracisz też możliwość zwiększenia przychodów z reklam wideo z nagrodą.

Warto więc rozważyć zwiększenie atrakcyjności nagrody, aby użytkownicy mogli bardziej zaangażować się w grę, a przychody z reklam wideo z nagrodą wzrosły.

Ile poziomów średnio udało się ukończyć w każdej grze?

Każda gra w Awesome Drawing Quiz ma 6 poziomów. Gdy użytkownik ukończy 6 poziomów (niezależnie od tego, czy udało mu się je przejść), wywoływane jest zdarzenie game_complete z parametrem number_of_correct_answers.

Ponieważ number_of_correct_answers wskazuje, ile poziomów użytkownik ukończył (czyli na ilu poziomach udzielił prawidłowej odpowiedzi), odpowiedź znajdziesz, sprawdzając dane parametru number_of_correct_answers.

W raporcie o zdarzeniach kliknij zdarzenie game_complete. W raporcie o zdarzeniu game_complete odszukaj kartę number_of_correct_answers. Zobaczysz średnią liczbę parametrów zdarzeń number_of_correct_answers.

d9eeaa019d1bceb4.png

Jeśli średnia liczba ukończonych poziomów jest zbyt niska, warto zmienić układ gry, aby ułatwić graczom przejście poziomu i zachęcić ich do dalszej rozgrywki.

12. Wszystko gotowe

Ukończono ćwiczenia AdMob+Firebase 101 Unity. Ukończony kod tego ćwiczenia znajdziesz w folderze android_studio_folder.png101-complete_and_102-base.

W kolejnej części tego laboratorium poświęconego AdMob i Firebase dowiesz się, jak używać ścieżki do wizualizacji przepływu zdarzeń w aplikacji. Wyjaśnimy też, jak używać Zdalnej konfiguracji i testów A/B do optymalizacji wartości parametru w grze bez aktualizacji aplikacji.