Google is committed to advancing racial equity for Black communities. See how.
Cette page a été traduite par l'API Cloud Translation.
Switch to English

Mettre à niveau vers le SDK Firebase Crashlytics

Vous pouvez désormais configurer Crashlytics dans votre application en utilisant le nouveau SDK Firebase Crashlytics officiel, qui propose des API améliorées plus cohérentes avec les autres produits Firebase et plus intuitives à utiliser. Ce guide décrit comment mettre à niveau vers le nouveau SDK à partir du SDK Fabric Crashlytics. Il décrit les modifications qui accompagnent les nouvelles API, la raison des modifications et comment mettre à jour votre code, si nécessaire.

Si vous avez récemment migré votre application depuis Fabric, examinez comment la mise à niveau vers le SDK Firebase Crashlytics affecte vos données d'analyse des incidents.

Étape 1 : Ajouter un fichier de configuration Firebase

  1. Ouvrez les paramètres de votre projet. Dans la carte Vos applications , sélectionnez l'ID de groupe de l'application pour laquelle vous avez besoin d'un fichier de configuration.
  2. Cliquez sur Télécharger GoogleService-Info.plist pour obtenir votre fichier de configuration Firebase iOS ( GoogleService-Info.plist ).

    • Vous pouvez télécharger à nouveau votre fichier de configuration Firebase iOS à tout moment.

    • Assurez-vous que le nom du fichier de configuration n'est pas ajouté avec des caractères supplémentaires, comme (2) .

  3. Déplacez votre fichier de configuration à la racine de votre projet Xcode. Si vous y êtes invité, sélectionnez pour ajouter le fichier de configuration à toutes les cibles.

Si vous avez plusieurs ID de bundle dans votre projet, vous devez associer chaque ID de bundle à une application enregistrée dans la console Firebase afin que chaque application puisse avoir son propre fichier GoogleService-Info.plist .

Étape 2 : ajoutez le SDK Firebase Crashlytics

  1. Dans Cocoapods, remplacez les pods Fabric et Crashlytics par un pod Firebase/Crashlytics dans toutes les cibles. Assurez-vous d'ajouter la version 4.0.0 ou ultérieure (cela est nécessaire pour que vos rapports de plantage apparaissent dans la console Firebase).

    # Add the pod for Firebase Crashlytics
    pod 'Firebase/Crashlytics'
    # Recommended: Add the Firebase pod for Google Analytics pod 'Firebase/Analytics'
  2. Désinstallez ou supprimez directement les dépendances tierces de Fabric, telles que les dépendances de Fabric Answers et de kits tiers.

  3. Installez et mettez à jour les pods, puis ouvrez votre fichier .xcworkspace pour voir le projet dans Xcode:

    pod install
    open your-project.xcworkspace

Étape 3 : Mettez à jour votre code

  1. Dans Xcode, reconstruisez votre application, puis rouvrez votre fichier .xcworkspace.

  2. Passez en revue les modifications suivantes du SDK et apportez les mises à jour appropriées à votre code:


Les scripts d'exécution et de téléchargement des symboles se trouvent désormais dans FirebaseCrashlytics.

Vous pouvez désormais accéder aux scripts d' run et de upload-symbols partir de la nouvelle bibliothèque FirebaseCrashlytics . Notez que vous pouvez toujours appeler upload-symbols de upload-symbols de n'importe où dans votre processus de construction pour télécharger manuellement vos dSYM.

De plus, l' API_KEY et BUILD_SECRET ne sont plus inclus dans le nouveau SDK. Au lieu de cela, Crashlytics utilise désormais GoogleService-info.plist de votre application pour associer votre application à votre projet Firebase et conserver vos données de crash historiques.

SDK Fabric

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

SDK Firebase Crashlytics

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

Raison du changement

Crashlytics n'utilise plus le kit SDK Fabric en tant que dépendance, nous déplaçons donc nos outils CLI vers une nouvelle bibliothèque.


