Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

Przejdź na pakiet Firebase Crashlytics SDK

Możesz teraz skonfigurować Crashlytics w swojej aplikacji, korzystając z nowego oficjalnego pakietu SDK Firebase Crashlytics, który oferuje ulepszone interfejsy API, bardziej spójne z innymi produktami Firebase i bardziej intuicyjne w obsłudze.

W tym przewodniku opisano, jak uaktualnić do nowego zestawu SDK ze starszego zestawu Fabric SDK. Opisuje zmiany wprowadzone wraz z nowymi interfejsami API, powód zmian oraz sposób aktualizowania kodu, jeśli jest to wymagane.

Zanim zaczniesz

Krok 1: Dodaj plik konfiguracyjny Firebase

  1. Otwórz ustawienia projektu . W swoją kartę Aplikacje, wybierz wiązki identyfikator aplikacji, dla których potrzebny jest plik konfiguracyjny.

  2. Kliknij Pobierz GoogleService-Info.plist aby uzyskać plik konfiguracyjny Firebase iOS ( GoogleService-Info.plist ).

    • Możesz pobrać plik konfiguracyjny Firebase iOS ponownie w każdej chwili.

    • Upewnij się, że nazwa pliku config nie jest dołączany z dodatkowymi znakami, jak (2) .

  3. Przenieś plik konfiguracyjny do katalogu głównego projektu Xcode. Jeśli pojawi się monit, wybierz, aby dodać plik konfiguracyjny do wszystkich celów.

Jeśli masz wiele identyfikatorów wiązki w projekcie, należy powiązać każdy identyfikator pakietu z zarejestrowanej aplikacji w konsoli Firebase tak, że każda aplikacja może mieć własne GoogleService-Info.plist pliku.

Krok 2: Dodaj Firebase Crashlytics SDK

  1. W Cocoapods wymienić Fabric i Crashlytics strąków z Firebase/Crashlytics kapsuły we wszystkich celów.

    # Add the pod for Firebase Crashlytics
    pod 'Firebase/Crashlytics'
    # Recommended: Add the Firebase pod for Google Analytics pod 'Firebase/Analytics'
  2. Bezpośrednio odinstaluj lub usuń zależności innych firm z Fabric, takie jak zależności z Fabric Answers i zestawy innych firm.

  3. Zainstalować i aktualizować strąków, następnie otwórz .xcworkspace plik, aby zobaczyć projekt w Xcode:

    pod install
    open YOUR_PROJECT.xcworkspace

Krok 3: Aktualizacja kodu

  1. W Xcode odbuduj aplikację, a następnie ponownie otwórz plik .xcworkspace.

  2. Przejrzyj następujące zmiany w pakiecie SDK i wprowadź odpowiednie aktualizacje kodu:


Crashlytics rotuje teraz identyfikatory na podstawie identyfikatorów instalacji Firebase.

Crashlytics używa identyfikatora UUID instalacji Crashlytics do identyfikowania wystąpień Twojej aplikacji i kojarzenia danych użytkowników z ich urządzeniami. Wcześniej Crashlytics zmieniał identyfikator UUID instalacji użytkownika, gdy zmieniał się identyfikator wyświetlania reklam na jego urządzeniu. Teraz Crashlytics zmienia identyfikator UUID instalacji na podstawie identyfikatora instalacji Firebase (FID) użytkownika. Aby uzyskać więcej informacji, odwiedź Zarządzaj Firebase identyfikatory instalacyjne .

powód do zmiany

Korzystanie z identyfikatorów FID jest zgodne z innymi pakietami SDK Firebase.


Skrypty uruchamiania i przesyłania symboli są teraz dostępne w FirebaseCrashlytics.

Teraz można przejść do run i upload-symbols skrypty z nowej FirebaseCrashlytics bibliotece. Należy zauważyć, że nadal można nazwać upload-symbols z dowolnego miejsca w procesie budowania ręcznie przesłać dSYMs.

