AdMob+Firebase 101 Unity: Kurulum & Analytics'e İlişkin Temel Bilgiler

1. Giriş

Reklamlar, uygulamanızın genel kullanıcı deneyiminin önemli bir parçasıdır. İyi reklam uygulamaları, genel uygulama deneyiminizi iyileştirmenize, hatta kullanıcıları elde tutma oranını ve etkileşimi artırmanıza yardımcı olabilir. Örneğin, ödüllü reklamlar, video reklam izleyen kullanıcıları uygulama içi para birimi veya öğelerle ödüllendirmenize olanak tanır. Böylece kullanıcılar takılıp kalacakları ve uygulamayı kullanmayı bırakabilecekleri yeni zirvelere ulaşabilir.

Ancak, mükemmel bir reklam deneyimi oluşturmak kolay değildir. Şöyle sorular sorabilirsiniz: Bu reklamları ne sıklıkta göstermelisiniz? Bu reklamları nerede ve ne zaman göstermeniz gerekir? Ödül ne olmalı? Maalesef yanıt uygulamadan uygulamaya ve yerleşimden yerleşime farklılık gösterebilir. Her duruma uyan tek bir cevap yoktur.

Firebase için Google Analytics, AdMob ve Firebase'in sunduğu güçlü ancak kullanımı kolay diğer birçok araç sayesinde, uygulamanızda veriye dayalı ince ayarlar yapmak çok daha kolay ve daha kolay hale geldi. Bugün, kullanmaya nasıl başlayabileceğinizi göstereceğiz.

Oluşturacaklarınız

Bu codelab, oyuncuların çizimin adını tahmin etmelerini sağlayan bir oyun olan Awesome Drawing Quiz adlı uygulama geliştirmenizde size rehberlik edecek üç codelab'den ilkidir. Bu görselde, ödüllü reklamlar ve Firebase hizmetlerini oyununuza nasıl dahil edebileceğiniz gösterilmektedir.

Bu codelab'de, bazı önemli uygulama etkinliklerini kaydetmek amacıyla Firebase için Google Analytics'i entegre edeceksiniz. Ayrıca, Firebase konsolunda gösterilen uygulama analizlerini nasıl okuyacağınızı öğreneceksiniz.

Neler öğreneceksiniz?

  • Uygulamanızda Firebase için Google Analytics'i ayarlama
  • Uygulama etkinliklerini kaydetme
  • Firebase konsolunda gösterilen uygulama analizlerini okuma

Gerekenler

  • Unity 2018.4.4f1 veya sonraki sürümler
  • Xcode 10 veya üstü (iOS için hedef oluşturmak için)
  • Google Hesabı
  • Cihazınızı bağlamak için USB kablosuyla birlikte Android 5.0 ve sonraki sürüme sahip bir test cihazı veya Play Store/Google API'lerini destekleyen bir sistem görüntüsüne sahip AVD(Android Sanal Cihazı) çalıştıran bir Android Emülatör
  • iOS 8.0 veya sonraki sürümleri çalıştıran bir iOS cihazı ya da simülatörü

AdMob deneyim düzeyinizi nasıl değerlendirirsiniz?

Acemi Orta Yeterli

Firebase deneyim düzeyinizi nasıl değerlendirirsiniz?

Acemi Orta Yeterli

2. Geliştirme ortamı oluşturma

Kodu indirme

Bu codelab'e ait tüm kodları indirmek için aşağıdaki düğmeyi tıklayın:

İndirilen zip dosyasının paketini açın. Bu işlem, admob-firebase-codelabs-unity-master adlı bir kök klasörün paketini açar.

...veya GitHub deposunu komut satırından klonlayın.

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

Depoda şu dört klasör bulunur:

  • android_studio_folder.png101-base: Bu codelab'de derleyeceğiniz başlangıç kodu.
  • android_studio_folder.png101-complete_and_102-base — Bu codelab için tamamlanmış kod ve başlangıç kılavuzu.
  • android_studio_folder.png102-complete — 102 codelab'inin kodu tamamlandı.

