AdMob+Firebase 101 Android: सेटअप & Analytics की बुनियादी बातें

1. परिचय

विज्ञापन, आपके ऐप्लिकेशन के पूरे उपयोगकर्ता अनुभव का एक अहम हिस्सा होते हैं. विज्ञापन लागू करने के सही तरीके से, ऐप्लिकेशन के अनुभव को बेहतर बनाया जा सकता है. साथ ही, उपयोगकर्ता को अपने साथ जोड़े रखने और यूज़र ऐक्टिविटी बढ़ाने में भी मदद मिलती है. उदाहरण के लिए, इनाम वाले विज्ञापनों की मदद से, उपयोगकर्ताओं को वीडियो विज्ञापन देखने के लिए वीडियो में इस्तेमाल की जाने वाली मुद्रा या आइटम उपलब्ध कराए जा सकते हैं. इससे उपयोगकर्ता नई ऊंचाइयों तक पहुंच सकते हैं, जहां वे अटक सकते हैं और चर्न आउट कर सकते थे.

हालांकि, विज्ञापनों का बेहतरीन अनुभव पाना आसान नहीं होता. आपके पास इस तरह के सवाल हो सकते हैं: आपको ये विज्ञापन कितनी बार दिखाने चाहिए? आपको इन्हें कहां और कब दिखाना चाहिए? अवॉर्ड कौनसा होना चाहिए? माफ़ करें, अलग-अलग ऐप्लिकेशन के लिए इन सवालों के जवाब अलग-अलग होते हैं. साथ ही, इन्हें प्लेसमेंट और प्लेसमेंट के हिसाब से भी अलग-अलग माना जाता है. ऐसा कोई जवाब नहीं होता जो सभी के लिए एक जैसा हो.

Firebase के लिए Google Analytics, AdMob, और Firebase के साथ मिलने वाले कई बेहतरीन और इस्तेमाल में आसान टूल की मदद से, आपके ऐप्लिकेशन को डेटा-ड्रिवन तरीके से बेहतर बनाना पहले से ज़्यादा आसान और बेहतर हो गया है. आज हम आपको शुरुआत करने का तरीका बताएंगे!

आपको क्या बनाना होगा

यह कोडलैब उन तीन कोडलैब में से पहला है जो आपको Awesome Drawings Quiz नाम का एक ऐप्लिकेशन बनाने में मदद करेगा. यह एक ऐसा गेम है जो खिलाड़ियों को ड्रॉइंग के नाम का अनुमान लगाने की सुविधा देता है. इस लेख में यह बताया जाएगा कि इनाम वाले विज्ञापनों और Firebase की सेवाओं को अपने गेम में कैसे शामिल किया जा सकता है.

इस कोडलैब में, ऐप्लिकेशन के कुछ अहम इवेंट रिकॉर्ड करने के लिए, आपको 'Firebase के लिए Google Analytics' को इंटिग्रेट करना होगा. साथ ही, आपको Firebase कंसोल में दिखाए गए ऐप्लिकेशन के आंकड़ों को पढ़ने का तरीका भी पता चलेगा.

कोडलैब के इस मॉड्यूल को इस्तेमाल करते समय, अगर आपको कोई समस्या आती है, जैसे कि कोड में गड़बड़ी, व्याकरण से जुड़ी गड़बड़ियां, गलत शब्द वगैरह, तो कृपया कोडलैब के नीचे बाएं कोने में मौजूद गलती की शिकायत करें लिंक का इस्तेमाल करके, समस्या की शिकायत करें.

आपको इनके बारे में जानकारी मिलेगी

  • अपने ऐप्लिकेशन में 'Firebase के लिए Google Analytics' सेटअप करने का तरीका
  • ऐप्लिकेशन इवेंट को रिकॉर्ड करने का तरीका
  • Firebase कंसोल में दिखाए गए ऐप्लिकेशन के आंकड़ों को पढ़ने का तरीका

आपको इन चीज़ों की ज़रूरत होगी

  • Android Studio वर्शन 4.1+
  • Google खाता
  • अपने डिवाइस को कनेक्ट करने के लिए, यूएसबी केबल के साथ Android 5.0 या इसके बाद के वर्शन वाला टेस्ट डिवाइस या एवीडी (Android वर्चुअल डिवाइस) पर चलने वाला Android एम्युलेटर, जिसकी सिस्टम इमेज Play Store/Google API के साथ काम करती हो

AdMob के साथ आपका अनुभव कैसा रहा?

शुरुआती इंटरमीडिएट कुशल

Firebase के साथ अपने अनुभव के स्तर को आप कितनी रेटिंग देंगे?

शुरुआती इंटरमीडिएट कुशल

2. डेवलपमेंट एनवायरमेंट सेटअप करें

कोड डाउनलोड करना

