תחילת העבודה עם Firebase Crashlytics


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

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

לפני שמתחילים

  1. אם עדיין לא עשיתם זאת, מוסיפים את Firebase לפרויקט ב-Unity. אם אין לכם פרויקט ב-Unity, תוכלו להוריד אפליקציה לדוגמה.

  2. מומלץ: כדי לקבל באופן אוטומטי יומני breadcrumb כדי להבין את הפעולות של המשתמשים שהובילו לקריסה, לאירוע לא קטלני או לאירוע ANR, צריך להפעיל את Google Analytics בפרויקט Firebase.

    • אם בפרויקט Firebase הקיים שלכם לא מופעלת Google Analytics, תוכלו להפעיל את Google Analytics בכרטיסייה Integrations (שילובים) של > Project settings במסוף Firebase.

    • אם אתם יוצרים פרויקט חדש ב-Firebase, צריך להפעיל את Google Analytics במהלך תהליך יצירת הפרויקט.

שלב 1: מוסיפים את ה-SDK של Crashlytics לאפליקציה

שימו לב: כשרשמתם את הפרויקט ב-Unity בפרויקט Firebase, יכול להיות שכבר הורדתם את ה-SDK של Unity Firebase והוספתם את החבילות שמתוארות בשלבים הבאים.

  1. מורידים את Firebase Unity SDK ומחלצים את ה-SDK למקום נוח. ערכת ה-SDK של Firebase Unity היא לא ספציפית לפלטפורמה.

  2. בפרויקט הפתוח ב-Unity, עוברים אל Assets‏ > Import Package‏ > Custom Package.

  3. מתוך ערכת ה-SDK ללא האפסור, בוחרים לייבא את Crashlytics SDK (FirebaseCrashlytics.unitypackage).

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

  4. בחלון ייבוא חבילת Unity, לוחצים על ייבוא.

שלב 2: מפעילים את Crashlytics

  1. יוצרים סקריפט חדש ב-C# ומוסיפים אותו ל-GameObject בסצנה.

    1. פותחים את הסצנה הראשונה ויוצרים GameObject ריק בשם CrashlyticsInitializer.

    2. לוחצים על Add Component (הוספת רכיב) ב-Inspector כדי למצוא את האובייקט החדש.

    3. בוחרים את התסריט CrashlyticsInit כדי להוסיף אותו לאובייקט CrashlyticsInitializer.

  2. מאתחלים את Crashlytics באמצעות השיטה Start של הסקריפט:

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    // Import Firebase and Crashlytics
    using Firebase;
    using Firebase.Crashlytics;
    
    public class CrashlyticsInit : MonoBehaviour {
        // Use this for initialization
        void Start () {
            // Initialize Firebase
            Firebase.FirebaseApp.CheckAndFixDependenciesAsync().ContinueWith(task => {
                var dependencyStatus = task.Result;
                if (dependencyStatus == Firebase.DependencyStatus.Available)
                {
                    // Create and hold a reference to your FirebaseApp,
                    // where app is a Firebase.FirebaseApp property of your application class.
                    // Crashlytics will use the DefaultInstance, as well;
                    // this ensures that Crashlytics is initialized.
                    Firebase.FirebaseApp app = Firebase.FirebaseApp.DefaultInstance;
    
                    // When this property is set to true, Crashlytics will report all
                    // uncaught exceptions as fatal events. This is the recommended behavior.
                    Crashlytics.ReportUncaughtExceptionsAsFatal = true;
    
                    // Set a flag here for indicating that your project is ready to use Firebase.
                }
                else
                {
                    UnityEngine.Debug.LogError(System.String.Format(
                      "Could not resolve all Firebase dependencies: {0}",dependencyStatus));
                    // Firebase Unity SDK is not safe to use here.
                }
            });
        }
    
      // Update is called once per frame
      void Update()
        // ...
    }

שלב 3: (ב-Android בלבד) מגדירים את האפשרות להעלאת סמלים