Ponadto, tkanina jest API_KEY i BUILD_SECRET nie są już zawarte w nowym SDK. Zamiast Crashlytics teraz używa swojej aplikacji GoogleService-info.plist skojarzyć aplikację z projektem Firebase i zachować historyczne dane o awariach.

Pakiet SDK do tkanin

${PODS_ROOT}/Fabric/run API_KEY BUILD_SECRET
/path/to/pods/directory/Fabric/upload-symbols

Pakiet SDK Firebase Crashlytics

${PODS_ROOT}/FirebaseCrashlytics/run
/path/to/pods/directory/FirebaseCrashlytics/upload-symbols

powód do zmiany

Crashlytics nie używa już pakietu Fabric SDK jako zależności, więc przenosimy nasze narzędzia CLI do nowej biblioteki.


Biblioteka Crashlytics nosi teraz nazwę FirebaseCrashlytics.

W swojej aplikacji zaktualizuj ścieżki importu:

Pakiet SDK do tkanin

Szybki

import Crashlytics

Cel C

@import Crashlytics

Pakiet SDK Firebase Crashlytics

Szybki

import FirebaseCrashlytics

Cel C

@import FirebaseCrashlytics

powód do zmiany

Aktualizacja nazwę Crashlytics biblioteki sprawia, że zgodne z innymi bibliotekami Firebase (np FirebaseFirestore i FirebaseAuth ).


FirebaseCrashlytics nie działa już z pakietem Fabric SDK.

Teraz FirebaseCrashlytics mogą być inicjowane tylko z Firebase Crashlytics SDK. Można uruchomić instancję FirebaseCrashlytics wywołując FirebaseApp.configure w Swift lub [FIRApp configure] w Objective-C.

W swoim application:didFinishLaunchingWithOptions zastąpić wywołań Fabric.with i startWithAPIKey z wezwaniem do FirebaseApp :

Pakiet SDK do tkanin

Szybki

Fabric.with([Crashlytics.self])

Cel C

[Fabric with:@[[Crashlytics class]]];
+ startWithAPIKey:
+ startWithAPIKey:delegate:

Pakiet SDK Firebase Crashlytics

Szybki

FirebaseApp.configure()

Cel C

[FIRApp configure];

powód do zmiany

Korzystanie z nowych metod do inicjowania Crashlytics jest bardziej spójne ze sposobem inicjowania innych usług Firebase.


Metody crash i throwException są usuwane.

Nowe SDK nie zawiera crash lub throwException metod. Zamiast używać fatalError Swift lub pusta tablica w celu C wymusić awarii.

Pakiet SDK Firebase Crashlytics

Szybki

// Force a test crash
fatalError()

Cel C

// Force a test crash
@[][1];

powód do zmiany

Różne rodzaje awarii mogą wystąpić z różnych powodów, a te metody nie określały jasno, czy awarie wystąpiły w czasie wykonywania, czy w natywnym pakiecie SDK aplikacji.


Metoda sharedInstance nosi teraz nazwę crashlytics.

Nowe SDK nie zawiera już sharedInstance metody. Aby zainicjować Crashlytics, użyj crashlytics zamiast (zapoznać się z dokumentacją odniesienia dla Swifta lub Objective-C, aby uzyskać więcej informacji). W pełnomocniku aplikacji zaktualizuj skrypt inicjujący:

Pakiet SDK do tkanin

Szybki

Crashlytics.sharedInstance()

Cel C

[Crashlytics sharedInstance];

Pakiet SDK Firebase Crashlytics

Szybki

Crashlytics.crashlytics()

Cel C

[FIRCrashlytics crashlytics];

powód do zmiany

Zmieniliśmy nazwę metody pobierania instancji, aby była spójna z innymi pakietami SDK Firebase.


setUserIdentifier to teraz setUserID. setUserName i setUserEmail są usuwane.

Wcześniej można ustawić nazwę lub e-mail skojarzony z trzaskiem wykorzystaniem setUserName i setUserEmail , ale nie będą już zdefiniowane te metody. Nowa preferowana metoda zestaw identyfikatorów dla użytkowników jest użycie setUserID .