La bibliothèque Crashlytics s'appelle désormais FirebaseCrashlytics.

Dans votre application, mettez à jour vos chemins d'importation:

SDK Fabric

Rapide

import Crashlytics

Objectif c

@import Crashlytics

SDK Firebase Crashlytics

Rapide

import FirebaseCrashlytics

Objectif c

@import FirebaseCrashlytics

Raison du changement

La mise à jour du nom de la bibliothèque Crashlytics rend cohérente avec d'autres bibliothèques Firebase (par exemple, FirebaseFirestore et FirebaseAuth ).


FirebaseCrashlytics ne fonctionne plus avec le kit SDK Fabric.

Désormais, FirebaseCrashlytics ne peut être initialisé qu'avec le SDK Firebase Crashlytics. Vous pouvez démarrer une instance de FirebaseCrashlytics en appelant FirebaseApp.configure dans Swift ou [FIRApp configure] dans Objective-C.

Dans votre application:didFinishLaunchingWithOptions , remplacez les appels à Fabric.with et startWithAPIKey par un appel à FirebaseApp :

SDK Fabric

Rapide

Fabric.with([Crashlytics.self])

Objectif c

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

SDK Firebase Crashlytics

Rapide

FirebaseApp.configure()

Objectif c

[FIRApp configure];

Raison du changement

L'utilisation des nouvelles méthodes pour initialiser Crashlytics est plus cohérente avec la façon dont les autres services Firebase sont initialisés.


Les méthodes crash et throwException sont supprimées.

Le nouveau SDK n'inclut plus les méthodes crash ou throwException . À la place, utilisez fatalError dans Swift ou un tableau vide dans Objective-C pour forcer un crash.

SDK Firebase Crashlytics

Rapide

// Force a test crash
fatalError()

Objectif c

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

Raison du changement

Différents types de plantages peuvent survenir pour diverses raisons, et ces méthodes ne spécifiaient pas clairement si les plantages résultants se produisaient pendant l'exécution ou dans le SDK natif de votre application.


La méthode sharedInstance s'appelle désormais crashlytics.

Le nouveau SDK n'inclut plus la méthode sharedInstance . Pour initialiser Crashlytics, utilisez plutôt crashlytics (lisez la documentation de référence pour Swift ou Objective-C pour plus d'informations). Dans le délégué de votre application, mettez à jour votre script d'initialisation:

SDK Fabric

Rapide

Crashlytics.sharedInstance()

Objectif c

[Crashlytics sharedInstance];

SDK Firebase Crashlytics

Rapide

Crashlytics.crashlytics()

Objectif c

[FIRCrashlytics crashlytics];

Raison du changement

Nous avons renommé la méthode getter d'instance pour qu'elle soit cohérente avec les autres SDK Firebase.


Crashlytics ne fait plus pivoter les identifiants lorsque l'identifiant publicitaire change.

Crashlytics utilise désormais des identifiants d'instance au lieu d'identifiants publicitaires pour identifier les instances de votre application et associer les données de vos utilisateurs à leurs appareils. Vous pouvez utiliser les ID d'instance pour aider vos utilisateurs à contrôler les données de leur application.

Raison du changement

L'utilisation des ID d'instance est cohérente avec les autres SDK Firebase. Vous pouvez désormais gérer uniformément vos données d'ID d'instance sur d'autres services Firebase.


setUserIdentifier est maintenant setUserID. setUserName et setUserEmail sont supprimés.

Auparavant, vous pouviez définir un nom ou un e-mail associé à un plantage à l'aide de setUserName et setUserEmail , mais ces méthodes ne seront plus définies. La nouvelle méthode préférée pour définir les ID de vos utilisateurs consiste à utiliser setUserID .

SDK Fabric

Rapide

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

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

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

Objectif c

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

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

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

SDK Firebase Crashlytics

Rapide

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

Objectif c

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