השלב הזה נדרש רק לאפליקציות ל-Android שמשתמשות ב-IL2CPP.

  • את השלבים האלה לא צריך לבצע באפליקציות ל-Android עם הקצה העורפי של כתיבת סקריפטים במונו של Unity.

  • לאפליקציות לפלטפורמות של Apple, אין צורך לבצע את השלבים האלה כי הפלאגין של Firebase Unity Editor מגדיר באופן אוטומטי את פרויקט Xcode להעלאת סמלים.

‏Unity SDK 8.6.1 ואילך של Crashlytics כולל באופן אוטומטי דיווח על קריסות ב-NDK, שמאפשר ל-Crashlytics לדווח באופן אוטומטי על קריסות של IL2CPP ב-Unity ב-Android. עם זאת, כדי לראות ב-Crashlytics את הנתונים של מעקב הסטאק המתווסף (symbolicated) של קריסות בספריות מקומיות, צריך להעלות את פרטי הסמלים בזמן ה-build באמצעות CLI של Firebase.

כדי להגדיר את העלאת הסמלים, פועלים לפי ההוראות להתקנת ה-CLI של Firebase.

אם כבר התקנתם את ה-CLI, חשוב לעדכן אותו לגרסה האחרונה.

שלב 4: פיתוח הפרויקט והעלאת סמלים

iOS+ (פלטפורמת Apple)

  1. בתיבת הדו-שיח Build Settings, מייצאים את הפרויקט לסביבת עבודה ב-Xcode.

  2. יוצרים את האפליקציה.

    לפלטפורמות של Apple, הפלאגין של Firebase Unity Editor מגדיר באופן אוטומטי את פרויקט Xcode ליצירה ולהעלאה של קובץ סמלים תואם Crashlytics לשרתי Firebase בכל גרסת build.

Android

  1. בתיבת הדו-שיח הגדרות Build, מבצעים אחת מהפעולות הבאות:

    • לייצא את הנתונים לפרויקט Android Studio כדי לבנות את הפרויקט, או

    • אפשר לבנות את ה-APK ישירות מ-Unity Editor.
      לפני הבנייה, מוודאים שהתיבה Create icon.zip מסומנת בתיבת הדו-שיח Build Settings.

  2. בסיום ה-build, יוצרים קובץ סמלים תואם ל-Crashlytics ומעלים אותו לשרתים של Firebase באמצעות הפקודה הבאה ב-CLI של Firebase:

    firebase crashlytics:symbols:upload --app=FIREBASE_APP_ID PATH/TO/SYMBOLS
    • FIREBASE_APP_ID: מזהה האפליקציה שלכם ב-Firebase ל-Android (לא שם החבילה)
      דוגמה למזהה האפליקציה שלכם ב-Firebase ל-Android: 1:567383003300:android:17104a2ced0c9b9b

    • PATH/TO/SYMBOLS: הנתיב לקובץ הסמלים שנוצר על ידי ה-CLI

      • הקובץ מיוצא לפרויקט Android Studio – PATH/TO/SYMBOLS היא הספרייה unityLibrary/symbols, שנוצרת ברמה הבסיסית של הפרויקט שיוצא אחרי שיוצרים את האפליקציה דרך Gradle או Android Studio.

      • פיתחתם את קובץ ה-APK ישירות מתוך Unity – PATH/TO/SYMBOLS הוא הנתיב של קובץ הסמל המוצפן שנוצר בספריית השורש של הפרויקט בסיום ה-build (לדוגמה: myproject/myapp-1.0-v100.symbols.zip).

    הצגת אפשרויות מתקדמות לשימוש בפקודה Firebase ב-CLI ליצירה ולהעלאה של קובצי סמלים

    דגל תיאור
    --generator=csym

    שימוש במחולל קובצי הסמלים הקודם של cSYM במקום במחולל ברירת המחדל של Breakpad

    לא מומלץ לשימוש. מומלץ להשתמש בברירת המחדל של ה-generator של קובצי הסימנים של Breakpad.

    --generator=breakpad

    שימוש במחולל קובצי הסמלים של Breakpad

    הערה: ברירת המחדל ליצירת קובצי סמלים היא Breakpad. משתמשים בדגל הזה רק אם הוספתם את symbolGenerator { csym() } להגדרות ה-build ואתם רוצים לשנות את ההגדרה הזו ולהשתמש ב-Breakpad במקום זאת.

    --dry-run

    יוצר את קובצי הסמלים אבל לא מעלה אותם

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

    --debug מידע נוסף על ניפוי הבאגים