इस कोडलैब के लिए सभी कोड डाउनलोड करने के लिए, नीचे दिया गया बटन क्लिक करें:

डाउनलोड की गई ZIP फ़ाइल को अनपैक करें. इससे admob-firebase-codelabs-android नाम का रूट फ़ोल्डर खुल जाएगा.

...या कमांड लाइन से, GitHub रिपॉज़िटरी का क्लोन बनाएं.

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

डेटा स्टोर करने की जगह में चार फ़ोल्डर इस तरह से शामिल होते हैं:

  • android_studio_folder.png101-base — इस कोडलैब में बनाया जाने वाला शुरुआती कोड.
  • android_studio_folder.png101-complete_and_102-base — इस कोडलैब के लिए पूरा कोड और 102 कोडलैब के लिए एक स्टार्टर.
  • android_studio_folder.png102 पूरा हो गया है — 102 कोडलैब के लिए कोड पूरा हो गया है.

स्टार्टर ऐप्लिकेशन इंपोर्ट करें

Android Studio लॉन्च करें और स्वागत स्क्रीन पर "प्रोजेक्ट इंपोर्ट करें" चुनें. इसके बाद, डाउनलोड किए गए कोड से 101-base डायरेक्ट्री चुनें.

अब आपको Android Studio में प्रोजेक्ट खोलना होगा.

3. इनाम वाले वीडियो विज्ञापन की यूनिट सेटअप करें (ज़रूरी नहीं)

आपकी सुविधा के लिए, स्टार्टर ऐप्लिकेशन में इनाम वाले वीडियो विज्ञापन की एक खास यूनिट पहले से ही मौजूद है. अगर आपको AdMob खाते में नया चरण नहीं बनाना है, तो आपके पास इस चरण को छोड़ने का विकल्प है.

अपने खाते में एक नया AdMob ऐप्लिकेशन बनाने के लिए, कृपया नीचे दिए गए निर्देशों का पालन करें:

  1. AdMob Console पर जाएं.
  2. ऐप्लिकेशन मेन्यू में, "ऐप्लिकेशन जोड़ें" पर क्लिक करें.
  3. "क्या आपने अपना ऐप्लिकेशन Google Play या App Store पर पब्लिश किया है" पूछे जाने पर, जवाब "नहीं."
  4. ऐप्लिकेशन का नाम "बेहतरीन ड्रॉइंग क्विज़," रखें प्लैटफ़ॉर्म के तौर पर "Android" चुनें और "जोड़ें" पर क्लिक करें.

अपने खाते में AdMob ऐप्लिकेशन बनाने के बाद, नीचे दिया गया तरीका अपनाकर, इनाम वाले वीडियो विज्ञापन की नई यूनिट बनाएं.

  1. AdMob फ़्रंटएंड में, ऐप्लिकेशन मेन्यू पर क्लिक करें. इसके बाद, ऐप्लिकेशन की सूची से "बेहतरीन ड्रॉइंग क्विज़" चुनें.
  2. इनाम वाले वीडियो विज्ञापन की नई यूनिट बनाने के लिए, विज्ञापन यूनिट जोड़ें पर क्लिक करें.
  3. विज्ञापन फ़ॉर्मैट के लिए, इनाम वाले विज्ञापन को चुनें.

7672f41ec611101b.png

  1. अपनी पसंद के हिसाब से विज्ञापन यूनिट का नाम डालें. इसके बाद, इनाम की रकम को 1 पर और इनाम के आइटम को "संकेत" पर सेट करें. यह वह इनाम है जो ऐप्लिकेशन फ़िलहाल उपयोगकर्ताओं को देता है. इनाम वाले वीडियो विज्ञापन की नई यूनिट बनाने के लिए, विज्ञापन यूनिट बनाएं पर क्लिक करें.

6d067814a2c38264.png

  1. बनाने के बाद, आपको नीचे दिए गए निर्देशों से मिलते-जुलते निर्देश दिखेंगे: ff872a005a07b75e.png
  2. Android प्रोजेक्ट पर वापस जाएं. इसके बाद, पिछले चरण में बनाए गए AdMob ऐप्लिकेशन आईडी और विज्ञापन यूनिट आईडी के कॉन्स्टेंट को अपडेट करें.

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 प्रोजेक्ट सेट अप करें

Firebase कंसोल से नया प्रोजेक्ट बनाना

  1. Firebase कंसोल पर जाएं.
  2. प्रोजेक्ट जोड़ें को चुनें और अपने प्रोजेक्ट को "बेहतरीन ड्रॉइंग क्विज़" नाम दें. पक्का करें कि इस प्रोजेक्ट के लिए Google Analytics चालू करें रेडियो बटन चालू है.
  3. वह Google Analytics खाता चुनें जिसका आपको इस्तेमाल करना है. ज़्यादातर के लिए, Firebase के लिए डिफ़ॉल्ट खाता विकल्प चुनना ही काफ़ी है. हालांकि, अगर आपके पास कोई दूसरा Google Analytics खाता है जिसका आपको इस्तेमाल करना है, तो उसे यहां चुनें.
  4. प्रोजेक्ट बनाएं पर क्लिक करें.

