เริ่มต้นใช้งาน Firebase Crashlytics


บทแนะนำฉบับย่อนี้จะอธิบายวิธีตั้งค่า Firebase Crashlytics ในแอปด้วย Firebase Crashlytics SDK เพื่อให้คุณได้รับรายงานข้อขัดข้องที่ครอบคลุมในคอนโซล Firebase

การตั้งค่า Crashlytics ต้องใช้ทั้งงานในคอนโซล Firebase และ IDE (เช่น การเพิ่มไฟล์การกําหนดค่า Firebase และ Crashlytics SDK) ในการตั้งค่าให้เสร็จสิ้น คุณจะต้องบังคับให้มีข้อขัดข้องจากการทดสอบเพื่อส่ง ไปยัง Firebase

ก่อนเริ่มต้น

  1. เพิ่ม Firebase ลงในโปรเจ็กต์ Unity หากยังไม่ได้ดำเนินการ หากไม่มีโปรเจ็กต์ Unity คุณสามารถดาวน์โหลดแอปตัวอย่างได้

  2. แนะนํา: หากต้องการรับบันทึกเบรดครัมบ์โดยอัตโนมัติเพื่อทำความเข้าใจการดําเนินการของผู้ใช้ที่ทําให้เกิดข้อขัดข้อง เหตุการณ์ที่ไม่ใช่ข้อขัดข้องร้ายแรง หรือ ANR คุณจะต้องเปิดใช้ Google Analytics ในโปรเจ็กต์ Firebase

    • หากโปรเจ็กต์ Firebase ที่มีอยู่ไม่มี Google Analytics เปิดใช้อยู่ คุณสามารถเปิดใช้ Google Analytics ได้จาก แท็บการผสานรวมของ การตั้งค่าโปรเจ็กต์ ในคอนโซล Firebase

    • หากจะสร้างโปรเจ็กต์ Firebase ใหม่ ให้เปิดใช้ Google Analytics ในระหว่างขั้นตอนการสร้างโปรเจ็กต์

ขั้นตอนที่ 1: เพิ่ม SDK ของ Crashlytics ลงในแอป

โปรดทราบว่าเมื่อลงทะเบียนโปรเจ็กต์ Unity กับโปรเจ็กต์ Firebase แล้ว คุณอาจดาวน์โหลด Firebase Unity SDK และเพิ่มแพ็กเกจตามที่อธิบายไว้ในขั้นตอนต่อไปนี้แล้ว

  1. ดาวน์โหลด Firebase Unity SDK แล้วแตกไฟล์ SDK ในที่ที่สะดวก Firebase Unity SDK ไม่เจาะจงแพลตฟอร์ม

  2. ในโปรเจ็กต์ Unity แบบเปิด ให้ไปที่ ชิ้นงาน > นำเข้าแพ็กเกจ > แพ็กเกจที่กำหนดเอง

  3. เลือกตำแหน่งเพื่อนําเข้า Crashlytics SDK จาก SDK ที่แยกไฟล์แล้ว (FirebaseCrashlytics.unitypackage)

    หากต้องการใช้ประโยชน์จากบันทึกเบรดครัมบ์ ให้เพิ่ม Firebase SDK สําหรับ Google Analytics ลงในแอปด้วย (FirebaseAnalytics.unitypackage) ตรวจสอบว่าได้เปิดใช้ Google Analytics ในโปรเจ็กต์ Firebase แล้ว

  4. คลิกนำเข้า ในหน้าต่างนำเข้าแพ็กเกจ Unity

ขั้นตอนที่ 2: เริ่มต้น Crashlytics

  1. สร้างสคริปต์ C# ใหม่ แล้วเพิ่มลงใน GameObject ในฉาก

    1. เปิดฉากแรกแล้วสร้าง GameObject ที่ว่างเปล่าชื่อ CrashlyticsInitializer

    2. คลิกเพิ่มคอมโพเนนต์ในเครื่องมือตรวจสอบสำหรับวัตถุใหม่

    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 ที่ใช้แบ็กเอนด์สคริปต์ Mono ของ Unity คุณไม่จําเป็นต้องทำตามขั้นตอนเหล่านี้

  • สําหรับแอปแพลตฟอร์ม Apple คุณไม่จําเป็นต้องทำตามขั้นตอนเหล่านี้ เนื่องจากปลั๊กอิน Unity Editor ของ Firebase จะกําหนดค่าโปรเจ็กต์ Xcode ให้อัปโหลดสัญลักษณ์โดยอัตโนมัติ

