Crashlytics-এ বিজ্ঞাপন রেসপন্স আইডি লগ করা

প্ল্যাটফর্ম বেছে নিন: iOS Unity Android (Legacy)

Firebase Crashlytics হল একটি হালকা ওজনের, রিয়েল-টাইম ক্র্যাশ রিপোর্টার যা আপনার অ্যাপে স্থিতিশীলতা সংক্রান্ত সমস্যা ম্যানেজ করা সহজ করে তোলে। Crashlytics, ক্র্যাশগুলিকে বুদ্ধিমত্তার সাথে গ্রুপ করে এবং যে পরিস্থিতিগুলির কারণে সেগুলি ঘটে, সেগুলি হাইলাইট করে আপনাকে সমস্যা সমাধানের সময় বাঁচায়।

এই গাইড থেকে আপনি জানতে পারবেন কীভাবে আপনার Android Studio প্রোজেক্টে Crashlytics ইন্টিগ্রেট করবেন যাতে আপনি বিজ্ঞাপন সংক্রান্ত উত্তরের আইডি লগ করতে পারেন। পরে, আপনার অ্যাপে ক্র্যাশ সংক্রান্ত সমস্যা সমাধান করার সময়, আপনি বিজ্ঞাপন রেসপন্স আইডি দেখতে এবং বিজ্ঞাপন খুঁজে ব্লক করার জন্য Ad Manager-এ বিজ্ঞাপন পর্যালোচনা কেন্দ্র ব্যবহার করতে পারবেন।

ধাপ ১: Android অ্যাপ্লিকেশনে Firebase যোগ করা

  1. আপনি যদি একটি ক্লিন অ্যাপ থেকে Firebase-এর মাধ্যমে লগ-ইন করার চেষ্টা করতে চান, তাহলে আপনি GitHub-এ Google Mobile Ads SDK (Legacy) Android-এর জন্য উদাহরণ রিপোজিটরি ডাউনলোড বা ক্লোন করতে পারেন। এই গাইডটি বিশেষভাবে ব্যানার সংক্রান্ত উদাহরণ ব্যবহার করে।

    আপনার যদি আগে থেকেই কোনও অ্যাপ থাকে, তাহলে আপনার অ্যাপের প্যাকেজ নাম দিয়ে অন্যান্য ধাপগুলি সম্পূর্ণ করতে পারবেন। একই ধাপগুলি সামান্য পরিবর্তন করে রিপোজিটরির অন্যান্য উদাহরণেও প্রয়োগ করা যেতে পারে।

  2. Firebase Crashlytics ব্যবহার করতে হলে, আপনাকে অবশ্যই একটি Firebase প্রোজেক্ট তৈরি করতে হবে এবং সেটিতে আপনার অ্যাপ যোগ করতে হবে। আপনি আগেই Firebase প্রোজেক্ট তৈরি করে না থাকলে, এখন সেটি তৈরি করে নিন। এতে আপনার অ্যাপ রেজিস্টার করতে ভুলবেন না।

    1. Firebase কনসোলের Crashlytics পৃষ্ঠায়, Crashlytics সেট-আপ করুন বিকল্পে ক্লিক করুন।

    2. যে স্ক্রিনটি দেখা যাবে, তাতে না > নতুন Firebase অ্যাপ সেট-আপ করুন বিকল্পে ক্লিক করুন।

  3. আপনার build.gradle-এ, Google Analytics, Fabric এবং 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 Google Mobile Ads SDK (Legacy)
        implementation 'com.google.android.gms:play-services-ads:25.5.0'
    
        // Add the Firebase Crashlytics dependency.
        implementation 'com.google.firebase:firebase-crashlytics:21.0.0'
    }

    project/build.gradle

    buildscript {
        repositories {
            // ...
            // Add Google's Maven repository.
            google()
        }
    
        dependencies {
            // ...
    
            classpath 'com.google.gms:google-services:4.5.0'
    
            // Add the Fabric Crashlytics plugin.
            classpath 'com.google.firebase:firebase-crashlytics-gradle:3.0.8'
        }
    }
    
    allprojects {
        // ...
        repositories {
           // Check that Google's Maven repository is included (if not, add it).
           google()
    
           // ...
        }
    }
  4. Crashlytics সঠিকভাবে কনফিগার করা হয়েছে কিনা তা নিশ্চিত করতে আপনার অ্যাপ বিল্ড ও রান করুন। সফল হলে, আপনি Crashlytics ড্যাশবোর্ড অ্যাক্সেস করতে পারবেন।

(ঐচ্ছিক): আপনার সেট-আপ পরীক্ষা করুন

ক্র্যাশ করার বোতাম যোগ করে আপনি প্রতিটি বোতাম প্রেস করার মাধ্যমে অ্যাপ ক্র্যাশ করার জন্য ক্র্যাশ করতে বাধ্য করতে পারেন।

onCreate() পদ্ধতির মধ্যে কীভাবে ক্র্যাশ বোতাম যোগ করতে হয় তা এই উদাহরণে দেখানো হয়েছে Activity:

MainActivity (উদ্ধৃতি)

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 AdManagerAdRequest.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(AdManagerAdRequest.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-তে, এমুলেটর বা কানেক্ট করা ডিভাইসে আপনার অ্যাপ বিল্ড ও রান করুন। অ্যাপ লোড হয়ে গেলে, আপনি ক্র্যাশ বোতামে ক্লিক করতে পারবেন। ক্র্যাশ লগ Crashlytics-এ আপলোড করার জন্য ডিভাইস বা Android Studio থেকে অ্যাপটি আবার চালু করুন।

ধাপ ২: বিজ্ঞাপনের উত্তরের আইডি লগ করুন

আপনি একাধিক বিজ্ঞাপন লোড করে সেগুলি আলাদা আলাদা সময়ে দেখালে, প্রতিটি বিজ্ঞাপনের রেসপন্স আইডি আলাদা আলাদা কী দিয়ে লগ করে রাখলে ভাল হয়। যেমন, এই গাইডে এমন একটি উদাহরণ ব্যবহার করা হয়েছে যেখানে শুধুমাত্র একটি ব্যানার বিজ্ঞাপন রয়েছে। তাই, আমরা নিম্নলিখিত স্নিপেটে বিজ্ঞাপন উত্তরের আইডিকে 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 AdManagerAdRequest.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(AdManagerAdRequest.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 দেখতে পাবেন। মনে রাখবেন যে কিছু কী আপনার ড্যাশবোর্ডে দেখা যেতে এক ঘণ্টা পর্যন্ত সময় লাগতে পারে।