Android ऐप्लिकेशन जोड़ना

  1. अपने नए प्रोजेक्ट की खास जानकारी वाली स्क्रीन पर, अपने Android ऐप्लिकेशन में Firebase जोड़ें पर क्लिक करें.
  2. कोडलैब के पैकेज का नाम डालें: com.codelab.awesomedrawingquiz
  3. अपने ऐप्लिकेशन के लिए कोई दूसरा नाम सेट करें: बेहतरीन ड्रॉइंग क्विज़
  4. SHA-1 फ़ील्ड को खाली छोड़ दें, क्योंकि इस प्रोजेक्ट के लिए SHA-1 की ज़रूरत नहीं होती.
  5. अपने ऐप्लिकेशन को रजिस्टर करने के लिए, ऐप्लिकेशन रजिस्टर करें को चुनें.

अपने ऐप्लिकेशन में google-services.json फ़ाइल जोड़ना

इसके बाद, आपको एक स्क्रीन दिखेगी, जहां से आप एक कॉन्फ़िगरेशन फ़ाइल डाउनलोड कर सकते हैं. इसमें आपके ऐप्लिकेशन के लिए सभी ज़रूरी Firebase मेटाडेटा होंगे. google-service.json डाउनलोड करें पर क्लिक करें और फ़ाइल को अपने प्रोजेक्ट की android_studio_folder.pngऐप्लिकेशन डायरेक्ट्री में कॉपी करें.

32419a0fa25a1405.png

डिपेंडेंसी वर्शन बताएं

आइए, प्रोजेक्ट में Firebase को इंटिग्रेट करने के लिए ज़रूरी हर डिपेंडेंसी का वर्शन जोड़कर शुरुआत करते हैं. प्रोजेक्ट रूट पर मौजूद dependencies.gradle फ़ाइल खोलें. इसके बाद, Google-सेवाएं प्लगिन, Firebase Analytics SDK टूल, और Firebase Core SDK वर्शन जोड़ें.

dependencies.gradle

ext {
    ...

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

    ...

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

    ...
}

अपने ऐप्लिकेशन में Google की सेवाओं वाले प्लगिन को लागू करें

Google-सेवाएं प्लग इन आपके ऐप्लिकेशन को Firebase का इस्तेमाल करने के लिए कॉन्फ़िगर करने के लिए google-services.json फ़ाइल का इस्तेमाल करता है.

प्रोजेक्ट रूट डायरेक्ट्री में मौजूद build.gradle फ़ाइल में, google-services को क्लासपाथ के तौर पर जोड़ें.

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"

        ...
    }
}

...

इसके बाद, app/build.gradle फ़ाइल में लाइन जोड़कर google-services प्लगिन लागू करें. इसके लिए, यह तरीका अपनाएं:

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 टूल जोड़ें

अब भी अपनी app/build.gradle फ़ाइल में, ऐप्लिकेशन डिपेंडेंसी में Analytics SDK टूल जोड़ें.

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'

    ...
}

...

अपने प्रोजेक्ट को Gradle फ़ाइलों के साथ सिंक करें

यह पक्का करने के लिए कि आपके ऐप्लिकेशन पर सभी डिपेंडेंसी उपलब्ध हों, अपने प्रोजेक्ट को Gradle फ़ाइलों के साथ सिंक करें. फ़ाइल > चुनें अपने प्रोजेक्ट को Gradle फ़ाइलों के साथ सिंक करने के लिए, Gradle फ़ाइलों के साथ प्रोजेक्ट सिंक करें.

5. AdMob को Firebase प्रोजेक्ट से लिंक करना

नीचे दिए गए तरीके से अपने ऐप्लिकेशन को Firebase से जोड़ें.

  1. https://apps.admob.com पर जाकर, अपने AdMob खाते में साइन इन करें.
  2. साइडबार में, 'ऐप्लिकेशन' पर क्लिक करें.
  3. "बेहतरीन ड्रॉइंग क्विज़" चुनें. अगर आपको हाल ही के ऐप्लिकेशन की सूची में यह नहीं दिखता है, तो सभी ऐप्लिकेशन देखें पर क्लिक करके, उन सभी ऐप्लिकेशन की सूची खोजें जिन्हें आपने AdMob में जोड़ा है.
  4. साइडबार में ऐप्लिकेशन सेटिंग पर क्लिक करें.
  5. Firebase से लिंक करें पर क्लिक करें.
  6. "किसी मौजूदा Firebase प्रोजेक्ट से लिंक करें और नया Firebase ऐप्लिकेशन बनाएं" विकल्प चुनें. इसके बाद, ड्रॉपडाउन मेन्यू से "बहुत बढ़िया ड्रॉइंग क्विज़" प्रोजेक्ट चुनें.
  7. "जारी रखें" बटन पर क्लिक करने के बाद, आपको "लिंक किया गया" मैसेज दिखेगा. प्रोसेस पूरी करने के लिए, "हो गया" बटन पर क्लिक करें.