Unity SDK 8.6.1+ ของ Crashlytics จะรวมการรายงานข้อขัดข้อง NDK โดยอัตโนมัติ ซึ่งทำให้ Crashlytics รายงาน Unity ได้โดยอัตโนมัติ IL2CPP ไม่สำเร็จบน Android แต่หากต้องการดูสแต็กเทรซที่แทนที่ด้วยสัญลักษณ์สำหรับไลบรารีเนทีฟ ขัดข้องในแดชบอร์ด Crashlytics คุณต้องอัปโหลดข้อมูลสัญลักษณ์ที่ เวลาบิลด์โดยใช้ Firebase CLI

หากต้องการตั้งค่าสำหรับการอัปโหลดสัญลักษณ์ ให้ทำตามวิธีการติดตั้ง Firebase CLI

หากคุณติดตั้ง CLI ไว้แล้ว โปรดอัปเดตเป็นเวอร์ชันล่าสุด

ขั้นตอนที่ 4: สร้างโปรเจ็กต์และอัปโหลดสัญลักษณ์

iOS+ (แพลตฟอร์ม Apple)

  1. ส่งออกโปรเจ็กต์ไปยังพื้นที่ทำงาน Xcode จากกล่องโต้ตอบ Build Settings

  2. สร้างแอป

    สําหรับแพลตฟอร์ม Apple ปลั๊กอิน Firebase Unity Editor โดยอัตโนมัติ กำหนดค่าโปรเจ็กต์ Xcode เพื่อสร้างและอัปโหลด ไฟล์สัญลักษณ์ที่เข้ากันได้กับ Crashlytics ไปยังเซิร์ฟเวอร์ Firebase สำหรับแต่ละบิลด์

Android

  1. จากกล่องโต้ตอบการตั้งค่าการสร้าง ให้ทำอย่างใดอย่างหนึ่งต่อไปนี้

    • ส่งออกไปยังโปรเจ็กต์ Android Studio เพื่อสร้างโปรเจ็กต์ หรือ

    • สร้าง APK โดยตรงจาก Unity Editor
      ก่อนสร้าง ให้ตรวจสอบว่าได้เลือกช่องทําเครื่องหมายสําหรับ Create symbols.zip ในกล่องโต้ตอบการตั้งค่าการสร้าง

  2. เมื่อบิลด์เสร็จแล้ว ให้สร้างไฟล์สัญลักษณ์ที่เข้ากันได้กับ Crashlytics และอัปโหลดไปยังเซิร์ฟเวอร์ Firebase โดยเรียกใช้คำสั่ง CLI ต่อไปนี้ของ Firebase

    firebase crashlytics:symbols:upload --app=FIREBASE_APP_ID PATH/TO/SYMBOLS
    • FIREBASE_APP_ID: รหัสแอป Android ใน Firebase (ไม่ใช่ ชื่อแพ็กเกจ)
      ตัวอย่างรหัสแอป Android ใน Firebase: 1:567383003300:android:17104a2ced0c9b9b

    • PATH/TO/SYMBOLS: เส้นทางไปยังไฟล์สัญลักษณ์ที่ CLI สร้างขึ้น

      • ส่งออกไปยังโปรเจ็กต์ Android Studio - PATH/TO/SYMBOLS คือไดเรกทอรี unityLibrary/symbols ซึ่งสร้างขึ้นที่รูทโปรเจ็กต์ที่ส่งออกหลังจากที่คุณสร้างแอปผ่าน Gradle หรือ Android Studio

      • บิลด์ APK จากภายใน Unity โดยตรง PATH/TO/SYMBOLS คือเส้นทางของไฟล์สัญลักษณ์ที่บีบอัดซึ่งสร้างขึ้นในไดเรกทอรีรูทของโปรเจ็กต์เมื่อบิลด์เสร็จสิ้น (เช่น myproject/myapp-1.0-v100.symbols.zip)

    ดูตัวเลือกขั้นสูงสำหรับการใช้ Firebase คำสั่ง CLI สำหรับการสร้างและอัปโหลดไฟล์สัญลักษณ์

    แจ้งว่าไม่เหมาะสม คำอธิบาย
    --generator=csym

    ใช้เครื่องมือสร้างไฟล์สัญลักษณ์ cSYM แบบเดิมแทนเครื่องมือสร้าง Breakpad เริ่มต้น

    ไม่แนะนำให้ใช้ เราขอแนะนำให้ใช้ค่าเริ่มต้น เครื่องมือสร้างไฟล์สัญลักษณ์ Breakpad

    --generator=breakpad

    ใช้โปรแกรมสร้างไฟล์สัญลักษณ์ Breakpad

    โปรดทราบว่าค่าเริ่มต้นในการสร้างไฟล์สัญลักษณ์คือ Breakpad ใช้ Flag นี้เฉพาะในกรณีที่คุณเพิ่ม symbolGenerator { csym() } ในการกำหนดค่าบิลด์และต้องการลบล้างเพื่อใช้ Breakpad แทน

    --dry-run

    สร้างไฟล์สัญลักษณ์แต่ไม่ได้อัปโหลดไฟล์เหล่านั้น

    แฟล็กนี้มีประโยชน์หากคุณต้องการตรวจสอบเนื้อหาของไฟล์ที่ส่ง

    --debug ให้ข้อมูลเพิ่มเติมเกี่ยวกับการแก้ไขข้อบกพร่อง

