AdMob+Firebase 101 Android: 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 ve etkileşimi artırmanıza yardımcı olabilir. Örneğin, ödüllü reklamlar, video reklam izleyen kullanıcılara uygulama içi para birimi veya öğeler sunmanıza olanak tanır. Böylece kullanıcılar, aksi takdirde takılıp kalabilecekleri ve kullanıcı kaybına yol açabilecek noktalarda yeni başarılara ulaşabilir.

Ancak mükemmel bir reklam deneyimi oluşturmak kolay değildir. Şu gibi sorularınız olabilir: Bu reklamları ne sıklıkta göstermelisiniz? Nerede ve ne zaman göstermelisiniz? Ödül ne olmalı? Maalesef bu sorunun yanıtı uygulamadan uygulamaya ve yerleşimden yerleşime değişir. Herkes için geçerli tek bir cevap yoktur.

Firebase için Google Analytics, AdMob ve Firebase'in sunduğu diğer birçok güçlü ancak kullanımı kolay araç sayesinde uygulamanızı veriye dayalı bir şekilde ince ayarlamak artık çok daha kolay ve sorunsuz. Bugün, bu özellikten nasıl yararlanmaya başlayabileceğinizi göstereceğiz.

Ne oluşturacaksınız?

Bu codelab, Awesome Drawing Quiz adlı bir uygulama oluşturma sürecinde size yol gösterecek üç codelab'den ilkidir. Bu uygulama, oyuncuların çizimin adını tahmin etmesine olanak tanıyan bir oyundur. Ödüllü reklamları ve Firebase hizmetlerini oyununuza nasıl dahil edebileceğinizi gösterir.

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

Bu codelab'i uygularken herhangi bir sorunla (kod hataları, dilbilgisi hataları, net olmayan ifadeler vb.) karşılaşırsanız lütfen codelab'in sol alt köşesindeki Hata bildir bağlantısını kullanarak sorunu bildirin.

Neler öğreneceksiniz?

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

Gerekenler

  • Android Studio 4.1 veya daha yeni bir sürüm
  • Google Hesabı
  • Cihazınızı bağlamak için USB kablosuyla Android 5.0 veya sonraki sürümlerin yüklü olduğu bir test cihazı ya da Play Store/Google API'lerini destekleyen bir sistem görüntüsüyle AVD (Android Sanal Cihaz) çalıştıran bir Android Emulator

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

Yeni Başlayan Orta Düzey Uzman

Firebase ile ilgili deneyim seviyenizi nasıl değerlendirirsiniz?

Başlangıç Orta İleri

2. Geliştirme ortamını kurma

Kodu indirme

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

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

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

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

Depoda aşağıdaki dört klasör bulunur:

  • android_studio_folder.png101-base: Bu codelab'de oluşturacağınız başlangıç kodu.
  • android_studio_folder.png101-complete_and_102-base: Bu codelab'in tamamlanmış kodu ve 102 numaralı codelab'in başlangıç kodu.
  • android_studio_folder.png102-complete: 102 numaralı Codelab'in tamamlanmış kodu.

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

Android Studio'yu başlatın ve karşılama ekranında "Projeyi içe aktar"ı seçin. Ardından, indirdiğiniz koddan 101-base dizinini seçin.

Proje artık Android Studio'da açık olmalıdır.

3. Ödüllü video reklam birimi oluşturma (isteğe bağlı)

Başlangıç uygulamasında, kolaylık sağlamak için özel bir ödüllü video reklam birimi zaten yer alıyor. AdMob hesabınızda yeni bir hesap oluşturmak istemiyorsanız bu adımı atlayabilirsiniz.

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

  1. AdMob Konsolu'na gidin.
  2. Uygulamalar menüsünde "Uygulama Ekle"yi tıklayın.
  3. "Uygulamanızı Google Play veya App Store'da yayınladınız mı?" sorusuna "HAYIR" yanıtını verin.
  4. Uygulamaya "Awesome Drawing Quiz" adını verin, Platform olarak "Android"i seçin ve "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ı uygulayın.

  1. AdMob ön uç bölümünde Uygulamalar menüsünü tıklayın, ardından uygulama listesinden "Awesome Drawing Quiz" uygulamasını seçin.
  2. 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ı istediğiniz gibi girin. Ardından, ödül miktarını 1, ödül öğesini ise "ipucu" olarak ayarlayın (bu, uygulamanın şu anda kullanıcılara verdiği ödüldür). 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ıyla oluşturulduğunda aşağıdakine benzer talimatlar görürsünüz: ff872a005a07b75e.png
  2. Android projesine geri dönün ve AdMob uygulama kimliği ile reklam birimi kimliği sabitlerini önceki adımda oluşturduğunuz kimliklerle güncelleyin.

