בלוח הבקרה Crashlytics, אפשר ללחוץ על בעיה כדי לקבל דוח אירועים מפורט. אתם יכולים להתאים אישית את הדוחות האלה כדי לעזור לכם להבין טוב יותר מה קורה באפליקציה ואת הנסיבות של האירועים שדווחו ל-Crashlytics.
מדווחים על חריגים שלא זוהו ועל חריגים שזוהו ב-Crashlytics.
מוסיפים לאפליקציה כלים לתיעוד ביומן של מפתחות בהתאמה אישית, הודעות יומן בהתאמה אישית ומזהי משתמשים.
לקבל באופן אוטומטי יומני נתיב ניווט אם האפליקציה שלכם משתמשת ב-Firebase SDK ל-Google Analytics. היומנים האלה מאפשרים לכם לראות את הפעולות של המשתמשים שהובילו לאירוע שנאסף על ידי Crashlytics באפליקציה.
משביתים את הדיווח האוטומטי על קריסות ומפעילים דיווח על בסיס הסכמה למשתמשים. חשוב לדעת שכברירת מחדל, Crashlytics אוסף באופן אוטומטי דוחות קריסה ייעודיים לפלטפורמה לכל המשתמשים באפליקציה.
דיווח על חריגים שלא זוהו
כדי לתפוס באופן אוטומטי את כל השגיאות 'הקטלניות' שמופקות בתוך מסגרת Flutter, אפשר לשנות את FlutterError.onError
ל-FirebaseCrashlytics.instance.recordFlutterFatalError
. לחלופין, כדי לתפוס גם חריגות "לא קטלניות", משנים את FlutterError.onError
ל-FirebaseCrashlytics.instance.recordFlutterError
:
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
bool weWantFatalErrorRecording = true;
FlutterError.onError = (errorDetails) {
if(weWantFatalErrorRecording){
FirebaseCrashlytics.instance.recordFlutterFatalError(errorDetails);
} else {
FirebaseCrashlytics.instance.recordFlutterError(errorDetails);
}
};
runApp(MyApp());
}
שגיאות אסינכרוניות
מסגרת Flutter לא תזהה שגיאות אסינכרוניות:
ElevatedButton(
onPressed: () async {
throw Error();
}
...
)
כדי לזהות שגיאות כאלה, אפשר להשתמש במטפל PlatformDispatcher.instance.onError
:
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
FlutterError.onError = (errorDetails) {
FirebaseCrashlytics.instance.recordFlutterFatalError(errorDetails);
};
// Pass all uncaught asynchronous errors that aren't handled by the Flutter framework to Crashlytics
PlatformDispatcher.instance.onError = (error, stack) {
FirebaseCrashlytics.instance.recordError(error, stack, fatal: true);
return true;
};
runApp(MyApp());
}
שגיאות מחוץ ל-Flutter
כדי לזהות שגיאות שמתרחשות מחוץ להקשר של Flutter, צריך להתקין מאזין שגיאות ב-Isolate
הנוכחי:
Isolate.current.addErrorListener(RawReceivePort((pair) async {
final List<dynamic> errorAndStacktrace = pair;
await FirebaseCrashlytics.instance.recordError(
errorAndStacktrace.first,
errorAndStacktrace.last,
fatal: true,
);
}).sendPort);
דיווח על חריגות שזוהו
בנוסף לדיווח אוטומטי על קריסות של האפליקציה, Crashlytics מאפשרת לתעד חריגות לא קטלניות ולשלוח אותן בפעם הבאה שמדווח על אירוע קטלני או כשהאפליקציה מופעלת מחדש.
משתמשים בשיטה recordError
כדי לתעד חריגות לא קטלניות בקטעי ה-catch של האפליקציה. לדוגמה:
await FirebaseCrashlytics.instance.recordError(
error,
stackTrace,
reason: 'a non-fatal error'
);
// Or you can use:
await FirebaseCrashlytics.instance.recordFlutterError(errorDetails);
מומלץ גם לתעד מידע נוסף על השגיאה באמצעות המאפיין information
:
await FirebaseCrashlytics.instance.recordError(
error,
stackTrace,
reason: 'a non-fatal error',
information: ['further diagnostic information about the error', 'version 2.0'],
);
החריגים האלה מופיעים כבעיות לא קריטיות במסוף Firebase. סיכום הבעיה מכיל את כל פרטי המצב שאתם מקבלים בדרך כלל מקריות קריסה, יחד עם פירוט לפי גרסה ומכשיר חומרה.
כדי לצמצם את ההשפעה על הביצועים של האפליקציה, Crashlytics מעבדת חריגות בשרשור רקע ייעודי. כדי לצמצם את תעבורת הנתונים ברשת של המשתמשים, אם יש צורך, Crashlytics מגבילה את קצב שליחת הדוחות מהמכשיר.
הוספת מפתחות בהתאמה אישית
מפתחות בהתאמה אישית עוזרים לכם לקבל את המצב הספציפי של האפליקציה לפני קריסת האפליקציה. אתם יכולים לשייך צמדי מפתח/ערך שרירותיים לדוחות הקריסה, ואז להשתמש במפתחות המותאמים אישית כדי לחפש ולסנן דוחות קריסה במסוף Firebase.
בלוח הבקרה Crashlytics אפשר לחפש בעיות שתואמות למפתח מותאם אישית.
כשבודקים בעיה ספציפית במסוף, אפשר לראות את המפתחות המותאמים אישית המשויכים לכל אירוע (כרטיסיית המשנה Keys) ואפילו לסנן את האירועים לפי מפתחות מותאמים אישית (תפריט Filter בחלק העליון של הדף).
משתמשים בשיטת המופע setCustomKey
כדי להגדיר צמדי מפתח/ערך. ריכזנו כאן כמה דוגמאות:
// Set a key to a string.
FirebaseCrashlytics.instance.setCustomKey('str_key', 'hello');
// Set a key to a boolean.
FirebaseCrashlytics.instance.setCustomKey("bool_key", true);
// Set a key to an int.
FirebaseCrashlytics.instance.setCustomKey("int_key", 1);
// Set a key to a long.
FirebaseCrashlytics.instance.setCustomKey("int_key", 1L);
// Set a key to a float.
FirebaseCrashlytics.instance.setCustomKey("float_key", 1.0f);
// Set a key to a double.
FirebaseCrashlytics.instance.setCustomKey("double_key", 1.0);
הוספת הודעות יומן בהתאמה אישית
כדי לקבל הקשר נוסף לגבי האירועים שהובילו לקריסה, אפשר להוסיף לאפליקציה יומני Crashlytics מותאמים אישית. Crashlytics משייך את היומנים לנתוני הקריסה ומציג אותם במסוף Firebase, בכרטיסייה Crashlytics יומנים.
השתמשו ב-log
כדי לזהות בעיות. לדוגמה:
FirebaseCrashlytics.instance.log("Higgs-Boson detected! Bailing out");
הגדרת מזהים של משתמשים
כדי לאבחן בעיה, לרוב כדאי לדעת אילו מהמשתמשים נתקלו בקריסה מסוימת. Crashlytics כולל דרך לזהות משתמשים בעילום שם בדוחות על קריסות.
כדי להוסיף מזהי משתמשים לדוחות, מקצים לכל משתמש מזהה ייחודי בצורת מספר מזהה, אסימון או ערך גיבוב:
FirebaseCrashlytics.instance.setUserIdentifier("12345");
אם תצטרכו למחוק מזהה משתמש אחרי שתגדירו אותו, תוכלו לאפס את הערך למחרוזת ריקה. ניקוי של מזהה משתמש לא מסיר רשומות Crashlytics קיימות. אם אתם צריכים למחוק רשומות שמשויכות למזהה משתמש, פנו לתמיכה של Firebase.
אחזור יומני נתיבי ניווט
יומני נתיב הניווט עוזרים לכם להבין טוב יותר את האינטראקציות של משתמש עם האפליקציה שלכם עד לתאונה, לאירוע לא קטלני או לאירוע 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 רק כשבוחרים בכך בקוד:
השבתת האיסוף האוטומטי באופן מקורי:
פלטפורמות של Apple
מוסיפים מפתח חדש לקובץ
Info.plist
:- מקש:
FirebaseCrashlyticsCollectionEnabled
- ערך:
false
Android
בבלוק
application
בקובץAndroidManifest.xml
, מוסיפים תגmeta-data
כדי להשבית את האיסוף האוטומטי:<meta-data android:name="firebase_crashlytics_collection_enabled" android:value="false" />
- מקש:
כדי להפעיל את האיסוף למשתמשים נבחרים, צריך להפעיל את ההחרגה של איסוף הנתונים Crashlytics בזמן הריצה.
ערך ההחרגה נשמר בכל ההפעלות של האפליקציה, כדי ש-Crashlytics יוכל לאסוף דוחות באופן אוטומטי. כדי לבטל את ההסכמה לדיווח אוטומטי על קריסות, מעבירים את הערך
false
כערך לשינוי מברירת המחדל. כשהערך מוגדר ל-false
, הערך החדש לא יחול עד להפעלה הבאה של האפליקציה.FirebaseCrashlytics.instance.setCrashlyticsCollectionEnabled(true);
ניהול הנתונים של תובנות לגבי קריסות
התכונה 'תובנות לגבי קריסות' עוזרת לכם לפתור בעיות על ידי השוואה של נתוני המעקב אחרי סטאק (stack) שהוסרו מהם פרטי הזיהוי לנתוני מעקב מאפליקציות אחרות ב-Firebase, ומציינת אם הבעיה היא חלק ממגמה רחבה יותר. לגבי בעיות רבות, התכונה 'תובנות לגבי קריסות' מספקת גם מקורות מידע שיעזרו לכם לנפות את הבאגים שגרמו לקריסה.
התכונה 'תובנות לגבי קריסות' משתמשת בנתוני קריסות שנצברו כדי לזהות מגמות נפוצות של יציבות. אם אתם מעדיפים לא לשתף את נתוני האפליקציה, תוכלו לבטל את ההסכמה לשימוש בתכונה 'תובנות לגבי קריסות' בתפריט תובנות לגבי קריסות בחלק העליון של רשימת הבעיות Crashlytics במסוף Firebase.