התאמה אישית של דוחות הקריסה ב-Firebase Crashlytics


בלוח הבקרה Crashlytics, אפשר ללחוץ על בעיה כדי לקבל דוח אירועים מפורט. אתם יכולים להתאים אישית את הדוחות האלה כדי לעזור לכם להבין טוב יותר מה קורה באפליקציה ואת הנסיבות של האירועים שדווחו ל-Crashlytics.

  • לקבל באופן אוטומטי יומני נתיב ניווט אם האפליקציה שלכם משתמשת ב-Firebase SDK ל-Google Analytics. היומנים האלה מאפשרים לכם לראות את הפעולות של המשתמשים שהובילו לאירוע שנאסף על ידי Crashlytics באפליקציה.

  • משביתים את הדיווח האוטומטי על קריסות ומפעילים דיווח על בסיס הסכמה למשתמשים. חשוב לזכור שכברירת מחדל, Crashlytics אוסף באופן אוטומטי דוחות קריסה מכל המשתמשים באפליקציה.

הוספת מפתחות בהתאמה אישית

מפתחות בהתאמה אישית עוזרים לכם לקבל את המצב הספציפי של האפליקציה לפני קריסה. אתם יכולים לשייך צמדי מפתח/ערך שרירותיים לדוחות הקריסה, ואז להשתמש במפתחות המותאמים אישית כדי לחפש ולסנן דוחות קריסה במסוף Firebase.

  • במרכז הבקרה Crashlytics אפשר לחפש בעיות שתואמות למפתח מותאם אישית.

  • כשבודקים בעיה ספציפית במסוף, אפשר לראות את המפתחות המותאמים אישית המשויכים לכל אירוע (כרטיסיית המשנה Keys) ואפילו לסנן את האירועים לפי מפתחות מותאמים אישית (תפריט Filter בחלק העליון של הדף).

משתמשים ב-method של המופע setCustomKey כדי להגדיר צמדי מפתח/ערך. חשוב לשים לב ש-setCustomKey עובר עומס יתר לפרמטר value כדי לקבל כל ארגומנט פרימיטיבי או String. הנה כמה דוגמאות:

Kotlin+KTX

val crashlytics = Firebase.crashlytics
crashlytics.setCustomKeys {
    key("my_string_key", "foo") // String value
    key("my_bool_key", true) // boolean value
    key("my_double_key", 1.0) // double value
    key("my_float_key", 1.0f) // float value
    key("my_int_key", 1) // int value
}

Java

FirebaseCrashlytics crashlytics = FirebaseCrashlytics.getInstance();

crashlytics.setCustomKey("my_string_key", "foo" /* string value */);

crashlytics.setCustomKey("my_bool_key", true /* boolean value */);

crashlytics.setCustomKey("my_double_key", 1.0 /* double value */);

crashlytics.setCustomKey("my_float_key", 1.0f /* float value */);

crashlytics.setCustomKey("my_int_key", 1 /* int value */);

אפשר גם לשנות את הערך של מפתח קיים על ידי קריאה למפתח והגדרת ערך אחר. לדוגמה:

Kotlin+KTX

val crashlytics = Firebase.crashlytics
crashlytics.setCustomKeys {
    key("current_level", 3)
    key("last_UI_action", "logged_in")
}

Java

FirebaseCrashlytics crashlytics = FirebaseCrashlytics.getInstance();

crashlytics.setCustomKey("current_level", 3);
crashlytics.setCustomKey("last_UI_action", "logged_in");

כדי להוסיף צמדי מפתח/ערך בכמות גדולה, מעבירים מופע של CustomKeysAndValues לשיטת המופע setCustomKeys:

Kotlin+KTX

ב-Kotlin, הפונקציונליות הקיימת פשוטה יותר משימוש ב-builder‏ CustomKeysAndValues.

crashlytics.setCustomKeys {
  key("str_key", "hello")
  key("bool_key", true)
  key("int_key", 1)
  key("long_key", 1L)
  key("float_key", 1.0f)
  key("double_key", 1.0)
}

Java

CustomKeysAndValues keysAndValues = new CustomKeysAndValues.Builder()
.putString("string key", "string value")
.putString("string key 2", "string  value 2")
.putBoolean("boolean key", True)
.putBoolean("boolean key 2", False)
.putFloat("float key", 1.01)
.putFloat("float key 2", 2.02)
.build();

FirebaseCrashlytics.getInstance().setCustomKeys(keysAndValues);

הוספת הודעות יומן בהתאמה אישית