strings.xml

<!-- Update the value with your AdMob app id -->
<string name="admob_app_id">YOUR_ADMOB_APP_ID</string>

GameActivity.kt

// Update the value with your Rewarded Video ad unit id
private const val AD_UNIT_ID = "<YOUR_AD_UNIT_ID>";

4. Firebase projesi oluşturma

Firebase konsolundan yeni bir proje oluşturma

  1. Firebase konsoluna gidin.
  2. Proje Ekle'yi seçin ve projenize "Harika Çizim Testi" adını verin. Bu proje için Google Analytics'i etkinleştir radyo düğmesinin etkin olduğundan emin olun.
  3. Kullanmayı planladığınız Google Analytics hesabını seçin. Çoğu kullanıcı için Firebase İçin Varsayılan Hesap seçeneğini belirlemek yeterli olacaktır. Ancak kullanmak istediğiniz başka bir Google Analytics hesabınız varsa onu buradan seçin.
  4. Proje oluştur'u tıklayın.

Android uygulamasını ekleme

  1. Yeni projenizin genel bakış ekranında Firebase'i Android uygulamanıza ekleyin'i tıklayın.
  2. Codelab'in paket adını girin: com.codelab.awesomedrawingquiz
  3. Uygulamanız için bir takma ad belirleyin: Harika Çizim Testi
  4. SHA-1 bu proje için gerekli olmadığından SHA-1 alanını boş bırakın.
  5. Uygulamanızı kaydetmek için Uygulamayı kaydet'i seçin.

Uygulamanıza google-services.json dosyasını 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österilir. Download google-service.json'ı (google-service.json dosyasını indir) tıklayın ve dosyayı projenizdeki android_studio_folder.pngapp dizinine kopyalayın.

32419a0fa25a1405.png

Bağımlılık sürümlerini bildirme

Öncelikle Firebase'i projeye entegre etmek için gereken her bağımlılığın sürümünü ekleyerek başlayalım. Proje kökünde bulunan dependencies.gradle dosyasını açın, ardından google-services eklentisini, Firebase Analytics SDK'sını ve Firebase Core SDK'sının sürümünü ekleyin.

dependencies.gradle

ext {
    ...

    // TODO: Declare google-services plugin version (101)
    googleServicesPluginVersion = '4.3.4'

    ...

    // TODO: Declare Firebase BOM version (101)                                                                                                                                                                                                   
    firebaseBomVersion = '26.2.0'

    ...
}

Uygulamanıza google-services eklentisini uygulama

google-services eklentisi, uygulamanızı Firebase'i kullanacak şekilde yapılandırmak için google-services.json dosyasını kullanır.

Proje kök dizininde bulunan build.gradle dosyasında google-services'i classpath olarak ekleyin.

build.gradle

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    ...
    
    dependencies {
        classpath "com.android.tools.build:gradle:$androidPluginVersion"

        // TODO: Add google-services plugin (101)
        classpath "com.google.gms:google-services:$googleServicesPluginVersion"

        ...
    }
}

...

Ardından, app/build.gradle dosyasına aşağıdaki satırı ekleyerek google-services eklentisini uygulayın:

app/build.gradle

apply plugin: 'com.android.application'

// TODO: Apply google-services plugin (101)
apply plugin: 'com.google.gms.google-services'

android {
    ...
}

dependencies {
    ...
}

Firebase SDK'yı projeye ekleyin

Hâlâ app/build.gradle dosyanızdayken uygulama bağımlılıklarına Analytics SDK'sını ekleyin.

app/build.gradle

apply plugin: 'com.android.application'

android {
    ...
}

dependencies {
    ...

    // TODO: Import the Firebase BoM (101)
    implementation platform("com.google.firebase:firebase-bom:$firebaseBomVersion")

    // COMPLETE: Add Firebase Analytics dependency (101)
    implementation 'com.google.firebase:firebase-analytics-ktx'

    ...
}