AdMob ऐप्लिकेशन को Firebase प्रोजेक्ट से लिंक करने के बाद, आपको AdMob और Firebase कंसोल, दोनों पर कुछ अन्य सुविधाएं इस तरह मिलेंगी:

रेवेन्यू कार्ड (AdMob)

रेवेन्यू कार्ड पर जाकर, एक ही जगह पर रेवेन्यू के सभी संभावित तरीकों की जानकारी देखी जा सकती है. रेवेन्यू के ऐसे सोर्स के बारे में जानें जिनका इस्तेमाल किया जा सकता है:

  • AdMob (अनुमानित)
  • मीडिएशन वाले विज्ञापन नेटवर्क (निगरानी में रखे गए)
  • इन-ऐप्लिकेशन खरीदारी
  • ई-कॉमर्स प्लैटफ़ॉर्म पर खरीदारी

10fe118249e11150.png

उपयोगकर्ता मेट्रिक कार्ड (AdMob)

उपयोगकर्ता मेट्रिक कार्ड से, यह देखा जा सकता है कि विज्ञापन अनुभव में बदलाव करने से, उपयोगकर्ता के व्यवहार पर क्या असर पड़ सकता है.

5f56366f1b31d4a1.png

इनाम वाले विज्ञापनों की रिपोर्ट (AdMob)

इनाम वाले विज्ञापनों की रिपोर्ट में कई तरह की मेट्रिक होती हैं. इनसे पब्लिशर को यह समझने में मदद मिलती है कि उपयोगकर्ता, इनाम वाले विज्ञापनों के साथ कैसे इंटरैक्ट कर रहे हैं.

658a2868777690ea.png

कुल रेवेन्यू कार्ड (Firebase)

AdMob ऐप्लिकेशन को Firebase से लिंक करने के बाद, Firebase डैशबोर्ड पर मौजूद कुल रेवेन्यू कार्ड में, इन-ऐप्लिकेशन खरीदारी और ई-कॉमर्स खरीदारी के साथ-साथ, AdMob से हुई आय भी दिखेगी.

98cb283977b023a.png

विज्ञापन इवेंट की रिपोर्टिंग (Firebase)

विज्ञापन से जुड़े इवेंट (क्लिक, इंप्रेशन, और इनाम वाले इवेंट) अपने-आप इकट्ठा होते हैं और 'Firebase के लिए Google Analytics' में इस्तेमाल के लिए उपलब्ध होते हैं.

bf77bd8c00c1441b.png

6. प्रोजेक्ट चलाएं

प्रोजेक्ट को कंपाइल और रन करने के बाद, ऐप्लिकेशन शुरू होने पर आपको यह स्क्रीन दिखेगी.

15f1d8041988974c.png

गेम खेलना शुरू करें पर क्लिक करने के बाद,आपको स्क्रीन पर एक ड्रॉइंग दिखेगी. आपका मिशन, सबसे ऊपर दिखाए गए संकेत का इस्तेमाल करके, ड्रॉइंग के नाम का अनुमान लगाना है. इससे, ड्रॉइंग के पहले अक्षर और नाम की लंबाई का अनुमान लगाया जा सकता है.

8e87e96256d6874a.png 9c4a0143c3234cb2.png

अगर आपको नहीं पता कि ड्रॉइंग का नाम क्या है, तो ‘अभी नहीं’ बटन पर क्लिक करके लेवल को स्किप किया जा सकता है.

ऐसा हो सकता है कि आपको जवाब का अनुमान लगाने में मदद करने के लिए, एक और सुराग की ज़रूरत हो. ज़्यादा जानकारी के लिए, ‘HINT' बटन पर क्लिक करें और इनाम वाला वीडियो विज्ञापन देखें. विज्ञापन देखने के बाद, इनाम के तौर पर आपको एक और लेटर दिखेगा.

edcf6f0d833ea4ea.png 47ab9a07b1c71711.png

7. ऐप्लिकेशन इवेंट जोड़ें

बेहतरीन ड्रॉइंग क्विज़ में उपयोगकर्ता के सफ़र को गहराई से समझने के लिए,आपको कुछ कस्टम इवेंट परिभाषित करने होंगे. ये इवेंट गेम में उपयोगकर्ता के व्यवहार को इस तरह ट्रैक करते हैं:

इवेंट का नाम

ट्रिगर किया गया...

पैरामीटर

game_start

जब कोई उपयोगकर्ता नया गेम शुरू करता है

कोई नहीं

