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

1. परिचय

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

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

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

आपको क्या बनाने को मिलेगा

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

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

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

आपको क्या सीखने को मिलेगा

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

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

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

AdMob इस्तेमाल करने के अपने अनुभव को आप क्या रेटिंग देंगे?

शुरुआती सामान्य एडवांस

Firebase इस्तेमाल करने के अपने अनुभव को आप क्या रेटिंग देंगे?

शुरुआती सामान्य एडवांस

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

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

इस कोडलैब के लिए, पूरा कोड डाउनलोड करने के लिए, इस बटन पर क्लिक करें:

डाउनलोड की गई ज़िप फ़ाइल को अनपैक करें. इससे 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-complete — 102 कोडलैब के लिए पूरा किया गया कोड.

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

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

अब आपके पास Android Studio में प्रोजेक्ट खुला होना चाहिए.

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

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

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

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

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

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

7672f41ec611101b.png

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

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. अपने ऐप्लिकेशन के लिए कोई निकनेम सेट करो: Awesome Drawing Quiz
  4. SHA-1 फ़ील्ड को खाली छोड़ दें, क्योंकि इस प्रोजेक्ट के लिए SHA-1 की ज़रूरत नहीं है.
  5. अपना ऐप्लिकेशन रजिस्टर करने के लिए, ऐप्लिकेशन रजिस्टर करें को चुनें.

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

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

32419a0fa25a1405.png

डिपेंडेंसी वर्शन का एलान करना

आइए, प्रोजेक्ट में Firebase को इंटिग्रेट करने के लिए, ज़रूरी हर डिपेंडेंसी का वर्शन जोड़ें. प्रोजेक्ट रूट में मौजूद dependencies.gradle फ़ाइल खोलें. इसके बाद, google-services प्लगिन, 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-services प्लगिन लागू करना

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

प्रोजेक्ट की रूट डायरेक्ट्री में मौजूद 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"

        ...
    }
}

...

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

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 ऐप्लिकेशन बनाएं" विकल्प चुनें. इसके बाद, ड्रॉपडाउन मेन्यू से "Awesome Drawing Quiz" प्रोजेक्ट चुनें.
  7. "जारी रखें" बटन पर क्लिक करने के बाद, आपको "लिंक हो गया" मैसेज दिखेगा. सेट अप पूरा करने के लिए, "हो गया" बटन पर क्लिक करें.

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

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

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

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

10fe118249e11150.png

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

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

5f56366f1b31d4a1.png

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

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

658a2868777690ea.png

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

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

98cb283977b023a.png

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

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

bf77bd8c00c1441b.png

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

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

15f1d8041988974c.png

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

8e87e96256d6874a.png 9c4a0143c3234cb2.png

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

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

edcf6f0d833ea4ea.png 47ab9a07b1c71711.png

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

Awesome Drawing Quiz में उपयोगकर्ता के सफ़र को बेहतर तरीके से समझने के लिए, आपको कुछ कस्टम इवेंट तय करने होंगे. ये इवेंट, गेम में उपयोगकर्ता के व्यवहार को इस तरह ट्रैक करेंगे:

इवेंट का नाम

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

पैरामीटर

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, elapsed_time_sec, hint_used

level_fail

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

level_name, number_of_attempts, elapsed_time_sec, hint_used

game_complete

गेम खत्म होने पर

number_of_correct_answers

हर इवेंट से जुड़े हर पैरामीटर का ब्यौरा यहां दिया गया है:

इवेंट का नाम

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

ब्यौरा

level_start

level_name

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

level_wrong_answer

level_name

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

ad_reward_prompt

ad_unit_id

इस कुकी का इस्तेमाल, इनाम वाला वीडियो विज्ञापन दिखाने के लिए किया जाता है

ad_reward_impression

ad_unit_id

इस कुकी का इस्तेमाल, इनाम वाला वीडियो विज्ञापन दिखाने के लिए किया जाता है

level_success

level_name

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

level_success

number_of_attempts

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

level_success

elapsed_time_sec

किसी लेवल को पूरा करने में लगा समय (सेकंड में)

level_success

hint_used

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

level_fail

level_name

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

level_fail

number_of_attempts

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

level_fail

elapsed_time_sec

किसी लेवल को पूरा करने में लगा समय (सेकंड में)

level_fail

hint_used

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

game_complete

number_of_correct_answers

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

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

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

सबसे पहले, नई 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"

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

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() फ़ंक्शन जोड़ें. साथ ही, provideViewModelFactory() फ़ंक्शन को अपडेट करें, ताकि FirebaseAnalytics इंस्टेंस को AwesomeDrawingViewModelFactory में पास किया जा सके.

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 की मदद से, डेवलपमेंट डिवाइसों पर आपके ऐप्लिकेशन से लॉग किया गया इवेंट का रॉ डेटा, रीयल टाइम में देखा जा सकता है.

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

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

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

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

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

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. कस्टम डाइमेंशन और मेट्रिक चालू करना

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

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

  1. Firebase कंसोल पर जाएं और पहले से बनाया गया Awesome Drawing Quiz प्रोजेक्ट चुनें.
  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

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

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

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

Awesome Drawing Quiz में, उपयोगकर्ता हर लेवल के जवाब को जितनी बार चाहें उतनी बार सबमिट कर सकते हैं.

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

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

43de290f9f1a0ac9.png

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

क्या उपयोगकर्ताओं ने सवाल को हल करने के लिए हिंट का इस्तेमाल किया, भले ही वे आखिर में किसी लेवल को पूरा न कर पाए हों?

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

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

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

313814372cd7c8a4.png

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

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

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

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

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

d9eeaa019d1bceb4.png

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

11. सब हो गया!

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

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