ขั้นตอนที่ 5: บังคับให้ทดสอบข้อขัดข้องเพื่อตั้งค่าให้เสร็จ

หากต้องการตั้งค่า Crashlytics ให้เสร็จและดูข้อมูลเบื้องต้นใน แดชบอร์ด Crashlytics ของคอนโซล Firebase คุณต้องบังคับใช้การทดสอบ ขัดข้อง

  1. ค้นหา GameObject ที่มีอยู่ แล้วเพิ่มสคริปต์ต่อไปนี้ สคริปต์นี้จะทําให้การทดสอบขัดข้อง 2-3 วินาทีหลังจากที่คุณเรียกใช้แอป

    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. สร้างแอปและอัปโหลดข้อมูลสัญลักษณ์หลังจากการบิลด์เสร็จสิ้น

    • iOS+: ปลั๊กอิน Firebase Unity Editor จะกำหนดค่า โปรเจ็กต์ Xcode เพื่ออัปโหลดไฟล์สัญลักษณ์

    • Android: สำหรับแอป Android ที่ใช้ IL2CPP ให้เรียกใช้ Firebaseคำสั่ง CLI crashlytics:symbols:upload เพื่ออัปโหลด ไฟล์สัญลักษณ์

  3. เรียกใช้แอป เมื่อแอปทำงานแล้ว ให้ดูบันทึกของอุปกรณ์และรอ ข้อยกเว้นที่จะทริกเกอร์จาก CrashlyticsTester

    • iOS+: ดูบันทึกในแผงด้านล่างของ Xcode

    • Android: ดูบันทึกโดยเรียกใช้คำสั่งต่อไปนี้ในเทอร์มินัล adb logcat

  4. ไปที่หน้าแดชบอร์ด Crashlytics ของ Firebase เพื่อดูข้อขัดข้องในการทดสอบ

    หากรีเฟรชคอนโซลแล้ว แต่ยังไม่เห็นข้อขัดข้องจากการทดสอบ หลังจากผ่านไป 5 นาที เปิดใช้การบันทึกการแก้ไขข้อบกพร่อง เพื่อดูว่าแอปของคุณส่งรายงานข้อขัดข้องหรือไม่


เท่านี้ก็เรียบร้อย ตอนนี้ Crashlytics กำลังตรวจสอบแอปของคุณเพื่อหาข้อขัดข้อง ไปที่หน้าแดชบอร์ด Crashlytics เพื่อดูและตรวจสอบรายงานและสถิติทั้งหมด

ขั้นตอนถัดไป

  • (แนะนำ) สําหรับแอป Android ที่ใช้ IL2CPP ให้รับความช่วยเหลือในการแก้ไขข้อบกพร่องข้อขัดข้องที่เกิดจากข้อผิดพลาดด้านหน่วยความจําของระบบโดยรวบรวมรายงาน GWP-ASan ข้อผิดพลาดเกี่ยวกับหน่วยความจำเหล่านี้อาจเชื่อมโยงกับความเสียหายของหน่วยความจําภายใน แอปของคุณ ซึ่งเป็นสาเหตุหลักของช่องโหว่ด้านความปลอดภัยของแอป หากต้องการใช้ประโยชน์จากฟีเจอร์การแก้ไขข้อบกพร่องนี้ ให้ตรวจสอบว่าแอปใช้ Crashlytics SDK เวอร์ชันล่าสุดสําหรับ Unity (v10.7.0 ขึ้นไป) และเปิดใช้ GWP-ASan อย่างชัดแจ้ง (คุณต้องแก้ไขไฟล์ Manifest ของแอป Android)
  • ผสานรวมกับ Google Play เพื่อให้ คุณสามารถกรองรายงานข้อขัดข้องของแอป Android ตาม Google Play แทร็กได้โดยตรงใน Crashlytics หน้าแดชบอร์ด วิธีนี้ช่วยให้คุณมุ่งเน้นแดชบอร์ดไปที่บิลด์ที่เฉพาะเจาะจงได้ดีขึ้น