Firebase Crashlytics הוא כלי קל משקל לדיווח על קריסות בזמן אמת, שמאפשר לכם לנהל בקלות בעיות שקשורות ליציבות האפליקציה. הכלי חוסך לכם זמן בפתרון בעיות, כי הוא מקבץ קריסות בצורה חכמה ומדגיש את הנסיבות שהובילו לקריסות.
במדריך הזה מוסבר איך לשלב את Crashlytics בפרויקט Android Studio כדי שתוכלו לרשום מזהים של תגובות לבקשות מודעות. בהמשך, כשמנסים לפתור בעיות שגורמות לקריסות באפליקציה, אפשר לחפש את המזהה של התגובה לבקשת המודעה ולהשתמש במרכז בקרת המודעות ב-Ad Manager כדי למצוא ולחסום את המודעות.
שלב 1: מוסיפים את Firebase לאפליקציה ל-Android
אם אתם רוצים לנסות להתחבר באמצעות Firebase מאפליקציה חדשה, אתם יכולים להוריד או לשכפל Google Mobile Ads SDK (Legacy)דוגמאות ל-Androidמאגר ב-GitHub. במדריך הזה נשתמש ספציפית בדוגמה של באנר.
אם כבר יש לכם אפליקציה, תוכלו להמשיך לשלבים אחרים עם שם החבילה של האפליקציה. אפשר להשתמש באותם שלבים גם בדוגמאות אחרות במאגר, עם שינויים קלים.
כדי להשתמש ב-Firebase Crashlytics, צריך ליצור פרויקט ב-Firebase ולהוסיף אליו את האפליקציה. אם עדיין לא עשיתם את זה, צרו פרויקט ב-Firebase. חשוב לרשום את האפליקציה.
בדף Crashlytics במסוף Firebase, לוחצים על הגדרה של Crashlytics.
במסך שמופיע, לוחצים על לא > הגדרת אפליקציית Firebase חדשה.

בקובץ 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() // ... } }מבצעים Build ומריצים את האפליקציה כדי לוודא ש-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() כדי לוודא שהמודעה נטענה לפני שמנסים לקרוא לפונקציה 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. שימו לב: יכול להיות שיעבור קצת זמן – מקסימום שעה – עד שמפתחות מסוימים יופיעו במרכז הבקרה.
