התאמה אישית של דוחות קריסה ל-Android

בחירת פלטפורמה: iOS+‎ Android Flutter Unity


אפשר ללחוץ על בעיה כדי לקבל דוח מפורט על האירוע בלוח הבקרה Crashlytics של DevOps & Engagement במסוף Firebase. אפשר להתאים אישית את הדוחות האלה כדי להבין טוב יותר מה קורה באפליקציה ואת הנסיבות שקשורות לאירועים שמדווחים ל-Crashlytics.

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

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

  • אפשר לחפש בעיות שתואמות למפתח מותאם אישית.

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

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

Kotlin

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

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

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

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 משייך את היומנים לנתוני הקריסה ומציג אותם בכרטיסייה יומנים כשמציגים את פרטי הבעיה (אפשר לראות את כל הבעיות בלוח הבקרה DevOps & Engagement > Crashlytics במסוף Firebase).

מומלץ להשתמש בlog כדי לזהות בעיות. לדוגמה:

Kotlin

Firebase.crashlytics.log("message")

Java

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

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

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

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

Kotlin

Firebase.crashlytics.setUserId("user123456789")

Java

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

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

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

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

crashlytics.h זמין כספריית C++‎ שכוללת רק קובצי כותרת במאגר Firebase Android SDK GitHub.

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

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

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

במרכז הבקרה DevOps & Engagement > Crashlytics במסוף Firebase, אפשר לבצע את הפעולות הבאות עם הנתונים האלה:

  • אפשר לראות את הנתונים האלה בכרטיסייה החדשה 'Memory stack traces' (מעקב לאחור של הזיכרון) כשלוחצים על פרטי הבעיה.

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

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

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

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

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

Kotlin

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
}

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

Kotlin

try {
    methodThatThrows()
} catch (e: Exception) {
    Firebase.crashlytics.recordException(e) {
        key("string key", "string value")
        key("boolean key", true)
        key("float key", Float.MAX_VALUE)
    }
    // handle your exception here
}

Java

try {
    methodThatThrows();
} catch (Exception e) {
    CustomKeysAndValues keysAndValues = new CustomKeysAndValues.Builder()
            .putString("string key", "string value")
            .putBoolean("boolean key", true)
            .putFloat("float key", Float.MAX_VALUE)
            .build();
    FirebaseCrashlytics.getInstance().recordException(e, keysAndValues);
    // handle your exception here
}

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

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

אחזור יומנים של נתיבי ניווט

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

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

Analytics SDK מתעד באופן אוטומטי את screen_viewהאירוע שמאפשר ליומני ה-breadcrumb להציג רשימה של מסכים שנצפו לפני הקריסה, האירוע הלא קטלני או האירוע מסוג ANR. יומן ה-breadcrumb של 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 data collection override בזמן הריצה. ערך ההחלפה נשמר בכל ההפעלות הבאות של האפליקציה, כך ש-Crashlytics יכול לאסוף באופן אוטומטי דוחות עבור המשתמש הזה.

    Kotlin

    Firebase.crashlytics.setCrashlyticsCollectionEnabled(true)

    Java

    FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(true);

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

ניהול נתונים ב-Crash Insights

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

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

השלבים הבאים