...

Projenizi Gradle dosyalarıyla senkronize etme

Tüm bağımlılıkların uygulamanızda kullanılabilir olduğundan emin olmak için projenizi Gradle dosyalarıyla senkronize edin. Projenizi Gradle dosyalarıyla senkronize etmek için File > Sync Project with Gradle Files (Dosya > Projeyi Gradle Dosyalarıyla Senkronize Et) menüsünü seçin.

5. AdMob'u Firebase projesine 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. "Awesome Drawing Quiz"i (Harika Çizim Testi) 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ğunda 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 Drawing Quiz" projesini seçin.
  7. "DEVAM" düğmesini tıkladıktan sonra "Başarıyla bağlandı" mesajını görürsünüz. İşlemi tamamlamak için "BİTTİ" düğmesini tıklayın.

AdMob uygulamanızı Firebase projesine bağladığınızda hem AdMob hem de Firebase konsolunda aşağıdaki gibi bazı ek özellikler etkinleştirilir:

Gelir kartı (AdMob)

Gelir kartından, olası tüm gelir akışlarına tek bir yerden bütünsel olarak bakabilirsiniz. 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ından, reklam deneyiminizde yapılan değişikliklerin kullanıcı davranışını nasıl etkileyebileceğini görebilirsiniz.

5f56366f1b31d4a1.png

Ödüllü reklam raporu (AdMob)

Ödüllü reklam raporu, yayıncıların kullanıcıların ödüllü reklamlarıyla nasıl etkileşim kurduğunu anlamaları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şlemlerinin yanı sıra AdMob'dan elde edilen gelir de gösterilir.

98cb283977b023a.png

Reklam etkinlikleri raporları (Firebase)

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

bf77bd8c00c1441b.png

6. Projeyi yürütme

Projeyi derleyip çalıştırdıktan sonra uygulama başladığında aşağıdaki ekranı görürsünüz.

15f1d8041988974c.png

OYUNU BAŞLAT'ı tıkladığınızda ekranda bir çizim görürsünüz. Göreviniz, en üstte gösterilen ipucunu kullanarak çizimin adını tahmin etmektir. Bu ipucundan, çizimin adının ilk harfini ve uzunluğunu çıkarabilirsiniz.

8e87e96256d6874a.png 9c4a0143c3234cb2.png

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

Cevabı tahmin etmenize yardımcı olacak ek bir ipucu isteyebilirsiniz. "İPUCU" düğmesini tıklayıp ödüllü video reklam izleyerek ek ipucu alabilirsiniz. Reklamı izlemeyi tamamladığınızda ödül olarak bir harf daha açıklanır.

edcf6f0d833ea4ea.png 47ab9a07b1c71711.png

7. Uygulama etkinlikleri ekleme

Awesome Drawing Quiz'deki kullanıcı yolculuğunu ayrıntılı olarak anlamak için oyundaki kullanıcı davranışını aşağıdaki gibi izleyen birkaç özel etkinlik tanımlayacaksınız:

Etkinlik adı

Tetiklendi...

Parametreler

game_start

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

yok

level_start

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

level_name

level_wrong_answer

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

level_name

ad_reward_prompt

Kullanıcı ipucu düğmesine dokunduğunda ve ö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 tamamladığında)

level_name, number_of_attempts, elapsed_time_sec, hint_used

level_fail

Kullanıcı bir seviyeyi atladığında

level_name, number_of_attempts, elapsed_time_sec, hint_used

game_complete

Oyun bittiğinde

number_of_correct_answers

Her etkinlikle ilişkili 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

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

ad_reward_prompt

ad_unit_id

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

ad_reward_impression

ad_unit_id

Ödüllü video reklam görüntülemek için kullanılan bir 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 tamamlamak için geçen süre (saniye)

level_success

hint_used

Kullanıcının bir seviyeyi geçmek için ipucu kullanıp kullanmadığı (ödüllü video reklam izleyip izlemediği) (1: ipucu kullanıldı / 0: seviye ipucu kullanılmadan geçildi)

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 tamamlamak için geçen süre (saniye)

level_fail

hint_used

Kullanıcının bir seviyeyi geçmek için ipucu kullanıp kullanmadığı (ödüllü video reklam izleyip izlemediği) (1: ipucu kullanıldı / 0: seviye ipucu kullanılmadan geçildi)