level_start

जब कोई उपयोगकर्ता किसी स्टेज में एक नया लेवल (एक नया ड्रॉइंग क्विज़) शुरू करता है. (एक स्टेज में छह लेवल होते हैं)

level_name

level_wrong_answer

जब कोई उपयोगकर्ता गलत जवाब सबमिट करता है

level_name

ad_reward_prompt

जब कोई उपयोगकर्ता संकेत बटन पर टैप करता है और उसे इनाम वाला वीडियो विज्ञापन देखने का प्रॉम्प्ट मिलता है

ad_unit_id

ad_reward_impression

जब कोई उपयोगकर्ता, इनाम वाले वीडियो विज्ञापन को देखना शुरू करता है

ad_unit_id

level_success

जब कोई उपयोगकर्ता सही जवाब सबमिट करता है (एक लेवल हटाता है)

level_name, number_of_attempts, खुलने_समय_sec, hint_used

level_fail

जब कोई उपयोगकर्ता किसी लेवल को स्किप करता है

level_name, number_of_attempts, खुलने_समय_sec, hint_used

game_complete

जब गेम खत्म हो जाए

number_of_correct_answers

हर इवेंट से जुड़े हर पैरामीटर की जानकारी यहां दी गई है:

इवेंट का नाम

पैरामीटर का नाम

जानकारी

level_start

level_name

लेवल में दिखाई गई ड्रॉइंग का नाम (उदाहरण के लिए, "केला")

level_wrong_answer

level_name

जब कोई उपयोगकर्ता गलत जवाब सबमिट करता है

ad_reward_prompt

ad_unit_id

इनाम वाले वीडियो विज्ञापन दिखाने के लिए इस्तेमाल की जाने वाली विज्ञापन यूनिट का आईडी

ad_reward_impression

ad_unit_id

इनाम वाले वीडियो विज्ञापन दिखाने के लिए इस्तेमाल की जाने वाली विज्ञापन यूनिट का आईडी

level_success

level_name

लेवल में दिखाई गई ड्रॉइंग का नाम (उदाहरण के लिए, "केला")

level_success

number_of_attempts

किसी लेवल को पार करने के लिए की गई कोशिशों की संख्या

level_success

elapsed_time_sec

किसी लेवल को पार करने में बीता समय, सेकंड में

level_success

hint_used

क्या उपयोगकर्ता ने लेवल पूरा करने के लिए संकेत (इनाम वाला वीडियो विज्ञापन देखा) का इस्तेमाल किया या नहीं (1: संकेत का इस्तेमाल किया / 0: बिना संकेत के किसी लेवल को पार किया)

level_fail

level_name

लेवल में दिखाई गई ड्रॉइंग का नाम (उदाहरण के लिए, "केला")

level_fail

number_of_attempts

किसी लेवल को पार करने के लिए की गई कोशिशों की संख्या

level_fail

elapsed_time_sec

किसी लेवल को पार करने में बीता समय, सेकंड में

level_fail

hint_used

क्या उपयोगकर्ता ने लेवल पूरा करने के लिए संकेत (इनाम वाला वीडियो विज्ञापन देखा) का इस्तेमाल किया या नहीं (1: संकेत का इस्तेमाल किया / 0: बिना संकेत के किसी लेवल को पार किया)

game_complete

number_of_correct_answers

गेम में पूरे किए गए लेवल की संख्या

कस्टम इवेंट लॉग करने के लिए, हेल्पर क्लास बनाएं

आंकड़ों के इवेंट को आसानी से लॉग करने के लिए, आपको एक हेल्पर क्लास बनानी होगी, ताकि कस्टम इवेंट मैनेज किए जा सकें.

सबसे पहले, एक नई Kotlin फ़ाइल बनाएं (Kotlin क्लास के बजाय) और उसे com.codelab.awesomedrawingquiz पैकेज में QuizAnalytics.kt नाम दें. ऐसे फ़ील्ड बनाएं जो आपके कस्टम इवेंट के नाम और उनके पैरामीटर के बारे में बताते हों.

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"

इसके बाद, एक्सटेंशन फ़ंक्शन जोड़ें. इनसे आपको गेम में कस्टम इवेंट लॉग करने में मदद मिलेगी. ध्यान दें कि ज़्यादातर कस्टम इवेंट में पैरामीटर शामिल होते हैं, ताकि आपको हर इवेंट के बारे में ज़्यादा जानकारी मिल सके. यह भी ध्यान रखें कि कुछ इवेंट के नाम और पैरामीटर (FirebaseAnalytics.Event.LEVEL_NAME और FirebaseAnalytics.Event.LEVEL_START) Analytics ने पहले ही तय कर दिए हैं. इसलिए, हम उनका इस्तेमाल करेंगे.

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

गेम में आंकड़ों से जुड़े इवेंट लॉग करें

