קריסות וחריגים – Android SDK

במסמך הזה מפורטת סקירה כללית ברמה גבוהה של מדידת קריסות ומדידות של חריגים באמצעות Google Analytics SDK ל-Android v3.

סקירה

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

שם השדה שדה מעקב סוג חובה תיאור
תיאור Fields.EX_DESCRIPTION String לא תיאור של החריג (עד 100 תווים). מכבדים null .
isFatal Fields.EX_FATAL boolean כן מציין אם החריגה הייתה חמורה. true מציין מצב חמור.

נתוני הקריסה והחריגים זמינים בעיקר בדוח 'קריסה' ו'חריגים'.

חריגים נתפסו

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

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

/*
 * An app tries to load a list of high scores from the cloud. If the request
 * times out, an exception is sent to Google Analytics
 */
try {

  // Request some scores from the network.
  ArrayList highScores = getHighScoresFromCloud();

} catch (IOException e) {

  // May return null if EasyTracker has not yet been initialized with a
  // property ID.
  EasyTracker easyTracker = EasyTracker.getInstance(this);

  // StandardExceptionParser is provided to help get meaningful Exception descriptions.
 	easyTracker.send(MapBuilder
      .createException(new StandardExceptionParser(this, null)              // Context and optional collection of package names
                                                                            // to be used in reporting the exception.
                       .getDescription(Thread.currentThread().getName(),    // The name of the thread on which the exception occurred.
                                       e),                                  // The exception.
                       false)                                               // False indicates a nonfatal exception
      .build()
  );


  ... // Display alert to user that high scores are currently unavailable.
}

מדידת חריגה שלא נתפסה

חריגים שלא תועדו מייצגים מקרים שבהם האפליקציה נתקלה בתנאים לא צפויים בזמן הריצה. לרוב הם חמורים מאוד וגורמים לקריסה של האפליקציה. חריגים שלא נתפסו יכולים להישלח ל-Google Analytics באופן אוטומטי באמצעות Easytracker או המחלקה ExceptionReporter.

שימוש ב-EasyMonitor

כדי לשלוח באופן אוטומטי את כל החריגים שלא זוהו באפליקציה באמצעות EasyMonitor, הוסיפו את השורה הבאה לקובץ analytics.xml:

<bool name="ga_reportUncaughtExceptions">true</bool>

אחרי שליחת חריג באמצעות מדידת חריגות אוטומטית, Easytracker יעביר את החריגה ל-handler החריג שמוגדר כברירת מחדל ב-Thread.

שימוש בהטמעה מתקדמת

השתמשו במחלקה ExceptionReporter כדי להטמיע מדידה אוטומטית של חריגים שלא נתפסו, אם אתם משתמשים בהטמעה מתקדמת ולא ב-EasyTrack.

ExceptionReporter יכול לשמש כ-handler של חריג שלא נתפס כברירת מחדל ל-thread ספציפי או לכל ה-threads באפליקציה. אחרי שליחת חריג ל-Google Analytics, המחלקה ExceptionReporter יכולה באופן אופציונלי להעביר את החריגה ל-handler שלא נתפס על ידך.

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

UncaughtExceptionHandler myHandler = new ExceptionReporter(
    GoogleAnalytics.getInstance(this).getDefaultTracker(), // Tracker, may return null if not yet initialized.
    GAServiceManager.getInstance(),                        // GAServiceManager singleton.
    Thread.getDefaultUncaughtExceptionHandler());          // Current default uncaught exception handler.

// Make myHandler the new default uncaught exception handler.
Thread.setDefaultUncaughtExceptionHandler(myHandler);

כשמשתמשים במדידה אוטומטית של חריגות, חשוב לזכור:

  • כל החריגות שנשלחות באמצעות מדידת חריגות אוטומטיות מדווחים כקטלניות ב-Google Analytics.
  • כברירת מחדל, שדה התיאור מוגדר אוטומטית באמצעות סוג החריגה, שם המחלקה, שם השיטה ושם השרשור.

ניתוח תיאורי חריגים

ה-SDK מספק StandardExceptionParser כדי לפשט את תהליך הקבלה והשליחה של תיאורי חריגים אל Google Analytics:

// Using StandardExceptionParser to get an Exception description.
try {

  // Request some scores from the network.
  ArrayList highScores = getHighScoresFromCloud();

} catch (IOException e) {

  // May return null if EasyTracker has not yet been initialized with a
  // property ID.
  EasyTracker easyTracker = EasyTracker.getInstance(this);

 	easyTracker.send(MapBuilder
      .createException(new StandardExceptionParser(this, null)              // Context and optional collection of package names
                                                                            // to be used in reporting the exception.
                       .getDescription(Thread.currentThread().getName(),    // The name of the thread on which the exception occurred.
                                       e),                                  // The exception.
	                     false)                                               // False indicates a fatal exception
      .build()
  );

  ... // Display alert to user that high scores are currently unavailable.
}

אפשר גם להטמיע מנתח משלך על ידי הטמעת הממשק של ExceptionParser וקריאה לשיטה setDescription שלו בעת שליחת חריג ל-Google Analytics.