game_complete

number_of_correct_answers

Oyunda temizlenen seviye sayısı

Özel etkinlikleri kaydetmek için yardımcı sınıf oluşturma

Analiz etkinliğini kolayca günlüğe kaydetmek için özel etkinlikleri yönetecek bir yardımcı sınıf oluşturacaksınız.

Öncelikle yeni bir Kotlin dosyası (Kotlin sınıfı değil) oluşturun ve com.codelab.awesomedrawingquiz paketi altında QuizAnalytics.kt olarak adlandırın. Özel etkinliklerinizin adını ve parametrelerini tanımlayan alanlar oluşturun.

QuizAnalytics.kt

private const val EVENT_AD_REWARD_PROMPT = "ad_reward_prompt"

private const val EVENT_AD_REWARD_IMPRESSION = "ad_reward_impression"

private const val EVENT_LEVEL_FAIL = "level_fail"

private const val EVENT_LEVEL_SUCCESS = "level_success"

private const val EVENT_LEVEL_WRONG_ANSWER = "level_wrong_answer"

private const val EVENT_GAME_START = "game_start"

private const val EVENT_GAME_COMPLETE = "game_complete"

private const val PARAM_AD_UNIT_ID = "ad_unit_id"

private const val PARAM_ELAPSED_TIME_SEC = "elapsed_time_sec"

private const val PARAM_HINT_USED = "hint_used"

private const val PARAM_NUMBER_OF_ATTEMPTS = "number_of_attempts"

private const val PARAM_NUMBER_OF_CORRECT_ANSWERS = "number_of_correct_answers"

Ardından, oyununuzdaki özel etkinlikleri günlüğe kaydetmenize yardımcı olan uzantı işlevleri ekleyin. Özel etkinliklerin çoğunun, her etkinlik hakkında daha fazla bağlam bilgisi edinmenizi sağlayan parametreler içerdiğini unutmayın. Ayrıca, birkaç etkinlik adı ve parametrenin (FirebaseAnalytics.Event.LEVEL_NAME ve FirebaseAnalytics.Event.LEVEL_START) Analytics tarafından önceden tanımlandığını ve bu nedenle bunları kullanacağımızı unutmayın.

QuizAnalytics.kt

...

fun FirebaseAnalytics.logGameStart() = logEvent(EVENT_GAME_START, null)

fun FirebaseAnalytics.logLevelStart(levelName: String) {
    logEvent(FirebaseAnalytics.Event.LEVEL_START) {
        param(FirebaseAnalytics.Param.LEVEL_NAME, levelName)
    }
}

fun FirebaseAnalytics.logLevelWrongAnswer(levelName: String) {
    logEvent(EVENT_LEVEL_WRONG_ANSWER) {
        param(FirebaseAnalytics.Param.LEVEL_NAME, levelName)
    }
}

fun FirebaseAnalytics.logAdRewardPrompt(adUnitId: String) {
    logEvent(EVENT_AD_REWARD_PROMPT) {
        param(PARAM_AD_UNIT_ID, adUnitId)
    }
}

fun FirebaseAnalytics.logAdRewardImpression(adUnitId: String) {
    logEvent(EVENT_AD_REWARD_IMPRESSION) {
        param(PARAM_AD_UNIT_ID, adUnitId)
    }
}

fun FirebaseAnalytics.logLevelSuccess(
    levelName: String,
    numberOfAttempts: Int,
    elapsedTimeSec: Int,
    hintUsed: Boolean
) {
    logEvent(EVENT_LEVEL_SUCCESS) {
        param(FirebaseAnalytics.Param.LEVEL_NAME, levelName)
        param(PARAM_NUMBER_OF_ATTEMPTS, numberOfAttempts.toLong())
        param(PARAM_ELAPSED_TIME_SEC, elapsedTimeSec.toLong())
        param(PARAM_HINT_USED, if (hintUsed) 1 else 0)
    }
}

fun FirebaseAnalytics.logLevelFail(
    levelName: String,
    numberOfAttempts: Int,
    elapsedTimeSec: Int,
    hintUsed: Boolean
) {
    logEvent(EVENT_LEVEL_FAIL) {
        param(FirebaseAnalytics.Param.LEVEL_NAME, levelName)
        param(PARAM_NUMBER_OF_ATTEMPTS, numberOfAttempts.toLong())
        param(PARAM_ELAPSED_TIME_SEC, elapsedTimeSec.toLong())
        param(PARAM_HINT_USED, if (hintUsed) 1 else 0)
    }
}