Pakiet SDK do tkanin

Szybki

Crashlytics.sharedInstance().setUserIdentifier("user_id")

Crashlytics.sharedInstance().setUserEmail("user_email")

Crashlytics.sharedInstance().setUserName("user_name")

Cel C

[[Crashlytics sharedInstance] setUserIdentifier:@"user_id"];

[[Crashlytics sharedInstance] setUserEmail:@"user_email"];

[[Crashlytics sharedInstance] setUserName:@"user_name"];

Pakiet SDK Firebase Crashlytics

Szybki

Crashlytics.crashlytics().setUserID("user_id")

Cel C

[[FIRCrashlytics crashlytics] setUserID:@"user_id"];

powód do zmiany

Przyjęliśmy nazwę metoda setUserID być spójna z innymi Firebase API i usunięte setUserName i setUserEmail zniechęcić zalogowaniu PII przez Crashlytics.


CLSLogv i CLSNSLogv są zastępowane przez funkcje rejestrowania.

Nowe SDK nie zawiera CLSLogv lub CLSNSLogv funkcje. Aby dodać niestandardowe komunikaty dziennika , należy użyć nowych metod rejestrowania w Crashlytics bibliotece. Należy zauważyć, że nowe metody nie drukować do stdout lub NSLog (zalecamy pisanie otoki, jeśli chcesz zachować to zachowanie).

Pakiet SDK do tkanin

Szybki

CLSLogv("%@, %@", getVaList([first_arg, second_arg]))

CLSNSLogv("%@, %@", getVaList([first_arg, second_arg]))

Cel C

CLSLog(@"%@, %@", first_arg, second_arg);
CLSNSLog(@"%@, %@", first_arg, second_arg);

CLSLogv(@"%@, %@", args_va_list);
CLSNSLogv(@"%@, %@", args_va_list);

CLS_LOG(@"%@, %@", first_arg, second_arg);

Pakiet SDK Firebase Crashlytics

Szybki

Crashlytics.crashlytics().log("\(first_arg), \(second_arg)")

Crashlytics.crashlytics().log(format: "%@, %@", arguments: getVaList([first_arg, second_arg]))

Cel C

[[FIRCrashlytics crashlytics] log:@"first_arg, second_arg"];

[[FIRCrashlytics crashlytics] logWithFormat:@"%@, %@", first_arg, second_arg];

Jeśli użyto CLS_LOG , dodaj następujący tekst w pliku nagłówkowym, aby kontynuować uzyskiwanie nazwy plików i numery linii w sprawozdaniach dziennika:

#define CLS_LOG(__FORMAT__, ...) [[FIRCrashlytics crashlytics] logWithFormat:@"%s line %d $ " __FORMAT__, __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__]

powód do zmiany

Nowe metody wymagają instancji, co ułatwia testowanie kodu.


setCustomValue zastępuje setObjectValue, setIntValue, setFloatValue i setBoolValue.

Niestandardowe metody ustawiające nie są już zawarte w nowym pakiecie SDK. Wcześniej można użyć metod do par klucz / wartość ustawiona wysłać wraz z raportu katastrofy. Teraz można użyć setCustomValue:forKey par klucz / wartość ustawioną dla wszystkich typów danych.

Pakiet SDK do tkanin

Szybki

Crashlytics.sharedInstance().setObjectValue("value", forKey: "object_key")

Crashlytics.sharedInstance().setIntValue(100, forKey: "int_key")

Crashlytics.sharedInstance().setFloatValue(99.9, forKey: "float_key")

Crashlytics.sharedInstance().setBoolValue(true, forKey: "bool_key")

Cel C

[[Crashlytics sharedInstance] setObjectValue:@"key" forKey:@"object_key"];

[[Crashlytics sharedInstance] setIntValue:100 forKey:@"int_key"];

[[Crashlytics sharedInstance] setFloatValue:99.9 forKey:@"float_key"];

[[Crashlytics sharedInstance] setBoolValue:YES forKey:@"bool_key"];

Pakiet SDK Firebase Crashlytics

