Firebase Crashlytics से विज्ञापन रिस्पॉन्स आईडी को लॉग करना

Firebase Crashlytics, कम समय में होने वाला क्रैश रिपोर्टर है. यह आपके ऐप्लिकेशन में स्थिरता से जुड़ी समस्याओं को आसानी से मैनेज करने में मदद करता है. Crashlytics, ऐप्लिकेशन के अचानक बंद होने की समस्या का ग्रुप बनाकर और उन परिस्थितियों को हाइलाइट करके तय करता है जो क्रैश से जुड़ी हैं.

इस गाइड में बताया गया है कि Crashlytics को अपने Android Studio प्रोजेक्ट में कैसे इंटिग्रेट करें, ताकि आप विज्ञापन रिस्पॉन्स आईडी को लॉग कर सकें. बाद में, अपने ऐप्लिकेशन के क्रैश होने की समस्या हल करने के लिए, विज्ञापन रिस्पॉन्स आईडी देखें. इसके बाद, AdMob में विज्ञापनों को खोजने और ब्लॉक करने के लिए, विज्ञापन समीक्षा केंद्र का इस्तेमाल करें.

पहला चरण: Firebase को किसी Android ऐप्लिकेशन से जोड़ना

  1. अगर आपको किसी साफ़ ऐप्लिकेशन से Firebase में लॉग इन करने की कोशिश करनी है, तो GitHub पर Android डेटा स्टोर करने की जगह के लिए, Google मोबाइल विज्ञापन SDK के उदाहरण डाउनलोड या क्लोन करें. यह गाइड खास तौर पर, बैनर के उदाहरण का इस्तेमाल करती है.

    अगर आपके पास पहले से कोई ऐप्लिकेशन है, तो आप अपने ऐप्लिकेशन के पैकेज नाम के साथ दूसरे चरणों पर जा सकते हैं. यही तरीका रिपॉज़िटरी के छोटे उदाहरणों में भी लागू किया जा सकता है.

  2. Firebase Crashlytics का इस्तेमाल करने के लिए, आपको एक Firebase प्रोजेक्ट बनाना होगा और उसमें अपना ऐप्लिकेशन जोड़ना होगा. अगर आपने अभी तक Firebase प्रोजेक्ट नहीं बनाया है, तो बनाएं. इसमें अपने ऐप्लिकेशन को रजिस्टर करना न भूलें.

    1. Firebase कंसोल के Crashlytics पेज पर, Crashlytics सेट अप करें पर क्लिक करें.

    2. स्क्रीन पर दिखने वाली स्क्रीन पर, नहीं > नया Firebase ऐप्लिकेशन सेट अप करें पर क्लिक करें.

  3. अपने build.gradle में, Google Analytics, फ़ैब्रिक, और Crashlytics के लिए डिपेंडेंसी जोड़ें.

    app/build.gradle

    apply plugin: 'com.android.application'
    apply plugin: 'com.google.gms.google-services'
    
    // Add the Fabric plugin
    apply plugin: 'io.fabric'
    
    dependencies {
        // ...
    
        // Add the Google Mobile Ads SDK
        implementation 'com.google.android.gms:play-services-ads:22.4.0'
    
        // Add the Firebase Crashlytics dependency.
        implementation 'com.google.firebase:firebase-crashlytics:18.4.1'
    }
    

    प्रोजेक्ट/build.gradle

    buildscript {
        repositories {
            // ...
            // Add Google's Maven repository.
            google()
        }
    
        dependencies {
            // ...
    
            classpath 'com.google.gms:google-services:4.3.15'
    
            // Add the Fabric Crashlytics plugin.
            classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.9'
        }
    }
    
    allprojects {
        // ...
        repositories {
           // Check that Google's Maven repository is included (if not, add it).
           google()
    
           // ...
        }
    }
    
  4. यह पक्का करने के लिए कि Crashlytics को सही तरीके से कॉन्फ़िगर किया गया है, अपना ऐप्लिकेशन बनाएं और चलाएं. सफल होने पर, Crashlytics डैशबोर्ड को ऐक्सेस किया जा सकेगा.

(ज़रूरी नहीं): अपने सेट अप की जांच करें

क्रैश बटन जोड़कर ऐप्लिकेशन बंद होने की समस्या को हर बटन दबाकर, उसे ज़बरदस्ती बंद किया जा सकता है.

यहां एक उदाहरण दिया गया है, जिसमें Activity के onCreate() तरीके में क्रैश बटन जोड़ने का तरीका बताया गया है:

मुख्य गतिविधि (इसमें शामिल है)

Java

protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_my);

  // Gets the ad view defined in layout/ad_fragment.xml with ad unit ID set in
  // values/strings.xml.
  adView = findViewById(R.id.ad_view);

  // Start loading the ad in the background.
  adView.loadAd(new AdRequest.Builder().build());

  // Add a crash button.
  Button crashButton = new Button(this);
  crashButton.setText("Crash!");
  crashButton.setOnClickListener(new View.OnClickListener() {
    public void onClick(View view) {
      throw new RuntimeException("Test Crash"); // Force a crash
    }
  });

  addContentView(crashButton, new ViewGroup.LayoutParams(
      ViewGroup.LayoutParams.MATCH_PARENT,
      ViewGroup.LayoutParams.WRAP_CONTENT));
}

Kotlin