שלב 5: מפעילים קריסה לצורך בדיקה כדי לסיים את ההגדרה

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

  1. מחפשים קובץ GameObject קיים ומוסיפים לו את הסקריפט הבא. הסקריפט הזה יגרום לקריסה של הבדיקה כמה שניות אחרי הרצת האפליקציה.

    using System;
    using UnityEngine;
    
    public class CrashlyticsTester : MonoBehaviour {
    
        int updatesBeforeException;
    
        // Use this for initialization
        void Start () {
          updatesBeforeException = 0;
        }
    
        // Update is called once per frame
        void Update()
        {
            // Call the exception-throwing method here so that it's run
            // every frame update
            throwExceptionEvery60Updates();
        }
    
        // A method that tests your Crashlytics implementation by throwing an
        // exception every 60 frame updates. You should see reports in the
        // Firebase console a few minutes after running your app with this method.
        void throwExceptionEvery60Updates()
        {
            if (updatesBeforeException > 0)
            {
                updatesBeforeException--;
            }
            else
            {
                // Set the counter to 60 updates
                updatesBeforeException = 60;
    
                // Throw an exception to test your Crashlytics implementation
                throw new System.Exception("test exception please ignore");
            }
        }
    }
  2. מפתחים את האפליקציה ומעלים את פרטי הסמלים בסיום תהליך ה-build.

    • iOS+: הפלאגין של Firebase Unity Editor מגדיר באופן אוטומטי את פרויקט Xcode להעלאת קובץ הסמל.

    • Android: באפליקציות ל-Android שמשתמשות ב-IL2CPP, מריצים את הפקודה Firebase CLI crashlytics:symbols:upload כדי להעלות את קובץ הסמלים.

  3. מריצים את האפליקציה. אחרי שהאפליקציה פועלת, בודקים את יומן המכשיר ומחכים להפעלה של החריגה מ-CrashlyticsTester.

    • iOS ואילך: הצגת היומנים בחלונית התחתונה של Xcode.

    • Android: כדי להציג את היומנים, מריצים את הפקודה הבאה במסוף: adb logcat.

  4. עוברים אל מרכז הבקרה של Crashlytics במסוף Firebase כדי לראות את קריסה של הבדיקה.

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


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

השלבים הבאים

  • (מומלץ) באפליקציות ל-Android שמשתמשות ב-IL2CPP, אפשר לקבל עזרה בניפוי באגים של קריסות שנגרמות על ידי שגיאות זיכרון נייטיב על ידי איסוף דוחות GWP-ASan. יכול להיות ששגיאות שקשורות לזיכרון קשורות לפגיעה בזיכרון בתוך האפליקציה, שהיא הגורם המוביל לפרצות אבטחה באפליקציה. כדי להשתמש בתכונה הזו לניפוי באגים, צריך לוודא שהאפליקציה שלכם משתמשת ב-Crashlytics SDK העדכני ביותר ל-Unity (גרסה 10.7.0 ואילך) ושהתכונה GWP-ASan מופעלת באופן מפורש (נדרשת שינוי של קובץ Android App Manifest).
  • שילבו את השירות עם Google Play כדי שתוכלו לסנן את דוחות הקריסה של אפליקציות Android לפי Google Play טרקים ישירות בלוח הבקרה Crashlytics. כך תוכלו להתמקד טוב יותר בלוחות הבקרה ב-builds ספציפיים.