GameViewModel क्लास में, FirebaseAnalytics इंस्टेंस के लिए एक नई प्रॉपर्टी जोड़ें.

GameViewModel.kt

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

इसके बाद, AwesomeDrawingQuizViewModelFactory क्लास में एक नई प्रॉपर्टी जोड़ें, जैसा कि आपने पहले GameViewModel में किया था.

AwesomeDrawingQuizViewModelFactory.kt

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

इसके बाद, AwesomeDrawingQuiz क्लास में, provideFirebaseAnalytics() फ़ंक्शन जोड़ें और FirebaseAnalytics इंस्टेंस को AwesomeDrawingViewModelFactory में पास करने के लिए, provideViewModelFactory() फ़ंक्शन को अपडेट करें.

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

    ...

}

अब आप कस्टम इवेंट लागू करने के लिए तैयार हैं. सबसे पहले, startGame() फ़ंक्शन में, logGameStart() को कॉल करके बताएं कि गेम शुरू हो गया है.

logGameStart(), FirebaseAnalytics क्लास का एक्सटेंशन फ़ंक्शन है. इसलिए, इसे FirebaseAnalytics क्लास के इंस्टेंस से कॉल किया जा सकता है.

GameViewModel.kt

fun startGame() {
    ...

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

    ...
}

इसके बाद, checkAnswer() फ़ंक्शन में level_success और level_wrong_answer इवेंट जोड़ें.

GameViewModel.kt

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

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

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

        ...
    }
}

इसके बाद, skipLevel() फ़ंक्शन में, लेवल को 'पुष्टि नहीं हुई' के तौर पर मार्क करने के लिए, level_fail इवेंट जोड़ें.

GameViewModel.kt

fun skipLevel() {
   ...

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

    ...
}

इसके बाद, इनाम वाले वीडियो विज्ञापन के बारे में उपयोगकर्ता का व्यवहार ट्रैक करने के लिए logAdRewardPrompt() और logAdRewardImpression() फ़ंक्शन लागू करें.

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

आखिर में, level_start और game_complete कस्टम इवेंट जोड़ने के लिए, requestNewDrawing() और finishGame() फ़ंक्शन में बदलाव करें.

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. आंकड़ों के इवेंट डीबग करना

Firebase कंसोल में DebugView का इस्तेमाल करके, यह पुष्टि की जा सकती है कि इवेंट सही तरीके से लॉग किए जा रहे हैं या नहीं. DebugView की मदद से, डेवलपमेंट डिवाइसों पर अपने ऐप्लिकेशन से लॉग किया गया रॉ इवेंट डेटा, करीब-करीब रीयल-टाइम में देखा जा सकता है.

यह डेवलपमेंट के इंस्ट्रुमेंटेशन फ़ेज़ के दौरान, पुष्टि करने के मकसद से बहुत मदद करता है. साथ ही, इससे आपको अपने आंकड़ों को लागू करने में हुई गड़बड़ियों का पता लगाने में भी मदद मिल सकती है.

डीबग मोड चालू करना

आम तौर पर, आपके ऐप्लिकेशन में लॉग किए गए इवेंट का करीब एक घंटे का बैच बनाकर, एक साथ अपलोड किया जाता है. आंकड़ों के लागू होने की तुरंत पुष्टि करने के लिए, आपको अपने डेवलपमेंट डिवाइस पर डीबग मोड चालू करना होगा, ताकि आपको कम से कम देरी से इवेंट अपलोड किए जा सकें.

डीबग मोड को चालू करने के लिए, नीचे दिया गया तरीका अपनाएं:

  1. Android Studio में Terminal टूल विंडो खोलें (व्यू > टूल Windows > Terminal).

c8dc1b4f08a224b8.png

  1. नीचे दिया गया निर्देश चलाएं (पक्का करें कि जांच के लिए इस्तेमाल होने वाला Android डिवाइस, आपके कंप्यूटर से कनेक्ट हो या Android Emulator चल रहा हो):
adb shell setprop debug.firebase.analytics.app com.codelab.awesomedrawingquiz

मौजूदा व्यवहार तब तक बना रहेगा, जब तक आप नीचे दिए गए निर्देश को लागू करके साफ़ तौर पर डीबग मोड बंद नहीं कर देते:

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

DebugView की मदद से Analytics इवेंट डीबग करना

टेस्ट डिवाइस पर डीबग मोड चालू करने के बाद, Firebase कंसोल में अपने प्रोजेक्ट पर जाएं और Analytics > DebugView को मेन्यू से लिया गया है. इसके बाद, अपने टेस्ट डिवाइस पर गेम खेलें, ताकि आपको यह पता चल सके कि इवेंट लॉग किए गए हैं और DebugView रिपोर्ट में दिख रहे हैं.

827059255d09ac00.png

