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


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

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

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

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

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

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

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

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

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

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

  2. בפרויקט Unity הפתוח, עוברים אל נכסים > ייבוא חבילה > חבילה מותאמת אישית.

  3. מה-SDK לא דחוס, בוחרים לייבא את ה-SDK Crashlytics (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, צריך להעלות את פרטי הסמלים בזמן ה-build באמצעות CLI של Firebase.

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

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

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

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

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

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

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

Android

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

    • לייצא לפרויקט ב-Android Studio כדי ליצור את הפרויקט.

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

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

    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, שנוצר ברמה הבסיסית (root) של הפרויקט שיוצא אחרי פיתוח האפליקציה דרך Gradle או Android Studio.

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

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

    סימון תיאור
    --generator=csym

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

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

    --generator=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 crashlytics:symbols:upload של ה-CLI כדי להעלות את קובץ סמלים.

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

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

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

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

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


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

השלבים הבאים

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