تسجيل رقم تعريف استجابة الإعلان باستخدام Firebase Crashlytics

Firebase Crashlytics هي جهة سهلة للإبلاغ عن الأعطال في الوقت الفعلي، وتسهّل عليك إدارة المشاكل المتعلّقة بالثبات في تطبيقك، ما يوفّر لك الوقت لتحديد المشاكل وحلّها من خلال تجميع الأعطال بذكاء وتمييز الظروف التي قد تؤدي إليها.

يوضّح هذا الدليل كيفية دمج Crashlytics في مشروع "استوديو Android" لكي تتمكّن من تسجيل أرقام تعريف استجابة الإعلانات. في وقت لاحق، عند تحديد مشاكل الأعطال وحلّها في تطبيقك، يمكنك البحث عن رقم تعريف استجابة الإعلان واستخدام "مركز مراجعة الإعلانات" في مدير إعلانات Google للعثور على الإعلانات وحظرها.

الخطوة 1: إضافة Firebase إلى تطبيق Android

  1. إذا كنت تريد محاولة التسجيل باستخدام Firebase من تطبيق نظيف، يمكنك تنزيل أمثلة حزمة SDK لإعلانات Google على الأجهزة الجوّالة أو نسخها من مستودع Android على GitHub. ويستخدم هذا الدليل تحديدًا مثال على إعلانات البانر

    إذا كان لديك تطبيق، من المفترض أن تتمكّن من المتابعة إلى خطوات أخرى باستخدام اسم حزمة التطبيق. يمكن أيضًا تطبيق الخطوات نفسها على أمثلة أخرى في المستودع لإجراء تعديلات بسيطة.

  2. لاستخدام Firebase Crashlytics، عليك إنشاء مشروع على Firebase وإضافة تطبيقك إليه. أنشئ مشروع Firebase إذا لم يسبق لك إنشاء ذلك. واحرص على تسجيل تطبيقك فيه.

    1. في صفحة Crashlytics في وحدة تحكّم Firebase، انقر على إعداد Crashlytics.

    2. في الشاشة التي تظهر، انقر على لا > إعداد تطبيق Firebase جديد.

  3. في Build.gradle، أضِف الاعتماديات على "إحصاءات Google" وFbric و 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'
    }
    

    project/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.

(اختياري): اختبار الإعداد

من خلال إضافة زر التعطّل، يمكنك فرض تعطُّل يؤدي إلى تعطُّل التطبيق مع كل ضغطة على زر.

إليك مثال يوضّح كيفية إضافة زر تعطّل بالطريقة onCreate() من Activity:

النشاط الرئيسي (مقتطف)

لغة 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"، يمكنك إنشاء تطبيقك وتشغيله على محاكي أو جهاز متصل. بعد تحميل التطبيق، يمكنك النقر على الزر أعطال. أعِد تشغيل التطبيق من الجهاز أو "استوديو Android" حتى يتم تحميل سجلّ الأعطال إلى Crashlyics.

الخطوة الثانية: تسجيل رقم تعريف استجابة الإعلان

في حال تحميل إعلانات متعددة وعرضها في أوقات مختلفة، من الأفضل تسجيل كل رقم تعريف استجابة إعلان مع مفتاح منفصل. على سبيل المثال، يستخدم هذا الدليل مثالاً يحتوي على إعلان بانر واحد فقط. وبالتالي، نحن نسجّل رقم تعريف استجابة الإعلان كمفتاح banner_ad_response_id في المقتطف التالي. في الواقع، يمكنك إنشاء أزواج مفاتيح / قيمة مخصّصة متعددة في Firebase Crashlytics لأنواع إعلانات مختلفة وأحداث إعلانات (اطّلِع على AdListener لدورة حياة الإعلان). انتقِل إلى تخصيص تقارير أعطال Firebase Crashlytics للحصول على مزيد من المعلومات حول التسجيل المخصص.

أضِف الرمز التالي إلى MyActivity.java. وبشكل أساسي، تستخدم دالة FirebaseCrashlytics.setCustomKey() في دالة onAdLoaded() لمعاودة الاتصال لضمان تحميل الإعلان قبل محاولة طلب 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))
}

تهانينا! سيظهر لك الآن أحدث banner_ad_response_id في القسم الرئيسي لجلسات الأعطال في لوحة بيانات Crashlytics. يُرجى العِلم أنّ بعض المفاتيح قد تستغرق ما يصل إلى ساعة حتى تصبح مرئية في لوحة البيانات.