override fun onCreate(savedInstanceState: Bundle?) {
  super.onCreate(savedInstanceState)
  setContentView(R.layout.activity_my)

  // Gets the ad view defined in layout/ad_fragment.xml with ad unit ID set in
  // values/strings.xml.
  adView = findViewById(R.id.ad_view)

  // Start loading the ad in the background.
  adView.loadAd(AdRequest.Builder().build())

  // Add a crash button.
  val crashButton = Button(this)
  crashButton.text = "Crash!"
  crashButton.setOnClickListener {
    throw RuntimeException("Test Crash") // Force a crash
  }

  addContentView(crashButton, ViewGroup.LayoutParams(
      ViewGroup.LayoutParams.MATCH_PARENT,
      ViewGroup.LayoutParams.WRAP_CONTENT))
}

Android Studio में, एम्युलेटर या कनेक्ट किए गए डिवाइस पर अपना ऐप्लिकेशन बनाएं और चलाएं. ऐप्लिकेशन लोड होने के बाद, क्रैश बटन पर क्लिक करें. क्रैश लॉग में Crashlyics पर अपलोड करने के लिए, ऐप्लिकेशन या डिवाइस से Android ऐप्लिकेशन को फिर से लॉन्च करें.

दूसरा चरण: विज्ञापन रिस्पॉन्स आईडी को लॉग करें

अगर कई विज्ञापन लोड करने के बाद उन्हें अलग-अलग समय पर दिखाया जाता है, तो विज्ञापन के हर रिस्पॉन्स आईडी को एक अलग कुंजी से लॉग करना अच्छा रहता है. उदाहरण के लिए, यह गाइड एक ऐसे उदाहरण का इस्तेमाल करती है जिसमें सिर्फ़ एक बैनर विज्ञापन होता है. इसलिए, हम नीचे दिए गए स्निपेट में विज्ञापन रिस्पॉन्स आईडी को banner_ad_response_id कुंजी के तौर पर लॉग करते हैं. सही तरीके से, अलग-अलग तरह के विज्ञापन और विज्ञापन इवेंट के लिए, Firebase Crashlytics में कई कस्टम कुंजी / वैल्यू पेयर बनाए जा सकते हैं. विज्ञापन की लाइफ़ साइकल के लिए, AdListener देखें. कस्टम लॉगिंग के बारे में ज़्यादा जानकारी के लिए, Firebase Crashlytics की क्रैश रिपोर्ट को पसंद के मुताबिक बनाएं पर जाएं.

अपने MyActivity.java में यह कोड जोड़ें. असल में, यह onAdLoaded() कॉलबैक फ़ंक्शन में FirebaseCrashlytics.setCustomKey() फ़ंक्शन का इस्तेमाल करता है, ताकि यह पक्का हो सके कि विज्ञापन getResponseInfo() को कॉल करने से पहले लोड हो गया है.

Java

protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_my);

  // Gets the ad view defined in layout/ad_fragment.xml with ad unit ID set in
  // values/strings.xml.
  adView = findViewById(R.id.ad_view);

  adView.setAdListener(new AdListener() {
    @Override
    public void onAdLoaded() {
      String adResponseId = adView.getResponseInfo().getResponseId();
      FirebaseCrashlytics.getInstance().setCustomKey(
          "banner_ad_response_id", adResponseId);
    }
  });

  // Start loading the ad in the background.
  adView.loadAd(new AdRequest.Builder().build());

  // Add a crash button.
  Button crashButton = new Button(this);
  crashButton.setText("Crash!");
  crashButton.setOnClickListener(new View.OnClickListener() {
    public void onClick(View view) {
      throw new RuntimeException("Test Crash"); // Force a crash
    }
  });

  addContentView(crashButton, new ViewGroup.LayoutParams(
      ViewGroup.LayoutParams.MATCH_PARENT,
      ViewGroup.LayoutParams.WRAP_CONTENT));
}

Kotlin

override fun onCreate(savedInstanceState: Bundle?) {
  super.onCreate(savedInstanceState)
  setContentView(R.layout.activity_my)

  // Gets the ad view defined in layout/ad_fragment.xml with ad unit ID set in
  // values/strings.xml.
  adView = findViewById(R.id.ad_view)

  adView.adListener = object : AdListener() {
    override fun onAdLoaded() {
      mAdView.responseInfo?.responseId?.let { adResponseId ->
          FirebaseCrashlytics.getInstance().setCustomKey(
              "banner_ad_response_id", adResponseId)
      }
    }
  }

  // Start loading the ad in the background.
  adView.loadAd(AdRequest.Builder().build())

  // Add a crash button.
  val crashButton = Button(this)
  crashButton.text = "Crash!"
  crashButton.setOnClickListener {
    throw RuntimeException("Test Crash") // Force a crash
  }

  addContentView(crashButton, ViewGroup.LayoutParams(
      ViewGroup.LayoutParams.MATCH_PARENT,
      ViewGroup.LayoutParams.WRAP_CONTENT))
}

बधाई हो! अब आपको अपने Crashlytics डैशबोर्ड पर क्रैश सेशन के मुख्य सेक्शन में, सबसे हाल का banner_ad_response_id दिखेगा. ध्यान दें कि कुछ कुंजियों को आपके डैशबोर्ड पर दिखाई देने में एक घंटे तक का समय लग सकता है.