fun FirebaseAnalytics.logGameComplete(
    numberOfCorrectAnswers: Int
) {
    logEvent(EVENT_GAME_COMPLETE) {
        param(PARAM_NUMBER_OF_CORRECT_ANSWERS, numberOfCorrectAnswers.toLong())
    }
}

Oyundaki analiz etkinliklerini günlüğe kaydetme

GameViewModel sınıfında, FirebaseAnalytics örneği için yeni bir özellik ekleyin.

GameViewModel.kt

class GameViewModel(
    ...
    // TODO: Accept FirebaseAnalytics instance as a parameter (101)
    private val analytics: FirebaseAnalytics,
) : ViewModel() {
   ...
}

Ardından, AwesomeDrawingQuizViewModelFactory sınıfında daha önce GameViewModel sınıfında yaptığınız gibi yeni bir özellik ekleyin.

AwesomeDrawingQuizViewModelFactory.kt

class AwesomeDrawingQuizViewModelFactory(
    ...
    // TODO: Accept FirebaseAnalytics instance as a parameter (101)
    private val analytics: FirebaseAnalytics,
) : ViewModelProvider.Factory {
    ...
}

Ardından, AwesomeDrawingQuiz sınıfında provideFirebaseAnalytics() işlevini ekleyin ve provideViewModelFactory() işlevini, FirebaseAnalytics örneğini AwesomeDrawingViewModelFactory'ye iletecek şekilde güncelleyin.

AwesomeDrawingQuiz.kt

class AwesomeDrawingQuiz : Application() {

    ...

    fun provideViewModelFactory() = AwesomeDrawingQuizViewModelFactory(
        this,
        provideGameSettings(),
        // TODO: Pass FirebaseAnalytics instance as a parameter (101)
        provideFirebaseAnalytics(),
    )

    // TODO: Provide FirebaseAnalytics instance (101)
    private fun provideFirebaseAnalytics() = Firebase.analytics

    ...

}

Artık özel etkinlikleri uygulamaya hazırsınız. İlk olarak, bir oyunun başladığını belirtmek için startGame() işlevinde logGameStart() çağrısını yapın.

logGameStart(), FirebaseAnalytics sınıfının bir uzantı işlevi olduğundan FirebaseAnalytics sınıfının örneğinden çağırabilirsiniz.

GameViewModel.kt

fun startGame() {
    ...

    // TODO: Log game_start event (101)
    analytics.logGameStart()

    ...
}

Ardından, checkAnswer() işlevine level_success ve level_wrong_answer etkinliklerini ekleyin.

GameViewModel.kt

fun checkAnswer(userAnswer: String) {
    ...
    if (correct) {
        ...

        // TODO: Log level_success event (101)
        analytics.logLevelSuccess(
            levelName = drawing.word,
            numberOfAttempts = numAttempts,
            elapsedTimeSec = elapsedTimeInSeconds,
            hintUsed = isHintUsed,
        )

        ...
    } else {
        // TODO: Log level_wrong_answer event (101)
        analytics.logLevelWrongAnswer(levelName = drawing.word)

        ...
    }
}

Ardından, skipLevel() işlevinde seviyeyi başarısız olarak işaretlemek için level_fail etkinliğini ekleyin.

GameViewModel.kt

fun skipLevel() {
   ...

    // TODO: Log level_fail event (101)
    analytics.logLevelFail(
        levelName = drawing.word,
        numberOfAttempts = numAttempts,
        elapsedTimeSec = elapsedTimeInSeconds,
        hintUsed = isHintUsed,
    )

    ...
}

Ardından, kullanıcının ödüllü video reklamla ilgili davranışını izlemek için logAdRewardPrompt() ve logAdRewardImpression() işlevlerini uygulayın.

GameViewModel.kt

fun logAdRewardPrompt(adUnitId: String) {
    // TODO: Log ad_reward_prompt event (101)
    analytics.logAdRewardPrompt(adUnitId)
}

fun logAdRewardImpression(adUnitId: String) {
    // TODO: Log ad_reward_impression event (101)
    analytics.logAdRewardImpression(adUnitId)
}