किसी इवेंट के नाम पर क्लिक करके, उसके बारे में ज़्यादा जानकारी देखी जा सकती है. उदाहरण के लिए, इस स्क्रीनशॉट में level_start इवेंट से जुड़ी पैरामीटर की जानकारी दिखाई गई है.

475db00d05d03ab8.png

ज़्यादा जानकारी के लिए, कृपया DebugView सहायता केंद्र का लेख देखें.

9. कस्टम डाइमेंशन और मेट्रिक चालू करना

डिफ़ॉल्ट रूप से, Firebase के लिए Google Analytics, इवेंट की कुल संख्या इकट्ठा करता है. अपनी दिलचस्पी वाले हर इवेंट पैरामीटर के लिए, आपको उस पैरामीटर के लिए रिपोर्टिंग की सुविधा साफ़ तौर पर चालू करनी होगी. इसके बाद, 'Firebase के लिए Google Analytics', कस्टम पैरामीटर के आंकड़े दिखाने के लिए अतिरिक्त कार्ड दिखा सकता है.

कस्टम डाइमेंशन और मेट्रिक रजिस्टर करने के लिए:

  1. Firebase कंसोल पर जाएं और वह बेहतरीन ड्रॉइंग क्विज़ प्रोजेक्ट चुनें जिसे आपने पहले बनाया था.
  2. Analytics > नेविगेशन मेन्यू से इवेंट.
  1. कस्टम डेफ़िनिशन को मैनेज करें पर क्लिक करें.
  2. कस्टम डाइमेंशन टैब में, कस्टम डाइमेंशन बनाएं पर क्लिक करें.
  3. इवेंट पैरामीटर के नाम वाले फ़ील्ड में, level_name डालें और पैरामीटर रजिस्ट्रेशन पूरा करने के लिए, सेव करें पर क्लिक करें.

3d20ee9d7de74e9b.png

  1. इसके बाद, कस्टम मेट्रिक टैब चुनें और कस्टम मेट्रिक बनाएं पर क्लिक करें.
  2. इन पैरामीटर के लिए, पैरामीटर का नाम और मेज़रमेंट की यूनिट डालें.

पैरामीटर का नाम

पैरामीटर का टाइप

मेज़रमेंट की यूनिट

number_of_attempts

नंबर

स्टैंडर्ड मोड

hint_used

नंबर

स्टैंडर्ड मोड

elapsed_time_sec

नंबर

सेकंड

number_of_correct_answers

नंबर

स्टैंडर्ड मोड

10. इवेंट रिपोर्ट से अहम जानकारी पाना

आपने गेम में कुछ इवेंट जोड़े हैं. इसलिए, आपको उपयोगकर्ता के व्यवहार से जुड़े सवालों के जवाब मिल जाने चाहिए. यहां कुछ अहम जानकारी दी गई है, जो आपको Firebase इवेंट रिपोर्ट से मिल सकती है.

किस लेवल पर गलत जवाबों की संख्या सबसे ज़्यादा है?

इस सवाल का जवाब देने के लिए, आपको यह पता चलेगा कि हर लेवल के साथ कितने level_wrong_answer इवेंट ट्रिगर हुए.

इवेंट की रिपोर्ट में, level_wrong_answer पर क्लिक करें. level_wrong_answer इवेंट रिपोर्ट में, level_name कार्ड खोजें. आपको उस कार्ड पर level_name पैरामीटर से जुड़ी वैल्यू इस तरह दिखेंगी.

25da426bbc0c612c.png

ऊपर दिए गए स्क्रीनशॉट के हिसाब से, यह आसानी से पता लगाया जा सकता है कि क्षितिज में गलत जवाबों की संख्या सबसे ज़्यादा है. इसका मतलब है कि अन्य लेवल की तुलना में यह उपयोगकर्ताओं के लिए मुश्किल है.

यहां से मिली अहम जानकारी का इस्तेमाल करके, नए उपयोगकर्ताओं को मुश्किल लेवल उपलब्ध न कराने का फ़ैसला लिया जा सकता है. इससे, उपयोगकर्ताओं को अपने साथ जोड़े रखने की दर ज़्यादा बनी रहेगी.

किसी लेवल को पार करने के लिए औसतन कितनी बार कोशिश की गई?

बेहतरीन ड्रॉइंग क्विज़ में, उपयोगकर्ता हर लेवल के लिए जितना चाहें उतना जवाब सबमिट कर सकते हैं.

आपने level_success इवेंट में, number_of_attempts पैरामीटर पर पैरामीटर रिपोर्टिंग की सुविधा चालू की है. इसलिए, उस पैरामीटर के बारे में ज़्यादा जानकारी वाली मेट्रिक देखी जा सकती हैं.

इवेंट की रिपोर्ट में, level_success इवेंट पर क्लिक करें. level_success इवेंट रिपोर्ट में, number_of_attemps कार्ड खोजें. आपको उस कार्ड पर कोशिशों की औसत संख्या इस तरह दिखेगी:

