Join us in person and online for Firebase Summit on October 18, 2022. Learn how Firebase can help you accelerate app development, release your app with confidence, and scale with ease. Register now

התאם אישית את דוחות הקריסה של Firebase Crashlytics

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

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

הוסף מפתחות מותאמים אישית

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

  • בלוח המחוונים של Crashlytics , תוכל לחפש בעיות התואמות למפתח מותאם אישית.

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

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

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("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("current_level", 3);
crashlytics.setCustomKey("last_UI_action", "logged_in");

Kotlin+KTX

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

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

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);

Kotlin+KTX

עבור Kotlin, הפונקציונליות הקיימת פשוטה יותר משימוש בבונה 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)
}

הוסף הודעות יומן מותאמות אישית

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

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

Java

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

Kotlin+KTX

Firebase.crashlytics.log("message")

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

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

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

Java

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

Kotlin+KTX

Firebase.crashlytics.setUserId("user123456789")

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

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

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

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

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

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

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

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

Java

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

Kotlin+KTX

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

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

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

אפשר דיווח על הסכמה

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

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

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

    Java

    FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(true);

    Kotlin+KTX

    Firebase.crashlytics.setCrashlyticsCollectionEnabled(true)

נהל נתוני Crash Insights

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

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

,

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

הוסף מפתחות מותאמים אישית

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

  • בלוח המחוונים של Crashlytics , תוכל לחפש בעיות התואמות למפתח מותאם אישית.

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

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

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("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("current_level", 3);
crashlytics.setCustomKey("last_UI_action", "logged_in");

Kotlin+KTX

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

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

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);

Kotlin+KTX

עבור Kotlin, הפונקציונליות הקיימת פשוטה יותר משימוש בבונה 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)
}

Add custom log messages

To give yourself more context for the events leading up to a crash, you can add custom Crashlytics logs to your app. Crashlytics associates the logs with your crash data and displays them in the Crashlytics page of the Firebase console , under the Logs tab.

Use log to help pinpoint issues. לדוגמה:

Java

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

Kotlin+KTX

Firebase.crashlytics.log("message")

Set user identifiers

To diagnose an issue, it's often helpful to know which of your users experienced a given crash. Crashlytics includes a way to anonymously identify users in your crash reports.

To add user IDs to your reports, assign each user a unique identifier in the form of an ID number, token, or hashed value:

Java

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

Kotlin+KTX

Firebase.crashlytics.setUserId("user123456789")

If you ever need to clear a user identifier after you set it, reset the value to a blank string. Clearing a user identifier does not remove existing Crashlytics records. If you need to delete records associated with a user ID, contact Firebase support .

(Android NDK only) Add metadata to NDK crash reports

You can optionally include the crashlytics.h header in your C++ code to add metadata to NDK crash reports, such as custom keys , custom logs , user identifiers . All these options are described on this page above.

crashlytics.h is available as a header-only C++ library in the Firebase Android SDK GitHub Repository .

Read the comments in the header file for instructions on using the NDK C++ APIs.

Report non-fatal exceptions

In addition to automatically reporting your app's crashes, Crashlytics lets you record non-fatal exceptions and sends them to you the next time your app launches.

Use the recordException method to record non-fatal exceptions in your app's catch blocks. לדוגמה:

Java

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

Kotlin+KTX

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

All recorded exceptions appear as non-fatal issues in the Firebase console. The issue summary contains all the state information you normally get from crashes, along with breakdowns by Android version and hardware device.

Crashlytics processes exceptions on a dedicated background thread to minimize the performance impact to your app. To reduce your users' network traffic, Crashlytics batches logged exceptions together and sends them the next time the app launches.

Enable opt-in reporting

By default, Crashlytics automatically collects crash reports for all your app's users. To give users more control over the data they send, you can enable opt-in reporting by disabling automatic reporting and only sending data to Crashlytics when you choose to in your code:

  1. In the application block of your AndroidManifest.xml file, add a meta-data tag to turn off automatic collection:

    <meta-data
        android:name="firebase_crashlytics_collection_enabled"
        android:value="false" />
    
  2. Enable collection for select users by calling the Crashlytics data collection override at runtime. The override value persists across launches of your app so Crashlytics can automatically collect reports. To opt out of automatic crash reporting, pass false as the override value. When set to false , the new value does not apply until the next run of the app.

    Java

    FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(true);

    Kotlin+KTX

    Firebase.crashlytics.setCrashlyticsCollectionEnabled(true)

Manage Crash Insights data

Crash Insights helps you resolve issues by comparing your anonymized stack traces to traces from other Firebase apps and letting you know if your issue is part of a larger trend. For many issues, Crash Insights even provides resources to help you debug the crash.

Crash Insights uses aggregated crash data to identify common stability trends. If you'd prefer not to share your app's data, you can opt-out of Crash Insights from the Crash Insights menu at the top of your Crashlytics issue list in the Firebase console .