Raison du changement

Nous avons adopté le nom de méthode setUserID pour être cohérent avec les autres API Firebase et supprimé setUserName et setUserEmail pour décourager la journalisation des informations personnelles via Crashlytics.


CLSLogv et CLSNSLogv sont remplacés par des fonctions de journalisation.

Le nouveau SDK n'inclut plus les fonctions CLSLogv ou CLSNSLogv . Pour ajouter des messages de journal personnalisés , utilisez les nouvelles méthodes de journalisation de la bibliothèque Crashlytics . Notez que les nouvelles méthodes ne s'impriment plus sur stdout ou NSLog (nous vous recommandons d'écrire un wrapper si vous souhaitez conserver ce comportement).

SDK Fabric

Rapide

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

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

Objectif 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);

SDK Firebase Crashlytics

Rapide

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

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

Objectif c

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

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

Si vous avez utilisé CLS_LOG , ajoutez ce qui suit à un fichier d'en-tête pour continuer à obtenir les noms de fichier et les numéros de ligne dans les instructions de journal:

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

Raison du changement

Les nouvelles méthodes nécessitent des instances, ce qui facilite le test du code.


setCustomValue remplace setObjectValue, setIntValue, setFloatValue et setBoolValue.

Les méthodes de définition personnalisées ne sont plus incluses dans le nouveau SDK. Auparavant, vous pouviez utiliser les méthodes pour définir des paires clé / valeur à envoyer avec votre rapport d'erreur. Désormais, vous pouvez utiliser setCustomValue:forKey pour définir des paires clé / valeur pour tous les types de données.

SDK Fabric

Rapide

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")

Objectif 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"];

SDK Firebase Crashlytics

Rapide

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")

Objectif 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"];

Raison du changement

Le nouveau nom de méthode est unique à Crashlytics et indique clairement que Crashlytics n'est pas compatible avec les valeurs-clés.


recordCustomExceptionName: reason: frameArray: est remplacé par l'API du modèle d'exception.

Si votre application s'exécute dans un environnement non natif (par exemple, JavaScript ou Unity), vous pouvez utiliser l'API Exception Model pour signaler les métadonnées de plantage au format d'exception natif de votre application.

SDK Fabric

Rapide

let topFrame = CLSStackFrame () 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])

Objectif 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]];

SDK Firebase Crashlytics

Rapide

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)

Objectif 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],
];

Raison du changement

Cette fonctionnalité est demandée depuis longtemps et vous permet d'étendre Crashlytics sur d'autres plates-formes comme Unity, Flutter ou React Native.



CrashlyticsDelegate est remplacé par des méthodes distinctes pour gérer les rapports d'incident.

Vous pouvez désormais utiliser un nouvel ensemble de méthodes pour gérer les rapports d'incident:

  • didFinishLaunchingWithOptions est maintenant remplacé par le nouveau gestionnaire checkForUnsentReportsWithCompletion .

  • crashlyticsDidDetectReportForLastExecution est maintenant remplacé par didCrashDuringPreviousExecution . didCrashDuringPreviousExecution vous permet de détecter facilement les plantages qui se produisent lors de la dernière exécution de votre application.

  • crashlyticsCanUseBackgroundSessions est désormais défini de manière permanente sur true.

  • Nous ne prenons plus en charge l'inspection de l'objet CLSReport dans le délégué.

Par défaut, Crashlytics télécharge automatiquement les rapports d'erreur au démarrage, et vous pouviez auparavant appeler didFinishLaunchingWithOptions pour permettre à vos utilisateurs d' accepter les didFinishLaunchingWithOptions d' didFinishLaunchingWithOptions . Désormais, lorsque vous appelez setCrashlyticsCollectionEnabled=false pour désactiver les rapports automatiques de plantage, Crashlytics appelle checkForUnsentReportsWithCompletion , qui permet à vos utilisateurs de choisir d'envoyer ou non des rapports de plantage lorsque votre application plante. Vous pouvez ensuite appeler sendUnsentReports si l'utilisateur opte ou deleteUnsentReports si l'utilisateur se deleteUnsentReports .