כדי לקבל הקשר נוסף לגבי האירועים שהובילו לקריסה, אפשר להוסיף לאפליקציה יומני Crashlytics מותאמים אישית. Crashlytics משייך את היומנים לנתוני הקריסה ומציג אותם בדף Crashlytics במסוף Firebase, בכרטיסייה יומנים.

אפשר להשתמש ב-log כדי לזהות בעיות. לדוגמה:

Kotlin+KTX

Firebase.crashlytics.log("message")

Java

FirebaseCrashlytics.getInstance().log("message");

הגדרת מזהים של משתמשים

כדי לאבחן בעיה, לרוב כדאי לדעת אילו מהמשתמשים נתקלו בקריסה מסוימת. Crashlytics כולל דרך לזהות משתמשים באופן אנונימי בדוחות על קריסות.

כדי להוסיף מזהי משתמשים לדוחות, מקצים לכל משתמש מזהה ייחודי בצורת מספר מזהה, אסימון או ערך גיבוב:

Kotlin+KTX

Firebase.crashlytics.setUserId("user123456789")

Java

FirebaseCrashlytics.getInstance().setUserId("user123456789");

אם תצטרכו למחוק מזהה משתמש אחרי שתגדירו אותו, תוכלו לאפס את הערך למחרוזת ריקה. ניקוי של מזהה משתמש לא מסיר רשומות Crashlytics קיימות. אם אתם צריכים למחוק רשומות שמשויכות למזהה משתמש, פנו לתמיכה של Firebase.

(Android NDK בלבד) הוספת מטא-נתונים לדוחות קריסה של NDK

אפשר לכלול את הכותרת crashlytics.h בקוד C++‎ כדי להוסיף מטא-נתונים לדוחות קריסה של NDK, כמו מפתחות מותאמים אישית, יומנים מותאמים אישית ומזהי משתמשים. כל האפשרויות האלה מתוארות למעלה בדף הזה.

crashlytics.h זמין כספריית C++‏ (header-only) במאגר GitHub של Firebase Android SDK.

קוראים את ההערות בקובץ הכותרת כדי לקבל הוראות לשימוש בממשקי ה-API של NDK ל-C++‎.

הכללת דוחות GWP-ASan לניפוי באגים בבעיות של פגיעה בזיכרון

Crashlytics יכול לעזור לכם לנפות באגים בקריות שנגרמו על ידי שגיאות זיכרון נייטיב, על ידי איסוף דוחות GWP-ASan. שגיאות שקשורות לזיכרון יכולות להיות קשורות לזיהום זיכרון באפליקציה, שהיא הסיבה העיקרית לחולשות באבטחת האפליקציה.

  • אפשר לראות את הנתונים האלה בכרטיסייה החדשה 'מעקבים אחר סטאק של זיכרון', כשלוחצים על פרטי הבעיה במרכז הבקרה של Crashlytics.

  • אפשר גם להשתמש באות ובמסנן החדשים 'דוח GWP-ASan' כדי להציג במהירות את כל הבעיות בנתונים האלה.

כדי לקבל דוחות זיכרון של GWP-ASan, צריך להפעיל את GWP-ASan באופן מפורש באפליקציה ולהשתמש ב-SDK של Crashlytics עבור NDK מגרסה 18.3.6 ואילך (Firebase BoM מגרסה 31.3.0 ואילך). אפשר לבדוק את ההגדרה של GWP-ASan באמצעות קוד נייטיב לדוגמה במסמכי העזרה של Android.

דיווח על חריגות לא קטלניות

בנוסף לדיווח אוטומטי על קריסות באפליקציה, Crashlytics מאפשרת לתעד חריגות לא קטלניות ולשלוח אותן בפעם הבאה שהאפליקציה מופעלת.

משתמשים בשיטה recordException כדי לתעד חריגות לא קטלניות בבלוק catch של האפליקציה. לדוגמה:

Kotlin+KTX

try {
    methodThatThrows()
} catch (e: Exception) {
    Firebase.crashlytics.recordException(e)
    // handle your exception here
}

Java

try {
    methodThatThrows();
} catch (Exception e) {
    FirebaseCrashlytics.getInstance().recordException(e);
    // handle your exception here
}

כל החריגות שתועדו מופיעות כבעיות לא קטלניות במסוף Firebase. סיכום הבעיה מכיל את כל פרטי המצב שאתם מקבלים בדרך כלל מקריסות, יחד עם פירוט לפי גרסת Android ומכשיר חומרה.