Gerekli dosyaları hazırlama

Awesome Drawing Quiz, projeyi derlemek ve çalıştırmak için gerekli olan çeşitli açık kaynak kodlarını kullanır.

Terminali açıp depo kök dizinine geçin. Ardından, gerekli dosyaları projeye kopyalamak için terminalden ./gradlew :prepareThirdPartyFiles (Windows'da gradlew.bat :prepareThirdPartyFiles) komutunu çalıştırın.

Başlangıç uygulamasını içe aktarma

Unity'yi başlatın, karşılama ekranında "Open" (Aç) seçeneğini belirleyin. Ardından, indirdiğiniz koddan 101-base dizinini seçin.

Artık projeniz Unity'de açık olmalıdır.

3. Ödüllü Video Reklam Birimi Oluşturma (İsteğe Bağlı)

Başlangıç uygulamasında, size kolaylık sağlamak amacıyla özel bir ödüllü video reklam birimi zaten bulunmaktadır. AdMob hesabınızın altında yeni bir hesap oluşturmak istemiyorsanız bu adımı atlayabilirsiniz.

Android için kurulum

Hesabınızda yeni bir AdMob uygulaması oluşturmak için lütfen aşağıdaki talimatları uygulayın:

  1. AdMob Console'a gidin.
  2. Uygulamalar menüsünde "Uygulama Ekle" seçeneğini tıklayın.
  3. "Uygulamanızı Google Play veya App Store'da yayınladınız mı" sorusu sorulduğunda, yanıt olarak "HAYIR"
  4. Uygulamaya "Muhteşem Çizim Testi" adını verin. Platform olarak "Android"i seçin ve ardından "Ekle"yi tıklayın.

Hesabınızda bir AdMob uygulaması oluşturduktan sonra, yeni bir Ödüllü Video Reklam Birimi oluşturmak için aşağıda açıklanan adımları izleyin.

  1. AdMob ön ucunda Uygulamalar menüsünü tıklayın ve uygulama listesinden "Harika Çizim Testi"ni seçin.
  2. Reklam birimleri menüsünü ve ardından yeni bir Ödüllü Video reklam birimi oluşturmak için REKLAM BİRİMİ EKLE'yi tıklayın.
  3. Reklam biçimi için Ödüllü'yü seçin.

7672f41ec611101b.png

  1. Reklam biriminin adını tercih ettiğiniz şekilde girin. Ardından, ödül tutarını 1 ve öğeyi "hint" (bu, uygulamanın şu anda kullanıcılara verdiği ödül) olarak ayarlayın. Ardından yeni bir ödüllü video reklam birimi oluşturmak için REKLAM BİRİMİ OLUŞTUR'u tıklayın.

6d067814a2c38264.png

  1. Başarılı bir şekilde oluşturulduktan sonra aşağıdakine benzer talimatlar görürsünüz.

4bc1b3b341a5a81c.png

  1. Unity projesine dönün ve AdMob uygulama kimliği ve reklam birimi kimliği sabit değerlerini önceki adımda oluşturduğunuz değerlerle güncelleyin.

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

        ...
    }
}

iOS için kurulum

Hesabınızda yeni bir AdMob uygulaması oluşturmak için lütfen aşağıdaki talimatları uygulayın:

  1. AdMob Console'a gidin.
  2. Uygulamalar menüsünde "Uygulama Ekle" seçeneğini tıklayın.
  3. "Uygulamanızı Google Play veya App Store'da yayınladınız mı" sorusu sorulduğunda, yanıt olarak "HAYIR"
  4. Uygulamaya "Muhteşem Çizim Testi" adını verin. Platform olarak "iOS"i (iOS) seçin ve "Add" (Ekle) seçeneğini tıklayın.

Hesabınızda bir AdMob uygulaması oluşturduktan sonra, yeni bir Ödüllü Video Reklam Birimi oluşturmak için aşağıda açıklanan adımları izleyin.

  1. AdMob ön ucunda Uygulamalar menüsünü tıklayın ve uygulama listesinden "Harika Çizim Testi"ni seçin.
  2. Reklam birimleri menüsünü ve ardından yeni bir Ödüllü Video reklam birimi oluşturmak için REKLAM BİRİMİ EKLE'yi tıklayın.
  3. Reklam biçimi için Ödüllü'yü seçin.