Szybki

Crashlytics.crashlytics().setCustomValue("value", forKey: "object_key")

Crashlytics.crashlytics().setCustomValue(100, forKey: "int_key")

Crashlytics.crashlytics().setCustomValue(99.9, forKey: "float_key")

Crashlytics.crashlytics().setCustomValue(true, forKey: "bool_key")

Cel C

[[FIRCrashlytics crashlytics] setCustomValue:@"value" forKey:@"object_key"];

[[FIRCrashlytics crashlytics] setCustomValue:@(100) forKey:@"int_key"];

[[FIRCrashlytics crashlytics] setCustomValue:@(99.9) forKey:@"float_key"];

[[FIRCrashlytics crashlytics] setCustomValue:@YES forKey:@"bool_key"];

powód do zmiany

Nowa nazwa metody jest unikalna dla Crashlytics i jasno pokazuje, że Crashlytics nie jest zgodny z parą klucz-wartość.


recordCustomExceptionName:reason:frameArray: jest zastępowany przez interfejs API modelu wyjątków.

Jeśli Twoja aplikacja działa w środowisku innym niż natywne (np. JavaScript lub Unity), możesz użyć interfejsu API modelu wyjątków, aby zgłosić metadane awarii w natywnym formacie wyjątku aplikacji.

Pakiet SDK do tkanin

Szybki

let topFrame = CLStackFrame() topFrame.symbol = "doSomethingBad" topFrame.fileName = "bad.cc" topFrame.lineNumber = 23

let middleFrame = CLSStackFrame()
middleFrame.symbol = "doOtherStuff"
middleFrame.fileName = "stuff.cc"
middleFrame.lineNumber = 23;

let bottomFrame = CLSStackFrame()
bottomFrame.symbol = "main"
bottomFrame.fileName = "main.cc"
bottomFrame.lineNumber = 123

Crashlytics.sharedInstance().recordCustomExceptionName("FooException",
                                                       reason: "There was a foo.",
                                                       frameArray: [topFrame, middleFrame, bottomFrame])

Cel C

CLSStackFrame *topFrame = [[CLSStackFrame alloc] init];
topFrame.symbol = @"doSomethingBad";
topFrame.fileName = @"bad.cc";
topFrame.lineNumber = 23;

CLSStackFrame *middleFrame = [[CLSStackFrame alloc] init];
middleFrame.symbol = @"doOtherStuff";
middleFrame.fileName = @"stuff.cc";
middleFrame.lineNumber = 23;

CLSStackFrame *bottomFrame = [[CLSStackFrame alloc] init];
bottomFrame.symbol = @"main";
bottomFrame.fileName = @"main.cc";
bottomFrame.lineNumber = 123;

[[Crashlytics sharedInstance] recordCustomExceptionName:@"FooException"
                                                 reason:@"There was a foo."
                                             frameArray:@[topFrame, middleFrame, bottomFrame]];

Pakiet SDK Firebase Crashlytics

Szybki

var  ex = ExceptionModel.init(name:"FooException", reason:"There was a foo.")
ex.stackTrace = [
  StackFrame.init(symbol:"makeError" fileName:"handler.js" lineNumber:495),
  StackFrame.init(symbol:"then" fileName:"routes.js" lineNumber:102),
  StackFrame.init(symbol:"main" fileName:"app.js" lineNumber:12),
]

crashlytics.record(exceptionModel:ex)

Cel C

model.stackTrace = @[
  [FIRStackFrame stackFrameWithSymbol:@"makeError" fileName:@"handler.js" lineNumber:495],
  [FIRStackFrame stackFrameWithSymbol:@"then" fileName:@"routes.js" lineNumber:102],
  [FIRStackFrame stackFrameWithSymbol:@"main" fileName:@"app.js" lineNumber:12],
];

powód do zmiany

Ta funkcja była od dawna poszukiwana i pozwala rozszerzyć Crashlytics na inne platformy, takie jak Unity, Flutter lub React Native.