כדי למזער את ההשפעה על הביצועים של האפליקציה, Crashlytics מעבדת חריגות בשרשור ייעודי ברקע. כדי לצמצם את תעבורת הנתונים של המשתמשים ברשת, Crashlytics אוספת יחד חריגות שתועדו ביומן ושולחת אותן בפעם הבאה שהאפליקציה מופעלת.

אחזור יומני נתיבי ניווט

יומני נתיב הניווט עוזרים לכם להבין טוב יותר את האינטראקציות של משתמש עם האפליקציה שלכם עד לתאונה, לאירוע לא קטלני או לאירוע ANR. היומנים האלה יכולים להיות מועילים כשמנסים לשחזר בעיה ולנפות באגים בה.

יומני הלחם מופעל על ידי Google Analytics, ולכן כדי לקבל יומני לחם צריך להפעיל את Google Analytics בפרויקט Firebase ולהוסיף את ה-Firebase SDK ל-Google Analytics לאפליקציה. אחרי שתבצעו את הדרישות האלה, יומני הלחם ייכללו באופן אוטומטי בנתונים של אירוע בכרטיסייה יומנים כשמציגים את פרטי הבעיה.

ערכת ה-SDK של Analytics רושמת באופן אוטומטי את האירוע screen_view, וכך מאפשרת ליומנים של נתיב הניווט להציג רשימה של המסכים שנצפו לפני האירוע של קריסה, אירוע לא קטלני או אירוע ANR. יומן של נתיב breadcrumbs מסוג screen_view מכיל פרמטר firebase_screen_class.

יומני נתיב הניווט מאוכלסים גם באירועים מותאמים אישית שרשמתם באופן ידני במהלך הסשן של המשתמש, כולל נתוני הפרמטרים של האירוע. הנתונים האלה יכולים לעזור להציג סדרה של פעולות משתמש שהובילו לתאונה, לאירוע ANR או לאירוע לא קטלני.

לתשומת ליבכם: אתם יכולים לשלוט באיסוף ובשימוש בנתוני Google Analytics, כולל הנתונים שמאכלסים את יומני הלחם.

הפעלת דיווח על הסכמה

כברירת מחדל, Crashlytics אוסף באופן אוטומטי דוחות קריסה של כל המשתמשים באפליקציה. כדי לתת למשתמשים שליטה רבה יותר על הנתונים שהם שולחים, אפשר להפעיל דיווח על הסכמה מדעת על ידי השבתת הדיווח האוטומטי ושליחת נתונים אל Crashlytics רק כשבוחרים בכך בקוד:

  1. בבלוק application בקובץ AndroidManifest.xml, מוסיפים תג meta-data כדי להשבית את האיסוף האוטומטי:

    <meta-data
        android:name="firebase_crashlytics_collection_enabled"
        android:value="false" />
    
  2. כדי להפעיל את האיסוף למשתמשים נבחרים, צריך להפעיל את ההחרגה של איסוף הנתונים Crashlytics בזמן הריצה. ערך ההחרגה נשמר בכל ההפעלות של האפליקציה, כדי ש-Crashlytics יוכל לאסוף דוחות באופן אוטומטי. כדי לבטל את ההסכמה לדיווח אוטומטי על תאונות, מעבירים את הערך false כערך לשינוי ברירת המחדל. כשהערך מוגדר ל-false, הערך החדש לא יחול עד להפעלה הבאה של האפליקציה.

    Kotlin+KTX

    Firebase.crashlytics.setCrashlyticsCollectionEnabled(true)

    Java

    FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(true);

ניהול הנתונים של תובנות לגבי קריסות

התכונה 'תובנות לגבי קריסות' עוזרת לכם לפתור בעיות על ידי השוואה של עקבות ה-stack האנונימיים שלכם לעקבות מאפליקציות אחרות ב-Firebase, ומציינת אם הבעיה היא חלק ממגמה רחבה יותר. לגבי בעיות רבות, התכונה 'תובנות לגבי קריסות' מספקת גם מקורות מידע שיעזרו לכם לנפות את הבאגים שגרמו לקריסה.

התכונה 'תובנות לגבי קריסות' משתמשת בנתוני קריסות שנצברו כדי לזהות מגמות נפוצות של יציבות. אם אתם מעדיפים לא לשתף את נתוני האפליקציה, תוכלו לבטל את ההסכמה לשימוש בתכונה 'תובנות לגבי קריסות' בתפריט תובנות לגבי קריסות בחלק העליון של רשימת הבעיות Crashlytics במסוף Firebase.