Notez que vous pouvez également appeler sendUnsentReports et deleteUnsentReports dehors de checkForUnsentReportsWithCompletion . Par exemple, vous souhaiterez peut-être configurer ou désactiver de façon permanente les rapports d'erreur si vos utilisateurs vous ont donné une approbation générale ou une désapprobation pour envoyer des rapports d'erreur. Gardez à l'esprit que vous ne recevrez peut-être jamais de rapports d'erreur si votre application se bloque au début de son cycle de vie.

SDK Fabric

Rapide

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
  }
}

Objectif 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

SDK Firebase Crashlytics

Rapide

/* 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.
}

Objectif 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.
}

Raison du changement

Le nouvel ensemble de méthodes vous donne plus de contrôle sur le comportement de rapport d'incident de votre application. De plus, vous n'avez plus besoin de configurer CrashlyticsDelegate avant d'initialiser Crashlytics.


firebase_crashlytics_collection_enabled est remplacé par FirebaseCrashlyticsCollectionEnabled.

Lorsque vous définissez FirebaseCrashlyticsCollectionEnabled sur false dans votre Info.plist , Crashlytics arrête automatiquement d'envoyer des rapports d'erreur au démarrage. Après la première exécution de votre application, vous pouvez également désactiver le rapport d' setCrashlyticsCollectionEnabled définissant setCrashlyticsCollectionEnabled sur false dans votre Crashlytics.h , mais notez que setCrashlyticsCollectionEnabled remplace cet indicateur.

Désactivez la collecte automatique en remplaçant la clé firebase_crashlytics_collection_enabled dans votre Info.plist :

  • Clé: FirebaseCrashlyticsCollectionEnabled

  • Valeur: false

Après la première exécution de votre application, vous pouvez également désactiver la collecte automatique en ajoutant ce qui suit à votre Crashlytics.h :

SDK Firebase Crashlytics

Rapide

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

Objectif c

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

Raison du changement

Vous avez désormais plus de contrôle sur la façon dont Crashlytics gère les rapports d’incident non envoyés lorsque vous désactivez le rapport automatique des pannes. Après avoir défini FirebaseCrashlyticsCollectionEnabled sur false, vous pouvez appeler checkForUnsentReportsWithCompletion de n'importe où dans votre application et envoyer ou supprimer les rapports non envoyés, en fonction de ce que votre utilisateur choisit.


Désormais, Crashlytics utilise toujours des sessions en arrière-plan.

Auparavant, vous pouviez désactiver les sessions en arrière-plan si vous ne vouliez pas la prendre en charge dans votre application en définissant crashlyticsCanUseBackgroundSessions sur false. Désormais, crashlyticsCanUseBackgroundSessions est toujours défini sur true.

Raison du changement

Nous ne prenons plus en charge les versions iOS inférieures à 7.0 ou les versions macOS inférieures à OS X 10.9, qui ne prennent pas en charge les sessions en arrière-plan.


Crashlytics ne peut utiliser que les données collectées par Google Analytics.

Vous ne pouvez plus collecter de données avec Fabric Answers après la mise à niveau vers le SDK Firebase Crashlytics. Pour obtenir des métriques pour les utilisateurs et le fil d'Ariane sans plantage, utilisez plutôt Google Analytics. Notez que vos données Answers historiques ne peuvent pas migrer vers Firebase.

Consultez Commencer à utiliser Google Analytics pour savoir comment ajouter Google Analytics à votre application. Si vous avez déjà utilisé Fabric Answers, découvrez comment convertir vos événements Answers en événements Analytics .

Raison du changement

We now offer Google Analytics to help you get more insight into your crash data. With Analytics, you can continue gathering stats for your app in the Firebase console.

Next steps