CrashlyticsDelegate został zastąpiony oddzielnymi metodami obsługi raportów o awariach.

Możesz teraz korzystać z nowego zestawu metod obsługi raportów o awariach:

  • didFinishLaunchingWithOptions jest teraz zastąpiony przez nowy handler checkForUnsentReportsWithCompletion .

  • crashlyticsDidDetectReportForLastExecution jest teraz zastąpiony przez didCrashDuringPreviousExecution . didCrashDuringPreviousExecution pozwala wygodnie wykryć awarie, które występują podczas ostatniego uruchomienia aplikacji.

  • crashlyticsCanUseBackgroundSessions jest teraz na stałe ustawiona na wartość true.

  • Nie mamy już wsparcie inspekcji CLSReport obiekt w delegata.

Domyślnie Crashlytics automatycznie przesyła raporty o awariach przy starcie i można wcześniej zadzwonić didFinishLaunchingWithOptions pozwolić użytkownikom opt-in do katastrofy raportowania. Teraz, gdy dzwonisz setCrashlyticsCollectionEnabled=false , aby wyłączyć automatyczne zgłaszanie awarii, Crashlytics wzywa checkForUnsentReportsWithCompletion , który pozwala użytkownikom zdecydować, czy wysłać raporty o awariach w przypadku awarii aplikacji. Następnie można wywołać sendUnsentReports jeśli zdecyduje użytkowników w lub deleteUnsentReports jeśli użytkownik zdecyduje się na zewnątrz.

Pamiętaj, że możesz również zadzwonić sendUnsentReports i deleteUnsentReports poza checkForUnsentReportsWithCompletion . Na przykład możesz chcieć na stałe skonfigurować lub wyłączyć raportowanie o awariach, jeśli Twoi użytkownicy wyrazili ogólną zgodę lub odrzucenie na wysyłanie raportów o awariach. Pamiętaj, że możesz nigdy nie otrzymać raportów o awariach, jeśli Twoja aplikacja ulegnie awarii na wczesnym etapie jej cyklu życia.

Pakiet SDK do tkanin

Szybki

class YourClassName: CrashlyticsDelegate {

  func application(_ application: UIApplication, didFinishLaunchingWithOptions

    ...
    Crashlytics.sharedInstance().delegate = self
    ...

    return true
  }

  func crashlyticsDidDetectReport(forLastExecution report: CLSReport, completionHandler: @escaping (Bool) -> Void) {
    /* ... handle unsent reports */
  }

  func crashlyticsCanUseBackgroundSessions(_ crashlytics: Crashlytics) -> Bool {
    return true
  }
}

Cel C

@interface YourClassName <CrashlyticsDelegate> ()
@end

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

  ...
  [[Crashlytics sharedInstance] setDelegate:self];
  ...

  return YES;
}

-(void)crashlyticsDidDetectReportForLastExecution:(CLSReport *)report completionHandler:(void (^)(BOOL submit))completionHandler {
  // ... handle unsent reports
}

-(BOOL)crashlyticsCanUseBackgroundSessions:(Crashlytics *)crashlytics {
  return YES;
}

@end

Pakiet SDK Firebase Crashlytics

Szybki

/* You must set setCrashlyticsCollectionEnabled to false in order to use
checkForUnsentReportsWithCompletion. */

Crashlytics.crashlytics().setCrashlyticsCollectionEnabled(false)

Crashlytics.crashlytics().checkForUnsentReports { hasUnsentReport in
  let hasUserConsent = false
  // ...get user consent.

  if hasUserConsent && hasUnsentReport {
    Crashlytics.crashlytics().sendUnsentReports()
  } else {
    Crashlytics.crashlytics().deleteUnsentReports()
  }
}

// Detect when a crash happens during your app's last run.
if Crashlytics.crashlytics().didCrashDuringPreviousExecution() {
  // ...notify the user.
}

Cel C

/* You must set setCrashlyticsCollectionEnabled to false in order to use
checkForUnsentReportsWithCompletion. */

[[FIRCrashlytics crashlytics] setCrashlyticsCollectionEnabled:false];