7672f41ec611101b.png

  1. Reklam biriminin adını tercih ettiğiniz şekilde girin. Ardından, ödül tutarını 1 ve öğeyi "hint" (bu, uygulamanın şu anda kullanıcılara verdiği ödül) olarak ayarlayın. Ardından yeni bir ödüllü video reklam birimi oluşturmak için REKLAM BİRİMİ OLUŞTUR'u tıklayın.

6d067814a2c38264.png

  1. Başarılı bir şekilde oluşturulduktan sonra aşağıdakine benzer talimatlar görürsünüz.

4bc1b3b341a5a81c.png

  1. Unity projesine dönün ve AdMob uygulama kimliği ve reklam birimi kimliği sabit değerlerini önceki adımda oluşturduğunuz değerlerle güncelleyin.

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. Google Mobil Reklamlar Unity Eklentisini Ekle

Eklentiyi içe aktarın

Unity uygulamasında AdMob Reklamları sunmak için projeye Google Mobil Reklamlar Unity Eklentisini eklemeniz gerekir.

  1. Google Mobile Ads Unity Plugin 3.18.1 paketini indirin. (Bu Codelab'in, eklentinin diğer sürümüyle uyumlu olmayabileceğini unutmayın)
  2. Awesome Drawing Quiz Unity projesinde. Projede, Öğeler > Paketi İçe Aktar > Özel Paket.
  3. GoogleMobileAds.unitypackage dosyasını indirdiğiniz projeye aktarın.

AdMob uygulama kimliğini yapılandırma

Unity Editor'da Öğeler > Google Mobil Reklamlar > Ayarlar'ı tıklayın.

44fc84fe88235c1f.png

Google AdMob bölümünün altındaki Etkin onay kutusunu tıklayarak AdMob'u etkinleştirin. Ardından, AdMob uygulama kimliğini aşağıdaki gibi girin:

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

a6ad7402d4daf330.png

5. Firebase Projesi Oluşturun

Firebase Konsolu'ndan yeni proje oluşturma

  1. Firebase konsoluna gidin.
  2. Add Project'i (Proje Ekle) seçin ve projenizi "Harika Çizim Testi" olarak adlandırın.

Unity uygulamasını ekleyin

  1. Yeni projenizin genel bakış ekranında Firebase'i Unity uygulamanıza ekleyin'i tıklayın.
  2. "iOS uygulaması olarak kaydet" onay kutusunu işaretleyin.
  3. iOS paket kimliğini şu şekilde girin: com.codelab.awesomedrawingquiz.unity
  4. Uygulamaya şu şekilde bir takma ad verin: Muhteşem Çizim Testi (iOS'te Unity)
  5. Android uygulaması olarak kaydet onay kutusunu işaretleyin.
  6. Android paketi adını şu şekilde girin: com.codelab.awesomedrawingquiz.unity
  7. Uygulamaya şu şekilde bir takma ad verin: Muhteşem Çizim Testi (Android'de Unity)
  8. Hem Android hem de iOS uygulamalarını kaydetmek için Uygulamayı Kaydet'i seçin.

Firebase yapılandırma dosyalarını Unity projesine ekleme

Ardından, uygulamanız için gerekli tüm Firebase meta verilerini içeren bir yapılandırma dosyasını indirebileceğiniz bir ekran görürsünüz. google-service.json ve GoogleService-Info.plist dosyalarını indirin, ardından ikisini de Unity projesindeki android_studio_folder.pngAssets klasörüne taşıyın.

331c165d80ba105e.png

Firebase Analytics SDK'sını ekleyin

  1. Firebase Unity SDK 5.5.0'ı indirin ve uygun bir yerde sıkıştırılmış dosyayı açın.
  2. Awesome Drawing Quiz Unity projesini açın, Öğeler > Paketi İçe Aktar > Özel Paket.
  3. Sıkıştırılmamış SDK'dan Remote Config SDK'sını (dotnet4/FirebaseAnalytics.unitypackage) içe aktarın.
  4. Unity paketini içe aktar penceresinde İçe Aktar'ı tıklayın.

6. AdMob'u Firebase Projesi'ne bağlama

Uygulamalarınızı Firebase'e bağlamak için aşağıdaki adımları tamamlayın.

  1. https://apps.admob.com adresine giderek AdMob hesabınızda oturum açın.
  2. Kenar çubuğundaki Uygulamalar'ı tıklayın.
  3. "Muhteşem Çizim Testi"ni seçin. Son kullanılan uygulamalar listesinde uygulamayı göremiyorsanız AdMob'a eklediğiniz tüm uygulamaları içeren listede arama yapmak için Tüm uygulamaları görüntüle'yi tıklayabilirsiniz.
  4. Kenar çubuğundaki Uygulama ayarları'nı tıklayın.
  5. Firebase'e bağla'yı tıklayın.
  6. "Mevcut bir Firebase projesine bağla ve yeni bir Firebase uygulaması oluştur" seçeneğini belirleyin. Ardından açılır menüden "Awesome Çizim Testi" projesini seçin.
  7. "DEVAM" düğmesini tıkladığınızda "Başarıyla bağlantı oluşturuldu" mesajını görürsünüz. İşlemi tamamlamak için "BİTTİ" düğmesini tıklayın.

AdMob uygulamanızı Firebase Projesi'ne bağladığınızda, uygulamanız hem AdMob'da hem de Firebase konsolunda aşağıdaki gibi bazı ek özelliklerin kilidini açar:

Gelir kartı (AdMob)

Gelir kartında, olası tüm gelir akışlarını tek bir yerden bütünsel olarak inceleyebilirsiniz. Desteklenen gelir kaynakları şunlardır:

  • AdMob (Tahmini)
  • Uyumlulaştırılmış Reklam Ağları (Gözlemlenen)
  • Uygulama içi satın alma işlemleri
  • E-ticaret satın alma işlemleri

10fe118249e11150.png

Kullanıcı metrikleri kartı (AdMob)

Kullanıcı metrikleri kartında, reklam deneyiminizdeki değişikliklerin kullanıcı davranışını nasıl etkileyebileceğini görebilirsiniz.

5f56366f1b31d4a1.png

Ödüllü Reklamlar Raporu (AdMob)

Ödüllü Reklamlar Raporu, yayıncıların, kullanıcıların ödüllü reklamlarıyla nasıl etkileşim kurduğunu anlamasına yardımcı olacak çeşitli metrikler sunar.

658a2868777690ea.png

Toplam gelir kartı (Firebase)

AdMob uygulamanızı Firebase'e bağladıktan sonra Firebase kontrol panelindeki toplam gelir kartında, uygulama içi satın alma işlemleri ve e-ticaret satın alma işlemleriyle birlikte AdMob'dan elde edilen gelir de gösterilir.

98cb283977b023a.png

Reklam etkinlikleri raporları (Firebase)

Reklama özel etkinlikler (tıklama, gösterim ve ödül etkinlikleri) otomatik olarak toplanır ve Firebase için Google Analytics'te kullanılabilir.

bf77bd8c00c1441b.png

7. Projeyi çalıştırma

Projeyi derleyip çalıştırdıktan sonra uygulama başlatıldığında aşağıdaki ekranı göreceksiniz.

f5fbf4565c5d8647.png

"OYUN BAŞLAT"ı tıkladığınızda ekranda bir çizim görürsünüz. Göreviniz, üstte görüntülenen ipucunu kullanarak çizimin adını tahmin etmektir. Buradan ilk harfini ve çizimin adının uzunluğunu tahmin edebilirsiniz.

bbdf4d23fb08a519.png ad82d7e657945c4d.png

Çizimin adını bilmiyorsanız "ATLA" düğmesini tıklayarak seviyeyi atlayabilirsiniz.

Yanıtı tahmin etmenize yardımcı olacak ek bir ipucu isteyebilirsiniz. "HINT" düğmesini tıklayıp ödüllü video reklam izleyerek daha fazla ipucu elde edebilirsiniz. Reklamı izledikten sonra ödül olarak bir harf daha gösterilir.

8c33687361f83a13.png b048d6587c10e9df.png

8. Uygulama etkinlikleri ekleyin

Harika Çizim Testi'nde kullanıcı yolculuğunu daha iyi anlamak için kullanıcının oyundaki davranışını takip eden aşağıdaki gibi birkaç özel etkinlik tanımlayacaksınız:

Etkinlik adı

Tetiklenme nedeni...

Parametreler

game_start

Kullanıcı yeni bir oyuna başladığında

yok

level_start

Kullanıcı bir sahnede yeni bir seviyeye (yeni bir çizim testi) başladığında. (Bir aşamada 6 seviye vardır)

level_name

level_wrong_answer

Kullanıcı yanlış bir yanıt gönderdiğinde

level_name

ad_reward_prompt

Kullanıcı ipucu düğmesine dokunduğunda ve bir ödüllü video reklam izlemesi istendiğinde

ad_unit_id

ad_reward_impression

Kullanıcı ödüllü video reklam izlemeye başladığında

ad_unit_id

level_success

Kullanıcı doğru yanıtı gönderdiğinde (bir seviyeyi temizlediğinde)

seviye_adı, deneme_sayısı, geçen_süre_sn, hint_used

level_fail

Kullanıcı bir seviyeyi atladığında

seviye_adı, deneme_sayısı, geçen_süre_sn, hint_used

game_complete

maç bittiğinde

number_of_correct_answers

Her etkinlikle ilişkilendirilen her parametrenin açıklaması aşağıdaki gibidir:

Etkinlik adı

Parametre adı

Açıklama

level_start

level_name

Seviyede gösterilen çizimin adı (ör. "muz")

level_wrong_answer

level_name

Seviyede gösterilen çizimin adı (ör. "muz")

ad_reward_prompt

ad_unit_id

Ödüllü Video Reklamı görüntülemek için kullanılan reklam birimi kimliği

ad_reward_impression

ad_unit_id

Ödüllü Video Reklamı görüntülemek için kullanılan reklam birimi kimliği

level_success

level_name

Seviyede gösterilen çizimin adı (ör. "muz")

level_success

number_of_attempts

Bir seviyeyi geçmek için yapılan deneme sayısı

level_success

elapsed_time_sec

Bir seviyeyi temizlemek için geçen süre (saniye cinsinden)

level_success

hint_used

Kullanıcının bir ipucu kullanıp kullanmadığı (ödüllü video reklamı izleyip izlemediği) (1: ipucu kullandı / 0: ipucu olmadan seviyeyi geçti)

level_fail

level_name

Seviyede gösterilen çizimin adı (ör. "muz")

level_fail

number_of_attempts

Bir seviyeyi geçmek için yapılan deneme sayısı

level_fail

elapsed_time_sec

Bir seviyeyi temizlemek için geçen süre (saniye cinsinden)

level_fail

hint_used

Kullanıcının bir ipucu kullanıp kullanmadığı (ödüllü video reklamı izleyip izlemediği) (1: ipucu kullandı / 0: ipucu olmadan seviyeyi geçti)

game_complete

number_of_correct_answers

Oyunda temizlenen seviye sayısı

Özel etkinlikleri günlüğe kaydetmek için yardımcı sınıf oluşturma

Analytics etkinliğini kolayca kaydetmek için özel etkinlikleri yönetebileceğiniz bir yardımcı sınıf oluşturmanız gerekir.

İlk olarak Assets/Scripts klasörü altında yeni bir klasör oluşturun ve bu klasörü Analytics olarak adlandırın. Ardından yeni bir C# Komut Dosyası oluşturun ve Analytics klasörünün altında QuizAnalytics.cs olarak adlandırın.

QuizAnalytics.cs dosyasına aşağıdaki kodu ekleyin.

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

Oyundaki analiz etkinliklerini günlüğe kaydetme

Assets/Scripts/Scenes klasörünün altındaki Game.cs dosyasını açın. AwesomeDrawingQuiz.Analytics ad alanının altında bulunan QuizAnalytics sınıfını kullanmak için use yönergesini aşağıdaki gibi ekleyin.

Sahneler/Game.cs

using AwesomeDrawingQuiz.Ads;

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

...

namespace AwesomeDrawingQuiz.Scene {
   ...
}

Ardından, Start() işlevinde, geçerli ekranın adını değiştirmek için QuizAnalytics.SetScreenName() öğesini çağırın. Ayrıca, bir oyunun başladığını belirtmek için QuizAnalytics.LogGameStart() öğesini çağırın.

Sahneler/Game.cs

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

    ...

    SetHintButtonEnabled(false);

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

Daha sonra, geri çağırma işlevlerine, özel etkinlikleri günlüğe kaydetmek için aşağıdaki şekilde çağrılar ekleyin:

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

    ...
}

Son olarak, Assets/Scripts/Scenes klasöründeki Main.cs dosyasını güncelleyin. Firebase SDK'sında herhangi bir yöntemi çağırmadan önce Firebase'in hazır olup olmadığını kontrol etmeniz gerekir.

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. Analiz etkinliklerinde hata ayıklama

Etkinliklerin doğru şekilde günlüğe kaydedildiğini doğrulamak için DebugView'u kullanabilirsiniz. DebugView, geliştirme cihazlarında uygulamanız tarafından günlüğe kaydedilen ham etkinlik verilerini neredeyse gerçek zamanlı olarak görmenizi sağlar.

Bu, geliştirmenin araç aşamasında doğrulama açısından çok yararlıdır ve analiz uygulamanızdaki hataları ve hataları keşfetmenize yardımcı olabilir.

Android'de hata ayıklama modunu etkinleştirme

Genel olarak, uygulamanızda günlüğe kaydedilen etkinlikler yaklaşık bir saatlik bir süre içinde gruplanır ve birlikte yüklenir. Analiz uygulamanızı anında doğrulamak amacıyla, etkinlikleri minimum gecikmeyle yüklemek için geliştirme cihazınızda Hata Ayıklama modunu etkinleştirmeniz gerekir.

Öncelikle Android Studio'da Terminal aracını açın. Bu araç çubuğu alt kısmındaki araç çubuğunda bulunur.

c8dc1b4f08a224b8.png

Ardından aşağıdaki komutu yürütün (test Android cihazının bilgisayarınıza bağlı olduğundan veya Android Emulator'ın çalıştığından emin olun):

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

Siz aşağıdaki komutu çalıştırarak Hata Ayıklama modunu açıkça devre dışı bırakana kadar bu davranış devam eder:

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

iOS'te hata ayıklama modunu etkinleştirme

Geliştirme cihazınızda Analytics Hata Ayıklama modunu etkinleştirmek için Xcode'da aşağıdaki komut satırı bağımsız değişkenini belirtin:

-FIRDebugEnabled

Siz aşağıdaki komut satırı bağımsız değişkenini belirterek Hata Ayıklama modunu açıkça devre dışı bırakana bu davranış kadar devam eder:

-FIRDebugDisabled

DebugView ile Analytics etkinliklerinde hata ayıklama

Test cihazınızda Hata Ayıklama modunu etkinleştirdikten sonra Firebase konsoluna gidin ve menüden DebugView'u seçin. Ardından, test cihazınızda oyununuzu oynayarak günlüğe kaydedilen ve DebugView raporunda gösterilen etkinlikleri görebilirsiniz.

827059255d09ac00.png

Etkinlik adını tıklayarak her etkinlikle ilgili ayrıntılı bilgilere erişebilirsiniz. Örnek olarak, aşağıdaki ekran görüntüsünde level_start etkinliğiyle ilişkili parametre ayrıntıları gösterilmektedir.

475db00d05d03ab8.png

Daha fazla bilgi için lütfen DebugView yardım merkezi makalesini inceleyin.

10. Parametre raporlamasını etkinleştir

Firebase için Google Analytics varsayılan olarak toplam etkinlik sayısını toplar. Ancak özel parametrelerle ilgili raporlamanın, ilgilendiğiniz her etkinlik parametresi için açıkça etkinleştirilmesi gerekir. Bu özellik etkinleştirildikten sonra Firebase için Google Analytics, özel parametrelere ilişkin istatistikleri gösteren ek kartlar gösterir.

Bir etkinliğe özel parametreler kaydetmek için:

  1. Firebase konsoluna gidin ve daha önce oluşturduğunuz Awesome Drawing Quiz projesini seçin.
  2. Gezinme menüsünden Etkinlikler'i tıklayın.
  1. Değiştirmek istediğiniz etkinliğin satırında 73afe611adf58774.png simgesini tıklayın>. Parametre raporlamasını düzenleyin.

aad40de06ee0c3ad.png

  1. Parametre adını girin alanına, kaydetmek istediğiniz parametrenin adını girin.

Not: Eşleşme bulunmazsa parametre adını girip EKLE'yi tıklamanız yeterlidir.e066c761aae4797f.png 5. Aşağıdaki tabloya bakın ve Tür alanını buna göre Metin veya Sayı olarak ayarlayın. Sayısal parametreler için Ölçü Birimi alanını da ayarladığınızdan emin olun. 6. Kurulumu tamamlamak için KAYDET düğmesini tıklayın.

Aşağıda listelenen her etkinlik için parametre raporlamasını etkinleştirin.

Etkinlik adı

Parametre adı

Parametre türü

Ölçü Birimi

level_start

level_name

Metin

Yok

level_wrong_answer

level_name

Metin

Yok

level_success

level_name

Metin

Yok

level_success

number_of_attempts

Sayı

Standart

level_success

elapsed_time_sec

Sayı

Saniye

level_success

hint_used

Sayı

Standart

level_fail

level_name

Metin

Yok

level_fail

number_of_attempts

Sayı

Standart

level_fail

elapsed_time_sec

Sayı

Saniye

level_fail

hint_used

Sayı

Standart

game_complete

number_of_correct_answers

Sayı

Standart

Aşağıdaki örnekte, level_success etkinliği için özel parametre raporlama ayarları gösterilmektedir:

6d569c8c27df2914.png

Parametre raporlama ayarlarını tamamladıktan sonra, parametre raporlamasının etkin olduğu her etkinlikle ilişkili parametreleri görebilirsiniz.

d1a37589d54bca6b.png

11. Etkinlik raporundan analizler alma

Oyuna birkaç etkinlik eklediğiniz için oyunun kullanıcı davranışıyla ilgili soruları yanıtlayabilmeniz gerekir. Aşağıda, Firebase etkinlikleri raporundan edinebileceğiniz birkaç analiz verilmiştir.

Hangi düzey en yüksek yanlış cevap sayısına sahip?

Bu soruyu yanıtlamak için her düzey için kaç level_wrong_answer etkinliğinin tetiklendiğini öğrenmeniz gerekir.

Etkinlikler raporundaki level_wrong_answer simgesini tıklayın. level_wrong_answer etkinlik raporunda level_name kartını bulun. Söz konusu kartta level_name parametresiyle ilişkili değerler aşağıdaki gibi gösterilir.

25da426bbc0c612c.png

Yukarıdaki ekran görüntüsüne göre ufukta en yüksek sayıda yanlış cevap olduğunu kolayca öğrenebilirsiniz. Bu, kullanıcıların diğer düzeylere kıyasla daha zor olduğu anlamına gelir.

Bu bölümden elde ettiğiniz bilgilerden yararlanarak yeni başlayan kullanıcılara, elde tutma oranını yüksek tutmak için zor seviyeler sunmamaya karar verebilirsiniz.

Bir seviyeyi geçmek için ortalama kaç deneme yapıldı?

Muhteşem Çizim Testi'nde kullanıcılar, yanıtı istedikleri seviyeye gönderebilir.

level_success etkinliğindeki number_of_attempts parametresi için parametre raporlamasını etkinleştirdiğiniz için söz konusu parametreyle ilgili ayrıntılı metrikleri görebilirsiniz.

Etkinlikler raporundan level_success etkinliğini tıklayın. level_success etkinlik raporunda number_of_attemps kartını bulun. İlgili karttaki ortalama deneme sayısını aşağıdaki gibi görürsünüz:

43de290f9f1a0ac9.png

Buradaki bilgileri kullanarak oyunun ortalama zorluk düzeyini optimize edebilirsiniz. Örneğin, ortalama deneme sayısı 1'e çok yakınsa oyunu biraz daha zor hale getirmeyi düşünebilirsiniz.

Kullanıcılar sonunda bir seviyeyi geçememelerine rağmen ipucu alarak soruyu çözmeye çalıştılar mı?

Kullanıcı bir seviyeyi atlamaya karar verdiğinde bir level_fail etkinliği tetiklenir. Kullanıcının kararının birçok nedeni olabilir.

Ancak oyun, ödüllü video reklamı izledikten sonra onlara ipucu verebileceği için kullanıcının en azından ipucu yardımıyla seviyeyi geçmeye çalışıp çalışmadığını bilmek önemlidir.

Etkinlikler raporundan level_fail etkinliğini tıklayın. level_fail etkinlik raporunda hint_used kartını bulun. hint_used etkinlik parametrelerinin ortalama sayısını görürsünüz. Kullanılan ipucunun 1 olarak, ipucu kullanılmadığında ise 0 değerine ayarlandığını unutmayın.

313814372cd7c8a4.png

hint_used kartındaki sayıların 0'a yakın olması, ödülün (ipucu) kullanıcıların pek ilgisini çekmediğini gösterir. Ayrıca, Ödüllü Video Reklam'dan elde ettiğiniz geliri artırma fırsatını da kaçırıyorsunuz.

Bu nedenle, kullanıcıların oyunla daha derin etkileşimler kurabilmesi ve Ödüllü Video Reklam'dan elde edilen geliri artırabilmesi için ödülü kullanıcılara daha yararlı hale getirmeyi düşünmelisiniz.

Her oyunda ortalama kaç seviye temizlendi?

Awesome Drawing Quiz'de her oyun için toplam 6 seviye vardır. Kullanıcı altı düzeyi tamamladığında (her bir düzeyde tamamlamış veya geçemediğinden bağımsız olarak) parametre olarak number_of_correct_answers ile bir game_complete etkinliği tetiklenir.

number_of_correct_answers, kullanıcının kaç seviyeyi temizlediğini (doğru cevap verdi) gösterdiğinden, yanıtı number_of_correct_answers parametresinin metriklerine bakarak bulabilirsiniz.

Etkinlikler raporunda game_complete etkinliği tıklayın. game_complete etkinlik raporunda number_of_correct_answers kartını bulun. number_of_correct_answers etkinlik parametrelerinin ortalama sayısını görürsünüz.

d9eeaa019d1bceb4.png

Çıkarılan seviyelerin ortalama sayısı çok düşükse oyunu yeniden düzenleyerek insanların bir seviyeyi geçmelerine yardımcı olabilirsiniz. Böylece ilgilerini kaybetmeden oyununuzu oynamaya devam edebilirler.

12. Hepsi bu kadar.

AdMob+Firebase 101 Unity Codelab'ini tamamladınız. Bu Codelab için tamamlanmış kodu android_studio_folder.png101-complete_and_102-base klasöründe bulabilirsiniz.

AdMob+Firebase Codelab'in sonraki bölümünde uygulama etkinliği akışını görselleştirmek için dönüşüm hunisinin nasıl kullanılacağını öğreneceksiniz. Ayrıca, uygulama güncellemesi olmadan oyundaki parametre değerini optimize etmek için Remote Config ve A/B testinin nasıl kullanılacağını da ele alacağız.