Son olarak, requestNewDrawing() ve finishGame() işlevini değiştirerek level_start ve game_complete özel etkinliklerini ekleyin.

GameViewModel.kt

private fun requestNewDrawing() {
    ...

    drawingRequestDisposable = drawingDao.getRandomDrawings(seenWords)
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe { d ->
            ...

            // TODO: Log level_start event (101)
            analytics.logLevelStart(d.word)

            ...
        }
}

private fun finishGame() {
    // TODO: Log game_complete event (101)
    analytics.logGameComplete(numCorrectAnswers)

    ...
}

8. Analiz etkinliklerinde hata ayıklama

Etkinliklerin doğru şekilde kaydedildiğini doğrulamak için Firebase konsolundaki DebugView'u kullanabilirsiniz. DebugView, geliştirme cihazlarında uygulamanız tarafından kaydedilen ham etkinlik verilerini neredeyse anlık olarak görmenizi sağlar.

Bu, geliştirmenin enstrümantasyon aşamasında doğrulama amacıyla çok kullanışlıdır ve analiz uygulamanızdaki hataları keşfetmenize yardımcı olabilir.

Hata ayıklama modunu etkinleştirme

Genellikle, uygulamanızda kaydedilen etkinlikler yaklaşık bir saatlik bir süre boyunca gruplandırılır ve birlikte yüklenir. Analiz uygulamanızı anında doğrulamak için, etkinlikleri minimum gecikmeyle yüklemek üzere geliştirme cihazınızda hata ayıklama modunu etkinleştirmeniz gerekir.

Hata ayıklama modunu etkinleştirmek için aşağıdaki adımları uygulayın:

  1. Android Studio'da Terminal araç penceresini açın (Görünüm > Araç Pencereleri > Terminal).

c8dc1b4f08a224b8.png

  1. Aşağıdaki komutu çalıştırı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.codelab.awesomedrawingquiz

Aşağıdaki komutu çalıştırarak hata ayıklama modunu açıkça devre dışı bırakıncaya kadar bu davranış devam eder:

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

DebugView ile Analytics etkinliklerinde hata ayıklama

Test cihazınızda hata ayıklama modunu etkinleştirdikten sonra Firebase konsolunda projenize gidin ve menüden Analytics > DebugView'ı seçin. Ardından, etkinliklerin günlüğe kaydedilip DebugView raporunda gösterildiğini görmek için test cihazınızda oyununuzu oynayın.

827059255d09ac00.png

Etkinlik adını tıklayarak her etkinlik hakkında ayrıntılı bilgiye erişebilirsiniz. Örneğin, 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.

9. Özel boyutları ve metrikleri etkinleştirme

Firebase için Google Analytics, varsayılan olarak toplam etkinlik sayısını toplar. İlgilendiğiniz her etkinlik parametresi için bu parametrenin raporlamasını açıkça etkinleştirmeniz gerekir. Firebase için Google Analytics daha sonra özel parametrelerin istatistiklerini göstermek üzere ek kartlar görüntüleyebilir.

Özel boyutları ve metrikleri kaydetmek için:

  1. Firebase konsoluna gidin ve daha önce oluşturduğunuz Awesome Drawing Quiz projesini seçin.
  2. Gezinme menüsünden Analytics > Etkinlikler'i tıklayın.
  1. Özel Tanımları Yönetin'i seçin.
  2. Özel boyutlar sekmesinde Özel boyut oluştur'u tıklayın.
  3. Etkinlik parametresi adı alanına level_name girin ve parametre kaydını tamamlamak için Kaydet'i tıklayın.

3d20ee9d7de74e9b.png

  1. Ardından, Özel metrikler sekmesini seçin ve Özel metrik oluştur'u tıklayın.
  2. Aşağıdaki parametreler için parametre adını ve ölçü birimini girin.

Parametre adı

Parametre türü

Ölçü Birimi

number_of_attempts

Sayı

Standart

hint_used

Sayı

Standart

elapsed_time_sec

Sayı

Saniye

number_of_correct_answers

Sayı

Standart

10. Etkinlik raporundan analiz alma

Oyuna birkaç etkinlik eklediğiniz için oyunun kullanıcı davranışıyla ilgili soruları yanıtlayabilirsiniz. Firebase etkinlikleri raporundan elde edebileceğiniz bazı analizler aşağıda verilmiştir.