[[FIRCrashlytics crashlytics] checkForUnsentReportsWithCompletion:^(BOOL hasUnsentReports) {
  BOOL hasConsent = false;
  // ...get consent from user.

  if (hasConsent && hasUnsentReports) {
    [[FIRCrashlytics crashlytics] sendUnsentReports];
  } else {
    [[FIRCrashlytics crashlytics] deleteUnsentReports];
  }
}];

// Detect when a crash happens during your app's last run.
if ([[FIRCrashlytics crashlytics] didCrashDuringPreviousExecution]) {
  // ...notify the user.
}

powód do zmiany

Nowy zestaw metod zapewnia większą kontrolę nad zachowaniem zgłaszania awarii aplikacji. Ponadto nie trzeba już konfigurować CrashlyticsDelegate przed zainicjowaniem Crashlytics.


firebase_crashlytics_collection_enabled jest zastępowane przez FirebaseCrashlyticsCollectionEnabled.

Po ustawieniu FirebaseCrashlyticsCollectionEnabled na false w Info.plist , Crashlytics przestaje automatycznie wysyłając raporty o awariach na starcie. Po pierwszym uruchomieniu swojej aplikacji, można również wyłączyć raportowanie awarii przez ustawienie setCrashlyticsCollectionEnabled na false w Crashlytics.h , ale uwaga, że setCrashlyticsCollectionEnabled przesłonięcia ta flaga.

Wyłączanie automatycznego zbierania zastępując firebase_crashlytics_collection_enabled klucz w swojej Info.plist :

  • Klucz: FirebaseCrashlyticsCollectionEnabled

  • Wartość: false

Po pierwszym uruchomieniu aplikacji, można również wyłączyć automatyczne zbieranie przez dodanie następujących do swojej Crashlytics.h :

Pakiet SDK Firebase Crashlytics

Szybki

// setCrashlyticsCollectionEnabled is set to true by default.
Crashlytics.crashlytics().setCrashlyticsCollectionEnabled(false)

Cel C

// setCrashlyticsCollectionEnabled is set to true by default.
[[FIRCrashlytics crashlytics] setCrashlyticsCollectionEnabled:false];

powód do zmiany

Teraz masz większą kontrolę nad tym, jak Crashlytics obsługuje niewysłane raporty o awariach po wyłączeniu automatycznego raportowania o awariach. Po ustawieniu FirebaseCrashlyticsCollectionEnabled false, można zadzwonić checkForUnsentReportsWithCompletion z dowolnego miejsca w aplikacji i albo wysłać lub usunąć raporty niewysłane, w zależności od swojej Umożliwia wybór użytkownika.


Teraz Crashlytics zawsze używa sesji w tle.

Wcześniej można wyłączyć sesje tła, jeśli nie chcą wspierać go w swojej aplikacji poprzez ustawienie crashlyticsCanUseBackgroundSessions false. Teraz crashlyticsCanUseBackgroundSessions jest zawsze ustawiona na wartość true.

powód do zmiany

Nie obsługujemy już wersji iOS poniżej 7.0 ani wersji macOS poniżej OS X 10.9, które nie obsługują sesji w tle.


Crashlytics może wykorzystywać wyłącznie dane zebrane przez Google Analytics.

Po uaktualnieniu do pakietu Firebase Crashlytics SDK nie można już zbierać danych za pomocą Fabric Answers. Aby uzyskać dane o użytkownikach bez awarii i okruszkach nawigacyjnych, przełącz się na korzystanie z Google Analytics. Pamiętaj, że Twoich historycznych danych Odpowiedzi nie można przenieść do Firebase.

Wizyta zacząć korzystać z Google Analytics , aby dowiedzieć się, jak dodać Google Analytics do swojej aplikacji.

powód do zmiany

Oferujemy teraz usługę Google Analytics, która pomoże Ci uzyskać lepszy wgląd w dane o awariach. Dzięki Analytics możesz nadal gromadzić statystyki swojej aplikacji w konsoli Firebase.

Następne kroki