Firebase Crashlytics هي أداة خفيفة الوزن لإعداد تقارير الأعطال في الوقت الفعلي تسهّل عليك إدارة مشاكل الثبات في تطبيقك. وتوفّر لك Crashlytics الوقت الذي تستغرِقه في تحديد المشاكل وحلّها من خلال تجميع الأعطال بذكاء وإبراز الظروف التي أدّت إلى حدوثها.
يوضّح هذا الدليل كيفية دمج Crashlytics في مشروعك على "استوديو Android" حتى تتمكّن من تسجيل أرقام تعريف استجابة الإعلانات. لاحقًا، عند تحديد وحلّ المشاكل المتعلّقة بالانهيارات في تطبيقك، يمكنك البحث عن رقم تعريف استجابة الإعلان واستخدام "مركز مراجعة الإعلانات" في مدير إعلانات Google للعثور على الإعلانات وحظرها.
الخطوة 1: إضافة Firebase إلى تطبيق Android
إذا أردت تجربة تسجيل الدخول باستخدام Firebase من تطبيق جديد، يمكنك تنزيل أمثلة حزمة تطوير البرامج (SDK) لإعلانات Google على الأجهزة الجوّالة لنظام Android أو استنساخها من مستودع GitHub. يستخدم هذا الدليل على وجه التحديد مثال على إعلان البانر
إذا كان لديك تطبيق، من المفترض أن تتمكّن من المتابعة إلى الخطوات الأخرى باستخدام اسم حزمة تطبيقك. يمكن أيضًا تطبيق الخطوات نفسها على مثالين آخرين في المستودع مع إجراء تعديلات بسيطة.
لاستخدام Firebase Crashlytics، عليك إنشاء مشروع على Firebase و إضافة تطبيقك إليه. أنشئ مشروعًا على Firebase، إذا لم يسبق لك ذلك. احرص على تسجيل تطبيقك في هذا البرنامج.
في صفحة Crashlytics ضمن وحدة تحكّم Firebase، انقر على إعداد Crashlytics.
في الشاشة التي تظهر، انقر على لا > إعداد تطبيق Firebase جديد.
في ملف build.gradle، أضِف التبعيات لخدمة "إحصاءات Google" و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 the Google Mobile Ads SDK implementation 'com.google.android.gms:play-services-ads:23.5.0' // Add the Firebase Crashlytics dependency. implementation 'com.google.firebase:firebase-crashlytics:19.2.1' }
project/build.gradle
buildscript { repositories { // ... // Add Google's Maven repository. google() } dependencies { // ... classpath 'com.google.gms:google-services:4.4.2' // Add the Fabric Crashlytics plugin. classpath 'com.google.firebase:firebase-crashlytics-gradle:3.0.2' } } allprojects { // ... repositories { // Check that Google's Maven repository is included (if not, add it). google() // ... } }
أنشئ تطبيقك وشغِّله للتأكّد من ضبط إعدادات 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، أنشئ تطبيقك وشغِّله على جهاز محاكاة أو جهاز متصل. بعد تحميل التطبيق، يمكنك النقر على الزر تعطُّل. أعِد تشغيل التطبيق من الجهاز أو من Android Studio لتحميل سجلّ الأعطال إلى Crashlytics.
الخطوة 2: تسجيل رقم تعريف استجابة الإعلان
إذا حمّلت إعلانات متعددة وعرضتها في أوقات مختلفة، من الأفضل تسجيل كل رقم تعريف استجابة إعلان باستخدام مفتاح منفصل. على سبيل المثال، يستخدم هذا الدليل
مثالاً يتضمّن إعلان بانر واحدًا فقط. وبالتالي، نُسجّل رقم تعريف استجابة الإعلان كمفتاح
banner_ad_response_id
في المقتطف التالي. يمكنك إنشاء عدة أزواج مخصّصة من المفاتيح / القيم في Firebase Crashlytics لأنواع الإعلانات المختلفة
وأحداث الإعلانات (اطّلِع على AdListener
للاطّلاع على مراحل حياة الإعلان). انتقِل إلى مقالة تخصيص تقارير تعطُّل Firebase Crashlytics
للحصول على مزيد من المعلومات عن التسجيل المخصّص.
أضِف الرمز التالي إلى MyActivity.java
. في الأساس، تستخدِم الدالة
FirebaseCrashlytics.setCustomKey()
في الدالة onAdLoaded()
لردّ الاتصال لضمان loadingتحميل الإعلان قبل محاولة الاتصال 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. يُرجى العِلم أنّه قد يستغرق ظهور بعض المفاتيح في لوحة البيانات مدة تصل إلى ساعة.