Hangi seviyede en fazla yanlış cevap var?

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

Etkinlik raporunda level_wrong_answer simgesini tıklayın. level_wrong_answer etkinlik raporunda level_name kartını bulun. level_name parametresiyle ilişkili değerleri bu kartta aşağıdaki gibi görürsünüz.

25da426bbc0c612c.png

Yukarıdaki ekran görüntüsüne göre, en fazla yanlış yanıtın horizon seviyesinde olduğunu kolayca görebilirsiniz. Bu da bu seviyenin diğer seviyelere kıyasla kullanıcılar için daha zor olduğu anlamına gelir.

Buradan edindiğiniz analizleri kullanarak, elde tutma oranını yüksek tutmak için yeni kullanıcılara zor seviyeler sunmamaya karar verebilirsiniz.

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

Kullanıcılar, Awesome Drawing Quiz'de her seviyenin yanıtını istedikleri kadar gönderebilir.

level_success etkinliğinde number_of_attempts parametresi için parametre raporlamayı etkinleştirdiğinizden bu parametreyle ilgili ayrıntılı metrikleri görebilirsiniz.

Etkinlik raporundaki 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 analizlerden yararlanarak oyunun ortalama zorluk seviyesini optimize edebilirsiniz. Örneğin, ortalama deneme sayısı 1'e çok yakınsa oyunu biraz daha zorlaştırmayı düşünebilirsiniz.

Kullanıcılar, son seviyeyi geçememiş olsalar bile ipucu alarak soruyu çözmeye çalıştı mı?

Bir kullanıcı seviye atlamaya karar verdiğinde level_fail etkinliği tetiklenir. Kullanıcının bu kararı vermesinin birçok nedeni olabilir.

Ancak oyun, kullanıcılar ödüllü video reklam izledikten sonra ipucu verebildiğinden, kullanıcının ipucu yardımıyla seviyeyi geçmeye çalışıp çalışmadığını bilmek önemlidir.

Etkinlik raporundaki 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. İpucu kullanıldıysa parametrenin değerinin 1, kullanılmadıysa 0 olduğunu unutmayın.

313814372cd7c8a4.png

hint_used kartındaki sayılar 0'a yakınsa ödülün (ipucu) bu kullanıcılar için yeterince faydalı olmadığı anlaşılır. Ayrıca, ödüllü video reklamdan elde edilen geliri artırma fırsatını da kaçırıyorsunuz.

Bu nedenle, kullanıcılara daha büyük bir ödül sunarak oyunla daha derinlemesine etkileşim kurmalarını sağlayabilir ve ödüllü video reklamlar aracılığıyla elde ettiğiniz geliri artırabilirsiniz.

Her oyunda ortalama kaç seviye geçildi?

Harika Çizim Testi'ndeki her oyunun toplam 6 seviyesi vardır. Kullanıcı 6 seviyeyi tamamladığında (her seviyeyi geçip geçmediğine bakılmaksızın) game_complete etkinliği, parametre olarak number_of_correct_answers ile tetiklenir. number_of_correct_answers parametresi, kullanıcının doğru yanıt verdiği seviye sayısını gösterir.

Etkinlik raporunda game_complete etkinliğini 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

Tamamlanan seviyelerin ortalama sayısı çok düşükse oyunun seviyelerini yeniden düzenleyerek kullanıcıların önceki seviyeleri daha kolay geçmelerini sağlayabilir ve böylece oyunu ilgi kaybetmeden oynamaya devam etmelerine yardımcı olabilirsiniz.

11. İşlem tamamlandı

AdMob+Firebase 101 Android Codelab'ini tamamlamış olmanız gerekir. Bu Codelab'in tamamlanmış kodunu android_studio_folder.png101-complete_and_102-base klasöründe bulabilirsiniz.

AdMob+Firebase Codelab'in bir sonraki bölümünde, uygulama etkinliği akışını görselleştirmek için dönüşüm hunisini nasıl kullanacağınızı öğreneceksiniz. Bir sonraki bölümde, uygulama güncellemesi olmadan oyundaki parametre değerini optimize etmek için Remote Config ve A/B testi özelliklerinin nasıl kullanılacağı da ele alınacaktır.