43de290f9f1a0ac9.png

यहां दी गई अहम जानकारी का इस्तेमाल करके, गेम की कठिनाई का लेवल औसतन ऑप्टिमाइज़ किया जा सकता है. उदाहरण के लिए, अगर हर बार कोशिश करने पर एक ही बार में कोशिश की जाती है, तो ऐसे में खेल को थोड़ा मुश्किल बनाएं.

क्या उपयोगकर्ताओं ने संकेत पाकर सवाल को हल करने की कोशिश की, भले ही वे कोई लेवल पार नहीं कर पाए?

जब कोई उपयोगकर्ता किसी लेवल को छोड़कर आगे बढ़ने का फ़ैसला करता है, तो level_fail इवेंट ट्रिगर होता है. उपयोगकर्ता को यह फ़ैसला लेने की कई वजहें हो सकती हैं.

हालांकि, गेम उन्हें इनाम वाले वीडियो विज्ञापन देखने के बाद संकेत दे सकता है, इसलिए यह जानना ज़रूरी है कि उपयोगकर्ता ने संकेत की मदद से लेवल पार करने की कोशिश की है या नहीं.

इवेंट की रिपोर्ट में, level_fail इवेंट पर क्लिक करें. level_fail इवेंट रिपोर्ट में, hint_used कार्ड खोजें. आपको hint_used इवेंट पैरामीटर की औसत संख्या दिखेगी. ध्यान दें, अगर संकेत का इस्तेमाल किया गया है, तो पैरामीटर की वैल्यू 1 होती है. साथ ही, अगर संकेत का इस्तेमाल नहीं किया जाता है, तो पैरामीटर की वैल्यू 0 होती है.

313814372cd7c8a4.png

अगर hint_used कार्ड पर दिख रहे नंबर 0 के आस-पास हैं, तो इसका मतलब है कि इनाम (संकेत) इन लोगों के लिए काफ़ी नहीं है. साथ ही, इनाम वाले वीडियो विज्ञापन से मिलने वाले रेवेन्यू को बढ़ाने का मौका नहीं मिल पाएगा.

इसलिए, आपको बड़ा इनाम ऑफ़र करना चाहिए, ताकि उपयोगकर्ता गेम के साथ बेहतर तरीके से जुड़ सकें. साथ ही, इनाम वाले वीडियो विज्ञापनों से मिलने वाले रेवेन्यू में बढ़ोतरी हो.

हर गेम में औसतन कितने लेवल पार किए गए?

ऑसम ड्रॉइंग क्विज़ में हर गेम के लिए कुल 6 लेवल होते हैं. जब उपयोगकर्ता छह लेवल पूरे कर लेता है, तो इससे game_complete इवेंट ट्रिगर होता है. number_of_correct_answers को पैरामीटर के तौर पर जोड़ा जाता है. इससे कोई फ़र्क़ नहीं पड़ता कि उपयोगकर्ता ने हर लेवल में पास किया या उसे पूरा नहीं किया. number_of_correct_answers पैरामीटर से उन लेवल की संख्या पता चलती है जिनमें उपयोगकर्ता ने सही जवाब दिया था.

इवेंट की रिपोर्ट में, game_complete इवेंट पर क्लिक करें. game_complete इवेंट रिपोर्ट में, number_of_correct_answers कार्ड ढूंढें. आपको number_of_correct_answers इवेंट पैरामीटर की औसत संख्या दिखेगी.

d9eeaa019d1bceb4.png

अगर मंज़ूरी पा चुके लेवल की औसत संख्या बहुत कम है, तो आपको गेम में लेवल को फिर से व्यवस्थित करना चाहिए. इससे लोगों को पिछले लेवल से आगे निकलने में आसानी होगी, ताकि वे दिलचस्पी बनाए रखते हुए आपका गेम खेलना जारी रख सकें.

11. सब हो गया!

आपने AdMob+Firebase 101 Android कोडलैब (कोड बनाना सीखना) पूरा कर लिया है. इस कोडलैब के लिए पूरा कोड पाने के लिए, android_studio_folder.png101-complete_and_102-base फ़ोल्डर पर जाएं.

AdMob+Firebase कोडलैब (कोड बनाना सीखना) के अगले हिस्से में, आपको ऐप्लिकेशन इवेंट फ़्लो को विज़ुअलाइज़ करने के लिए फ़नल का इस्तेमाल करने का तरीका बताया जाएगा. अगले हिस्से में, रिमोट कॉन्फ़िगरेशन और A/B टेस्टिंग की सुविधा इस्तेमाल करने का तरीका भी बताया गया है. इसकी मदद से, ऐप्लिकेशन को अपडेट किए बिना गेम में पैरामीटर की वैल्यू को ऑप्टिमाइज़ किया जा सकता है.