Cette page fournit une aide au dépannage et des réponses aux questions fréquentes sur l'utilisation de Crashlytics. Si vous ne trouvez pas ce que vous cherchez ou si vous avez besoin d'aide, contactez l'assistance Firebase.
Sur cette page, vous trouverez des informations sur les types de thèmes suivants :
Dépannage général, y compris les questions sur l'affichage des données ou l'utilisation des données dans la console Firebase, ainsi que les questions sur les problèmes de régression.
Assistance spécifique à la plate-forme, y compris pour les questions concernant les plates-formes Apple, Android et Unity.
Assistance pour les intégrations, y compris les questions concernant BigQuery.
Dépannage général/Questions fréquentes
Différents formats (et parfois "variantes") pour certains problèmes dans le tableau Problèmes
Vous remarquerez peut-être deux formats différents pour les problèmes listés dans le tableau Problèmes de la console Firebase. Vous remarquerez peut-être également une fonctionnalité appelée "variantes" dans certains de vos problèmes. Voici pourquoi !
Début 2023, nous avons déployé un moteur d'analyse amélioré pour regrouper les événements, ainsi qu'une interface mise à jour et des fonctionnalités avancées pour les nouveaux problèmes (comme les variantes). Pour en savoir plus, consultez notre récent article de blog. Vous trouverez ci-dessous les points clés.
Crashlytics analyse tous les événements de votre application (comme les plantages, les erreurs non fatales et les ANR) et crée des groupes d'événements appelés problèmes. Tous les événements d'un problème ont un point de défaillance commun.
Pour regrouper les événements dans ces problèmes, le moteur d'analyse amélioré examine désormais de nombreux aspects de l'événement, y compris les frames de la trace de pile, le message d'exception, le code d'erreur et d'autres caractéristiques de plate-forme ou de type d'erreur.
Toutefois, au sein de ce groupe d'événements, les traces de pile menant à l'échec peuvent être différentes. Une autre trace de pile peut indiquer une autre cause première. Pour représenter cette différence potentielle au sein d'un problème, nous créons désormais des variantes au sein des problèmes. Chaque variante est un sous-groupe d'événements d'un problème ayant le même point de défaillance et une trace de pile similaire. Les variantes vous permettent de déboguer les traces de pile les plus courantes d'un problème et de déterminer si différentes causes sont à l'origine de l'échec.
Voici ce que vous constaterez avec ces améliorations :
Métadonnées repensées affichées dans la ligne du problème
Il est désormais plus facile de comprendre et de trier les problèmes dans votre application.Moins de problèmes en double
Un changement de numéro de ligne n'entraîne pas la création d'un nouveau problème.Débogage plus facile des problèmes complexes avec différentes causes
Utilisez des variantes pour déboguer les traces de pile les plus courantes d'un problème.Des alertes et des signaux plus utiles
Un nouveau problème correspond en fait à un nouveau bug.Recherche plus performante
Chaque problème contient davantage de métadonnées consultables, comme le type d'exception et le nom du package.
Voici comment ces améliorations sont déployées :
Lorsque nous recevons de nouveaux événements de votre application, nous vérifions s'ils correspondent à un problème existant.
En l'absence de correspondance, nous appliquerons automatiquement notre algorithme de regroupement d'événements plus intelligent à l'événement et créerons un problème avec la nouvelle conception des métadonnées.
Il s'agit de la première mise à jour majeure que nous apportons au regroupement des événements. Si vous avez des commentaires ou si vous rencontrez des problèmes, n'hésitez pas à nous en faire part en envoyant un rapport .
Journaux de fil d'Ariane introuvables
Si vous ne voyez pas de journaux de fil d'Ariane (iOS+ | Android | Flutter | Unity), nous vous recommandons de vérifier la configuration de votre application pour Google Analytics. Assurez-vous de remplir les conditions suivantes :
Vous avez activé Google Analytics dans votre projet Firebase.
Vous avez activé le partage de données pour Google Analytics. En savoir plus sur ce paramètre dans Gérer vos paramètres de partage des données Analytics
Vous avez ajouté à votre application le SDK Firebase pour Google Analytics : iOS+ | Android | Flutter | Unity.
Ce SDK doit être ajouté en plus du SDK Crashlytics.Vous utilisez les dernières versions du SDK Firebase pour tous les produits que vous utilisez dans votre application (iOS+ | Android | Flutter | Unity).
Pour les plates-formes Apple et les applications Android, vérifiez en particulier que vous utilisez au minimum la version suivante du SDK Firebase pour Google Analytics :
iOS+ : v6.3.1+ (v8.9.0+ pour macOS et tvOS) |Android : v17.2.3+ (BoM v24.7.1+) .
Je ne vois pas d'alertes de vitesse
Si vous ne voyez pas d'alertes de vélocité, assurez-vous d'utiliser les versions suivantes du SDK Crashlytics :
Vous ne voyez pas les métriques d'utilisation sans plantage (ou elles ne sont pas fiables)
Si vous ne voyez pas de métriques sans plantage (comme les utilisateurs et les sessions sans plantage) ou si les métriques ne sont pas fiables, vérifiez les points suivants :
Assurez-vous d'utiliser les versions suivantes du SDK Crashlytics :
Assurez-vous que vos paramètres de collecte de données n'ont pas d'incidence sur la qualité de vos métriques d'utilisation sans plantage :
Si vous activez les rapports avec consentement en désactivant les rapports d'erreur automatiques, les informations sur les plantages ne peuvent être envoyées à Crashlytics que par les utilisateurs qui ont explicitement accepté la collecte de données. L'exactitude des métriques sans plantage sera donc affectée, car Crashlytics ne dispose que des informations sur les plantages de ces utilisateurs ayant activé le partage (et non de tous vos utilisateurs). Cela signifie que vos métriques d'utilisation sans plantage peuvent être moins fiables et moins représentatives de la stabilité globale de votre application.
Si vous avez désactivé la collecte automatique des données, vous pouvez utiliser
sendUnsentReportspour envoyer les rapports mis en cache sur l'appareil à Crashlytics. Cette méthode envoie les données crash à Crashlytics, mais pas les données sessions. Les graphiques de la console affichent donc des valeurs faibles ou nulles pour les métriques sans plantage.
Comment le nombre d'utilisateurs n'ayant pas subi de plantage est-il calculé ?
Consultez Comprendre les métriques d'utilisation sans plantage.
Qui peut afficher, rédiger et supprimer des notes sur un problème ?
Les notes permettent aux membres du projet de commenter des problèmes spécifiques en posant des questions, en fournissant des informations sur l'état, etc.
Lorsqu'un membre du projet publie une note, l'adresse e-mail de son compte Google est indiquée. Cette adresse e-mail est visible, avec la note, par tous les membres du projet ayant accès à la note.
Vous trouverez ci-dessous la description de l'accès requis pour afficher, écrire et supprimer des notes :
Les membres du projet disposant de l'un des rôles suivants peuvent afficher et supprimer les notes existantes, et en rédiger de nouvelles sur un problème.
Les membres du projet disposant de l'un des rôles suivants peuvent consulter les notes publiées sur un problème, mais ne peuvent pas en supprimer ni en rédiger.
- Lecteur de projet, Lecteur Firebase, Lecteur Quality ou Lecteur Crashlytics
Qu'est-ce qu'un problème régressé ?
Un problème a régressé lorsque vous l'avez déjà fermé, mais qu'un nouveau rapport indique qu'il s'est reproduit.Crashlytics Crashlytics rouvre automatiquement ces problèmes de régression afin que vous puissiez les résoudre de manière appropriée pour votre application.
Voici un exemple de scénario qui explique comment Crashlytics catégorise un problème comme une régression :
- Pour la première fois, Crashlytics reçoit un rapport d'erreur concernant l'erreur "A". Crashlytics ouvre un problème correspondant à ce plantage (problème A).
- Vous corrigez rapidement ce bug, clôturez le problème A, puis publiez une nouvelle version de votre application.
- Crashlytics reçoit un autre signalement concernant le problème A après que vous l'avez clôturé.
- Si le rapport provient d'une version de l'application que Crashlytics connaissait lorsque vous avez clôturé le problème (c'est-à-dire que la version avait envoyé un rapport d'erreur pour n'importe quelle erreur), Crashlytics ne considérera pas le problème comme une régression. Le problème restera clos.
- Si le rapport provient d'une version de l'application qui Crashlytics n'avait pas connaissance du problème lorsque vous l'avez clôturé (c'est-à-dire que la version n'avait jamais envoyé aucun rapport d'erreur pour une erreur quelconque), Crashlytics considère que le problème est en régression et le rouvre.
Lorsqu'un problème régresse, nous envoyons une alerte de détection de régression et ajoutons un signal de régression au problème pour vous informer que Crashlytics l'a rouvert. Si vous ne souhaitez pas qu'un problème soit rouvert en raison de notre algorithme de régression, mettez-le en sourdine au lieu de le fermer.
Pourquoi vois-je des problèmes de régression pour les anciennes versions de l'application ?
Si un rapport provient d'une ancienne version de l'application qui n'a jamais envoyé de rapports d'erreur lorsque vous avez clôturé le problème, Crashlytics considère que le problème a régressé et le rouvre.
Cela peut se produire dans les cas suivants : vous avez corrigé un bug et publié une nouvelle version de votre application, mais certains utilisateurs utilisent encore des versions antérieures qui ne contiennent pas la correction du bug. Si, par hasard, l'une de ces versions antérieures n'a jamais envoyé de rapports d'erreur lorsque vous avez fermé le problème, et que ces utilisateurs commencent à rencontrer le bug, ces rapports d'erreur déclencheraient un problème de régression.
Si vous ne souhaitez pas qu'un problème soit rouvert en raison de notre algorithme de régression, "désactivez" le problème au lieu de le fermer.
Assistance spécifique à la plate-forme
Les sections suivantes fournissent une assistance pour le dépannage et les questions fréquentes spécifiques à chaque plate-forme : iOS+ | Android | Unity.
Compatibilité avec les plates-formes Apple
Fichiers dSYM manquants/non importés
Pour importer les dSYM de votre projet et obtenir une sortie détaillée, vérifiez les points suivants :
Assurez-vous que la phase de compilation de votre projet contient le script d'exécution Crashlytics, qui permet à Xcode d'importer les fichiers dSYM de votre projet au moment de la compilation (consultez Initialiser Crashlytics pour savoir comment ajouter le script). Après avoir mis à jour votre projet, forcez un plantage et vérifiez qu'il apparaît dans le tableau de bord Crashlytics.
Si une alerte "dSYM manquant" s'affiche dans la console Firebase, vérifiez dans Xcode que les dSYM sont correctement générés pour la compilation.
Si Xcode produit correctement des fichiers dSYM et que vous constatez toujours qu'il en manque, il est probable que l'outil de script d'exécution soit bloqué lors de l'importation des fichiers dSYM. Dans ce cas, essayez les solutions suivantes :
Assurez-vous d'utiliser la dernière version de Crashlytics.
Importez manuellement les fichiers dSYM manquants :
- Option 1 : Utilisez l'option "Glisser-déposer" basée sur la console dans l'onglet dSYMs pour importer une archive ZIP contenant les fichiers dSYM manquants.
- Option 2 : Utilisez le script
upload-symbolspour importer les fichiers dSYM manquants pour les UUID fournis dans l'onglet Fichiers dSYM.
Si des fichiers dSYM continuent de manquer ou si les importations échouent toujours, contactez l'assistance Firebase et veillez à inclure vos journaux.
Les plantages sont mal symbolisés
Si vos traces de pile semblent mal décodées, vérifiez les points suivants :
Si les frames de la bibliothèque de votre application ne contiennent pas de références au code de votre application, assurez-vous que
n'est pas défini comme indicateur de compilation.-fomit-frame-pointerSi vous voyez plusieurs frames
(Missing)pour la bibliothèque de votre application, vérifiez si des dSYM optionnels sont indiqués comme manquants (pour la version concernée de l'application) dans l'onglet Crashlytics dSYM de la console Firebase. Si c'est le cas, suivez la procédure de dépannage "Alerte de fichier dSYM manquant" dans la FAQ sur les fichiers dSYM manquants ou non importés sur cette page. Notez que l'importation de ces fichiers dSYM ne permettra pas de symboliser les plantages qui se sont déjà produits, mais elle contribuera à garantir la symbolisation des futurs plantages.
Puis-je utiliser Crashlytics pour macOS ou tvOS ?
Oui, vous pouvez implémenter Crashlytics dans les projets macOS et tvOS. Veillez à inclure la version 8.9.0 ou ultérieure du SDK Firebase pour Google Analytics afin que les plantages aient accès aux métriques collectées par Google Analytics (utilisateurs sans plantage, dernière version, alertes de vélocité et journaux de breadcrumbs).
Puis-je utiliser Crashlytics dans un projet Firebase comportant plusieurs applications sur différentes plates-formes Apple ?
Vous pouvez désormais signaler les plantages de plusieurs applications dans un même projet Firebase, même si les applications sont conçues pour différentes plates-formes Apple (par exemple, iOS, tvOS et Mac Catalyst). Auparavant, vous deviez séparer les applications dans des projets Firebase individuels si elles contenaient le même ID de bundle.
Compatibilité avec Android
Pourquoi les erreurs ANR ne sont-elles signalées que pour Android 11 et versions ultérieures ?
Crashlytics est compatible avec le signalement des erreurs ANR pour les applications Android sur les appareils équipés d'Android 11 ou version ultérieure. L'API sous-jacente que nous utilisons pour collecter les ANR (getHistoricalProcessExitReasons) est plus fiable que les approches basées sur SIGQUIT ou le watchdog. Cette API n'est disponible que sur les appareils Android 11 et versions ultérieures.
Pourquoi certaines erreurs ANR ne sont-elles pas associées à des BuildId ?
Si certains de vos ANR ne comportent pas de BuildId, procédez comme suit :
Assurez-vous d'utiliser une version à jour du SDK Android Crashlytics et du plug-in Gradle Crashlytics.
Si vous ne voyez pas les
BuildIdpour Android 11 et certaines ANR Android 12, il est probable que vous utilisiez un SDK ou un plug-in Gradle obsolètes, ou les deux. Pour collecter correctement lesBuildIdpour ces ANR, vous devez utiliser les versions suivantes :- Crashlytics SDK Android v18.3.5+ (Firebase BoM v31.2.2+)
- Plug-in Gradle 2.9.4 ou version ultérieureCrashlytics
Vérifiez si vous utilisez un emplacement non standard pour vos bibliothèques partagées.
Si vous ne trouvez pas les
BuildIdde vos bibliothèques partagées, il est probable que vous n'utilisiez pas l'emplacement standard par défaut pour les bibliothèques partagées. Dans ce cas, il est possible que Crashlytics ne puisse pas localiser lesBuildIdassociés. Nous vous recommandons d'utiliser l'emplacement standard pour les bibliothèques partagées.Assurez-vous de ne pas supprimer les
BuildIdpendant le processus de compilation.Notez que les conseils de dépannage suivants s'appliquent à la fois aux ANR et aux plantages natifs.
Vérifiez si les
BuildIdexistent en exécutantreadelf -nsur vos binaires. Si lesBuildIdsont absents, ajoutez-Wl,--build-idaux indicateurs de votre système de compilation.Vérifiez que vous ne supprimez pas involontairement les
BuildIdafin de réduire la taille de votre fichier APK.Si vous conservez des versions dépouillées et non dépouillées d'une bibliothèque, veillez à pointer vers la bonne version dans votre code.
Différences entre les rapports ANR dans le tableau de bord Crashlytics et la Google Play Console
Il peut y avoir une différence entre le nombre d'ANR sur Google Play et sur Crashlytics. Cela est normal en raison de la différence dans le mécanisme de collecte et de création de rapports sur les données ANR. Crashlytics signale les ANR au prochain démarrage de l'application, tandis qu'Android Vitals envoie les données ANR après l'ANR.
De plus, Crashlytics n'affiche que les ANR qui se produisent sur les appareils exécutant Android 11 ou version ultérieure, contrairement à Google Play qui affiche les ANR des appareils pour lesquels les services Google Play et le consentement à la collecte de données sont acceptés.
Pourquoi des plantages de fichiers .kt sont-ils signalés comme des problèmes .java ?
Lorsqu'une application utilise un obfuscateur qui n'expose pas l'extension de fichier, Crashlytics génère chaque problème avec une extension de fichier .java par défaut.
Pour que Crashlytics puisse générer des problèmes avec la bonne extension de fichier, assurez-vous que votre application utilise la configuration suivante :
- Utilise Android Gradle 4.2.0 ou version ultérieure
- Utilise R8 avec l'obscurcissement activé. Pour mettre à jour votre application vers R8, consultez cette documentation.
Notez qu'après la mise à jour vers la configuration décrite ci-dessus, vous verrez peut-être de nouveaux problèmes .kt qui sont des doublons de problèmes .java existants. Pour en savoir plus sur cette situation, consultez les questions fréquentes.
Pourquoi des problèmes .kt s'affichent-ils ? Il s'agit de doublons de problèmes .java existants.
À partir de mi-décembre 2021, Crashlytics la compatibilité avec les applications utilisant Kotlin sera améliorée.
Jusqu'à récemment, les obfuscateurs disponibles n'exposaient pas l'extension de fichier. Par conséquent, Crashlytics générait chaque problème avec une extension de fichier .java par défaut.
Toutefois, à partir d'Android Gradle 4.2.0, R8 est compatible avec les extensions de fichier.
Grâce à cette mise à jour, Crashlytics peut désormais déterminer si chaque classe utilisée dans l'application est écrite en Kotlin et inclure le nom de fichier correct dans la signature du problème. Les plantages sont désormais correctement attribués aux fichiers .kt (le cas échéant) si votre application est configurée comme suit :
- Votre application utilise Android Gradle 4.2.0 ou version ultérieure.
- Votre application utilise R8 avec l'obscurcissement activé.
Étant donné que les nouveaux plantages incluent désormais la bonne extension de fichier dans la signature du problème, il est possible que de nouveaux problèmes .kt soient en fait des doublons de problèmes existants portant le libellé .java. Dans la console Firebase, nous essayons d'identifier les nouveaux problèmes .kt qui pourraient être des doublons de problèmes existants portant le libellé .java et de vous en informer.
Aucun plantage avec Dexguard
Si l'exception suivante s'affiche, cela signifie probablement que vous utilisez une version de DexGuard incompatible avec le SDK Firebase Crashlytics :
java.lang.IllegalArgumentException: Transport backend 'cct' is not registered
Cette exception ne plante pas votre application, mais l'empêche d'envoyer des rapports d'erreur. Pour résoudre ce problème, procédez comme suit :
Assurez-vous d'utiliser la dernière version 8.x de DexGuard. La dernière version contient les règles requises par le SDK Firebase Crashlytics.
Si vous ne souhaitez pas modifier votre version de DexGuard, essayez d'ajouter la ligne suivante à vos règles d'obscurcissement (dans votre fichier de configuration DexGuard) :
-keepresourcexmlelements manifest/application/service/meta-data@value=cct
Comment passer au plug-in Gradle v3 ?Crashlytics
La dernière version du plug-in Gradle Crashlytics est une version majeure (v3.0.0) qui modernise le SDK en abandonnant la compatibilité avec les versions antérieures de Gradle et du plug-in Android Gradle. De plus, les modifications apportées à cette version résolvent les problèmes liés à AGP v8.1+ et améliorent la compatibilité avec les applications natives et les builds personnalisés.
Conditions minimales requises
Le plug-in Gradle v3 de Crashlytics présente les exigences minimales suivantes :
Plug-in Android Gradle 8.1+
Mettez à niveau ce plug-in à l'aide de l'assistant de mise à niveau du plug-in Android Gradle sur la dernière version d'Android Studio.Plug-in Gradle 4.4.1+ de Firebase
Mettez à niveau ce plug-in en spécifiant la dernière version dans le fichier de compilation Gradle de votre projet, comme suit :google-services
Kotlin
plugins { id("com.android.application") version "8.1.4" apply false id("com.google.gms.google-services") version "4.4.4" apply false ... }
Groovy
plugins { id 'com.android.application' version '8.1.4' apply false id 'com.google.gms.google-services' version '4.4.4' apply false ... }
Modifications apportées à l'extension Crashlytics
Avec la version 3 du plug-in Gradle Crashlytics, l'extension Crashlytics présente les modifications importantes suivantes :
Suppression de l'extension du bloc Android
defaultConfig. Vous devez plutôt configurer chaque variante.Suppression du champ obsolète
mappingFile. À la place, le fichier de mappage fusionné est désormais fourni automatiquement.Suppression du champ obsolète
strippedNativeLibsDir. Vous devez plutôt utiliserunstrippedNativeLibsDirpour toutes les bibliothèques natives.Le champ
unstrippedNativeLibsDirest désormais cumulatif.Afficher un exemple avec plusieurs répertoires
buildTypes { release { configure<CrashlyticsExtension> { nativeSymbolUploadEnabled = true unstrippedNativeLibsDir = file("MY/NATIVE/LIBS") } } productFlavors { flavorDimensions += "feature" create("basic") { dimension = "feature" // ... } create("featureX") { dimension = "feature" configure<CrashlyticsExtension> { unstrippedNativeLibsDir = file("MY/FEATURE_X/LIBS") } } } }
La tâche
n'importera que les symboles dansuploadCrashlyticsSymbolFilesBasicReleaseMY/NATIVE/LIBS, tandis que importera les symboles dansuploadCrashlyticsSymbolFilesFeatureXReleaseMY/NATIVE/LIBSetMY/FEATURE_X/LIBS.Le champ de clôture
symbolGeneratora été remplacé par deux nouveaux champs de premier niveau :symbolGeneratorType, une chaîne de caractères"breakpad"(par défaut) ou"csym".breakpadBinary, fichier de remplacement binairedump_symslocal.
Exemple de mise à niveau de l'extension
Kotlin
| Avant |
buildTypes { release { configure<CrashlyticsExtension> { // ... symbolGenerator( closureOf<SymbolGenerator> { symbolGeneratorType = "breakpad" breakpadBinary = file("/PATH/TO/BREAKPAD/DUMP_SYMS") } ) } } } |
| Maintenant dans la version 3 |
buildTypes { release { configure<CrashlyticsExtension> { // ... symbolGeneratorType = "breakpad" breakpadBinary = file("/PATH/TO/BREAKPAD/DUMP_SYMS") } } } |
Groovy
| Avant |
buildTypes { release { firebaseCrashlytics { // ... symbolGenerator { breakpad { binary file("/PATH/TO/BREAKPAD/DUMP_SYMS") } } } } } |
| Maintenant dans la version 3 |
buildTypes { release { firebaseCrashlytics { // ... symbolGeneratorType "breakpad" breakpadBinary file("/PATH/TO/BREAKPAD/DUMP_SYMS") } } } |
Assistance spécifique à Android NDK
Différences entre les traces de pile NDK dans le tableau de bord Crashlytics et logcat
Les chaînes d'outils LLVM et GNU ont des valeurs par défaut et des traitements distincts pour le segment en lecture seule des binaires de votre application, ce qui peut générer des traces de pile incohérentes dans la console Firebase. Pour atténuer ce problème, ajoutez les indicateurs d'éditeur de liens suivants à votre processus de compilation :
Si vous utilisez l'éditeur de liens
lldde la chaîne d'outils LLVM, ajoutez :-Wl,--no-rosegmentSi vous utilisez l'éditeur de liens
ld.goldde la chaîne d'outils GNU, ajoutez :-Wl,--rosegment
Si vous constatez toujours des incohérences dans la trace de pile (ou si aucun des indicateurs n'est pertinent pour votre chaîne d'outils), essayez plutôt d'ajouter les éléments suivants à votre processus de compilation :
-fno-omit-frame-pointerComment utiliser mon propre fichier binaire de générateur de fichiers de symboles Breakpad pour le NDK ?
Le plug-in Crashlytics regroupe un générateur de fichiers de symboles Breakpad personnalisés.
Si vous préférez utiliser votre propre binaire pour générer des fichiers de symboles Breakpad (par exemple, si vous préférez compiler tous les exécutables natifs de votre chaîne de compilation à partir de la source), utilisez la propriété d'extension symbolGeneratorBinary facultative pour spécifier le chemin d'accès à l'exécutable.
Vous pouvez spécifier le chemin d'accès au fichier binaire du générateur de fichiers de symboles Breakpad de deux manières :
Option 1 : Spécifier le chemin d'accès via l'extension
firebaseCrashlyticsdans votre fichierbuild.gradleAjoutez le code ci-dessous à votre fichier
build.gradle.ktsau niveau de l'application :Plug-in Gradle v3.0.0 ou version ultérieure
android { buildTypes { release { configure<CrashlyticsExtension> { nativeSymbolUploadEnabled = true // Add these optional fields to specify the path to the executable symbolGeneratorType = "breakpad" breakpadBinary = file("/PATH/TO/BREAKPAD/DUMP_SYMS") } } } }
versions antérieures du plug-in
android { // ... buildTypes { // ... release { // ... firebaseCrashlytics { // existing; required for either symbol file generator nativeSymbolUploadEnabled true // Add this optional new block to specify the path to the executable symbolGenerator { breakpad { binary file("/PATH/TO/BREAKPAD/DUMP_SYMS") } } } } }
Option 2 : Spécifiez le chemin d'accès via une ligne de propriété dans votre fichier de propriétés Gradle.
Vous pouvez utiliser la propriété
com.google.firebase.crashlytics.breakpadBinarypour spécifier le chemin d'accès à l'exécutable.Vous pouvez mettre à jour manuellement votre fichier de propriétés Gradle ou le mettre à jour via la ligne de commande. Par exemple, pour spécifier le chemin d'accès via la ligne de commande, utilisez une commande comme celle-ci :
./gradlew -Pcom.google.firebase.crashlytics.symbolGenerator=breakpad \ -Pcom.google.firebase.crashlytics.breakpadBinary=/PATH/TO/BREAKPAD/DUMP_SYMS \ app:assembleRelease app:uploadCrashlyticsSymbolFileRelease
Crashlytics est-il compatible avec armeabi ?
Le NDK Firebase Crashlytics n'est pas compatible avec ARMv5 (armeabi). La compatibilité avec cette ABI a été supprimée dans NDK r17.
Assistance Unity
Afficher les traces de pile non symbolisées pour les applications Android dans le tableau de bord Crashlytics
Si vous utilisez IL2CPP Unity et que vous voyez des traces de pile non symbolisées, essayez ce qui suit :
Assurez-vous d'utiliser la version 8.6.1 ou ultérieure du SDK Unity Crashlytics.
Assurez-vous d'être configuré pour exécuter la commande
crashlytics:symbols:uploadde la CLI Firebase afin de générer et d'importer votre fichier de symboles.Vous devez exécuter cette commande CLI chaque fois que vous créez un build de version ou tout build pour lequel vous souhaitez afficher des traces de pile symbolisées dans la console Firebase. Pour en savoir plus, consultez Obtenir des rapports d'erreur lisibles.
Crashlytics peut-il être utilisé avec des applications qui utilisent IL2CPP ?
Oui, Crashlytics peut afficher des traces de pile symbolisées pour vos applications qui utilisent IL2CPP. Cette fonctionnalité est disponible pour les applications publiées sur les plates-formes Android ou Apple. Procédez comme suit :
Assurez-vous d'utiliser la version 8.6.0 ou ultérieure du SDK Crashlytics Unity.
Effectuez les tâches nécessaires pour votre plate-forme :
Pour les applications de la plate-forme Apple : aucune action particulière n'est requise. Pour les applications de la plate-forme Apple, le plug-in Firebase Unity Editor configure automatiquement votre projet Xcode pour importer les symboles.
Pour les applications Android : assurez-vous d'être configuré pour exécuter la commande
crashlytics:symbols:uploadde la CLI Firebase afin de générer et d'importer votre fichier de symboles.Vous devez exécuter cette commande CLI chaque fois que vous créez un build de version ou tout build pour lequel vous souhaitez afficher des traces de pile symbolisées dans la console Firebase. Pour en savoir plus, consultez Obtenir des rapports d'erreur lisibles.
Signaler les exceptions non détectées comme fatales
Crashlytics peut signaler les exceptions non détectées comme fatales (à partir de la version 10.4.0 du SDK Unity). Les questions fréquentes suivantes vous aideront à comprendre la logique et les bonnes pratiques d'utilisation de cette fonctionnalité.
Pourquoi une application doit-elle signaler les exceptions non détectées comme fatales ?
En signalant les exceptions non détectées comme fatales, vous obtenez une indication plus réaliste des exceptions qui peuvent rendre le jeu injouable, même si l'application continue de s'exécuter.
Notez que si vous commencez à signaler les erreurs fatales, le pourcentage d'utilisateurs sans plantage diminuera probablement, mais la métrique CFU sera plus représentative de l'expérience des utilisateurs finaux avec votre application.
Quelles exceptions seront signalées comme fatales ?
Pour que Crashlytics signale une exception non détectée comme fatale, les deux conditions suivantes doivent être remplies :
Lors de l'initialisation dans votre application, la propriété
ReportUncaughtExceptionsAsFataldoit être définie surtrue.Votre application (ou une bibliothèque incluse) génère une exception qui n'est pas interceptée. Une exception créée, mais non déclenchée, n'est pas considérée comme non interceptée.
Après avoir activé le signalement des exceptions non détectées en tant qu'erreurs fatales, j'ai maintenant de nombreuses nouvelles erreurs fatales. Comment gérer correctement ces exceptions ?
Lorsque vous commencez à recevoir des rapports sur vos exceptions non interceptées en tant qu'erreurs fatales, voici quelques options pour gérer ces exceptions non interceptées :
- Réfléchissez à la manière dont vous pouvez commencer à intercepter et à gérer ces exceptions non interceptées.
- Envisagez différentes options pour consigner les exceptions dans la console de débogage Unity et dans Crashlytics.
Intercepter et gérer les exceptions générées
Les exceptions sont créées et générées pour refléter les états inattendus ou exceptionnels. Pour résoudre les problèmes reflétés par une exception générée, il faut ramener le programme à un état connu (processus appelé gestion des exceptions).
Il est recommandé d'intercepter et de gérer toutes les exceptions prévues, sauf si le programme ne peut pas revenir à un état connu.
Pour contrôler les types d'exceptions interceptées et gérées par quel code, encapsulez le code susceptible de générer une exception dans un bloc try-catch.
Assurez-vous que les conditions des instructions catch sont aussi précises que possible pour gérer correctement les exceptions spécifiques.
Enregistrer les exceptions dans Unity ou Crashlytics
Il existe plusieurs façons d'enregistrer les exceptions dans Unity ou Crashlytics pour vous aider à déboguer le problème.
Lorsque vous utilisez Crashlytics, voici les deux options les plus courantes et recommandées :
Option 1 : Imprimer dans la console Unity, mais ne pas signaler à Crashlytics, pendant le développement ou le dépannage
- Affichez le contenu de l'exception dans la console Unity à l'aide de
Debug.Log(exception),Debug.LogWarning(exception)etDebug.LogError(exception), qui n'affichent pas à nouveau l'exception.
- Affichez le contenu de l'exception dans la console Unity à l'aide de
Option 2 : Importez les données dans Crashlytics pour obtenir des rapports consolidés dans le tableau de bord Crashlytics dans les situations suivantes :
- Si une exception mérite d'être consignée pour déboguer un éventuel événement Crashlytics ultérieur, utilisez
Crashlytics.Log(exception.ToString()). - Si une exception doit toujours être signalée à Crashlytics même si elle a été interceptée et gérée, utilisez
Crashlytics.LogException(exception)pour la consigner en tant qu'événement non fatal.
- Si une exception mérite d'être consignée pour déboguer un éventuel événement Crashlytics ultérieur, utilisez
Toutefois, si vous souhaitez signaler manuellement un événement fatal à Unity Cloud Diagnostics, vous pouvez utiliser Debug.LogException. Cette option imprime l'exception dans la console Unity comme l'option 1, mais elle génère également l'exception (qu'elle ait déjà été générée ou interceptée ou non). Il génère l'erreur de manière non locale. Cela signifie que même un Debug.LogException(exception) environnant avec des blocs try-catch génère toujours une exception non interceptée.
Par conséquent, appelez Debug.LogException si et seulement si vous souhaitez effectuer toutes les opérations suivantes :
- Pour imprimer l'exception dans la console Unity.
- Pour importer l'exception dans Crashlytics en tant qu'événement fatal.
- Pour lever l'exception, faites en sorte qu'elle soit traitée comme une exception non détectée et qu'elle soit signalée à Unity Cloud Diagnostics.
Notez que si vous souhaitez imprimer une exception détectée dans la console Unity et l'importer dans Crashlytics en tant qu'événement non fatal, procédez plutôt comme suit :
try
{
methodThatThrowsMyCustomExceptionType();
}
catch(MyCustomExceptionType exception)
{
// Print the exception to the Unity console at the error level.
Debug.LogError(exception);
// Upload the exception to Crashlytics as a non-fatal event.
Crashlytics.LogException(exception); // not Debug.LogException
//
// Code that handles the exception
//
}
Assistance pour les intégrations
L'application utilise également le SDK Google Mobile Ads, mais ne plante pas.
Si votre projet utilise Crashlytics avec le SDK Google Mobile Ads, il est probable que les outils de signalement des plantages interfèrent lors de l'enregistrement des gestionnaires d'exceptions. Pour résoudre le problème, désactivez les rapports d'erreur dans le SDK Mobile Ads en appelant disableSDKCrashReporting.
Où se trouve mon ensemble de données BigQuery ?
Firebase exporte les données vers l'emplacement de l'ensemble de données que vous avez sélectionné lorsque vous avez configuré l'exportation des données vers BigQuery.
Cet emplacement s'applique à l'ensemble de données Crashlytics et à l'ensemble de données des sessions Firebase (si l'exportation des données de sessions est activée).
Cet emplacement ne s'applique qu'aux données exportées dans BigQuery. Il n'a aucune incidence sur l'emplacement des données stockées pour être utilisées dans le tableau de bord Crashlytics de la console Firebase ou dans Android Studio.
Une fois qu'un ensemble de données a été créé, son emplacement ne peut plus être modifié. Toutefois, vous pouvez le copier dans un autre emplacement ou le déplacer (recréer) manuellement dans un autre emplacement. Pour en savoir plus, consultez Modifier l'emplacement des exportations existantes.
Comment passer à la nouvelle infrastructure d'exportation pour BigQuery ?
À la mi-octobre 2024, Crashlytics a lancé une nouvelle infrastructure pour l'exportation par lot des données Crashlytics vers BigQuery.
Si vous avez activé l'exportation par lot après octobre 2024, votre projet Firebase utilise automatiquement la nouvelle infrastructure d'exportation. Aucune action n'est requise.
Si vous avez activé l'exportation par lot avant ou pendant octobre 2024, consultez les informations de ces questions fréquentes pour déterminer si vous devez prendre des mesures.
Tous les projets Firebase seront automatiquement migrés vers la nouvelle infrastructure d'exportation par lot à partir du 9 janvier 2026. Vous pouvez effectuer la mise à niveau avant cette date, mais assurez-vous que vos tables de lots BigQuery remplissent les conditions préalables pour la mise à niveau.
Vous pouvez migrer vers la nouvelle infrastructure, mais assurez-vous que vos tables par lot BigQuery répondent aux conditions préalables à la migration.
Déterminer si vous utilisez la nouvelle infrastructure
Si vous avez activé l'exportation par lot mi-octobre 2024 ou après, votre projet Firebase utilise automatiquement la nouvelle infrastructure d'exportation.
Pour vérifier l'infrastructure utilisée par votre projet :
Accédez à la console Google Cloud. Si votre configuration de transfert de données est libellée Firebase Crashlytics with Multi-Region Support, cela signifie que votre projet utilise la nouvelle infrastructure d'exportation.
Différences importantes entre l'ancienne et la nouvelle infrastructure d'exportation
La nouvelle infrastructure est compatible avec les emplacements d'ensembles de données Crashlytics en dehors des États-Unis.
Si vous avez activé l'exportation avant la mi-octobre 2024 et que vous avez migré vers la nouvelle infrastructure d'exportation, vous pouvez désormais modifier l'emplacement d'exportation des données (facultatif).
L'exportation a été activée mi-octobre 2024 ou plus tard : lors de la configuration, vous avez été invité à sélectionner un emplacement pour l'exportation des données.
La nouvelle infrastructure n'est pas compatible avec le remplissage des données antérieures à l'activation de l'exportation.
L'ancienne infrastructure permettait le remplissage jusqu'à 30 jours avant la date à laquelle vous avez activé l'exportation.
La nouvelle infrastructure permet d'effectuer des backfills jusqu'aux 30 derniers jours ou jusqu'à la date la plus récente à laquelle vous avez activé l'exportation vers BigQuery (selon la date la plus récente).
La nouvelle infrastructure nomme les tables de traitement par lot BigQuery à l'aide des identifiants définis pour vos applications Firebase dans votre projet Firebase.
L'ancienne infrastructure écrivait les données dans des tables par lot dont les noms étaient basés sur les ID de bundle ou les noms de package dans le binaire de votre application.
La nouvelle infrastructure écrit les données dans des tables par lot dont les noms sont basés sur les ID de bundle ou les noms de package définis pour vos applications Firebase enregistrées dans votre projet Firebase.
Étape 1 : Prérequis pour la mise à niveau
Vérifiez que vos tables par lot BigQuery existantes utilisent des identifiants correspondant aux ID de bundle ou aux noms de package définis pour vos applications Firebase enregistrées dans votre projet Firebase. Si ce n'est pas le cas, vous risquez de rencontrer des problèmes avec les données de votre lot exporté. La plupart des projets seront dans un état approprié et compatible, mais il est important de vérifier avant de mettre à niveau.
Vous trouverez toutes les applications Firebase enregistrées dans votre projet Firebase dans la console Firebase : accédez à Paramètres du projet, puis faites défiler la page jusqu'à la fiche Vos applications pour afficher toutes vos applications Firebase et leurs informations.settings
Vous trouverez tous vos tableaux de lots BigQuery sur la page BigQuery de la console Google Cloud.
Par exemple, voici des états idéaux dans lesquels vous ne rencontrerez aucun problème lors de la mise à niveau :
Vous disposez d'une table de lot nommée
com_yourcompany_yourproject_IOSet d'une application Firebase iOS+ avec l'ID de bundlecom.yourcompany.yourprojectenregistrée dans votre projet Firebase.Vous disposez d'une table par lot nommée
com_yourcompany_yourproject_ANDROIDet d'une application Android Firebase avec le nom de packagecom.yourcompany.yourprojectenregistrée dans votre projet Firebase.
Si vous avez des noms de tables par lot qui ne correspondent pas aux identifiants définis pour vos applications Firebase enregistrées, suivez les instructions plus loin sur cette page avant de mettre à niveau manuellement ou avant le 9 janvier 2026 pour éviter toute interruption de votre exportation par lot.
Étape 2 : Mettre à niveau manuellement vers la nouvelle infrastructure
Si vous avez activé l'exportation par lot avant la mi-octobre 2024, vous pouvez passer manuellement à la nouvelle infrastructure en désactivant, puis en réactivant l'exportation des données Crashlytics dans la console Firebase.
Voici la procédure détaillée :
Dans la consoleFirebase, accédez à la page Intégrations.
Sur la fiche BigQuery, cliquez sur Gérer.
Désactivez le curseur Crashlytics pour désactiver l'exportation. Lorsque vous y êtes invité, confirmez que vous souhaitez arrêter l'exportation des données.
Réactivez immédiatement l'exportation en appuyant de nouveau sur le bouton Crashlytics. Lorsque vous y êtes invité, confirmez que vous souhaitez exporter les données.
L'exportation de vos données Crashlytics vers BigQuery utilise désormais la nouvelle infrastructure d'exportation.
Le nom de votre table par lot existante ne correspond pas à l'identifiant de votre application Firebase
Si le nom de votre table par lot existante ne correspond pas à l'ID de bundle ni au nom de package définis pour votre application Firebase enregistrée, développez cette section et implémentez l'une des options pour éviter toute interruption de vos données par lot exportées.
Si vous avez des tables par lot BigQuery existantes dans cet état, cela signifie qu'elles ne sont pas compatibles avec la nouvelle infrastructure d'exportation par lot vers BigQuery de Firebase. Notez que tous les projets Firebase seront automatiquement migrés vers la nouvelle infrastructure d'exportation à partir du 9 janvier 2026.
Suivez les conseils de cette section avant de procéder à la mise à niveau manuelle ou avant le 9 janvier 2026 pour éviter toute interruption de l'exportation par lot de vos données Crashlytics vers BigQuery.
Accéder aux instructions pour éviter les interruptions
Comprendre comment l'infrastructure d'exportation utilise des identifiants pour écrire des données dans les tables BigQuery
Voici comment les deux infrastructures d'exportation écrivent les données Crashlytics dans les tables de traitement par lot BigQuery :
Ancienne infrastructure d'exportation : écrit les données dans une table dont le nom est basé sur l'ID du bundle ou le nom du package dans le fichier binaire de votre application.
Nouvelle infrastructure d'exportation : écrit les données dans une table dont le nom est basé sur l'ID de bundle ou le nom de package défini pour votre application Firebase enregistrée dans votre projet Firebase.
Malheureusement, il arrive que l'ID de bundle ou le nom du package dans le binaire de votre application ne corresponde pas à l'ID de bundle ou au nom du package défini pour votre application Firebase enregistrée dans votre projet Firebase. Cela se produit généralement si un utilisateur n'a pas saisi l'identifiant réel lors de l'enregistrement de l'application.
Que se passe-t-il si ce problème n'est pas résolu avant la mise à niveau ?
Si les identifiants de ces deux emplacements ne correspondent pas, voici ce qui se passe après la mise à niveau vers la nouvelle infrastructure d'exportation :
Vos données Crashlytics commenceront à être écrites dans une nouvelle table par lot BigQuery, c'est-à-dire une nouvelle table dont le nom est basé sur l'ID de bundle ou le nom de package défini pour votre application Firebase enregistrée dans votre projet Firebase.
Les données ne seront plus écrites dans les tables "anciennes" existantes dont le nom est basé sur l'identifiant dans le fichier binaire de votre application.
Exemples de scénarios d'identifiants non concordants
Notez que les noms de tables par lot BigQuery sont automatiquement suivis de _IOS ou _ANDROID pour indiquer la plate-forme de l'application.
| Identifiants dans le binaire de votre application | Identifiant(s) défini(s) pour vos applications Firebase | Ancien comportement | Comportement après la migration vers la nouvelle infrastructure d'exportation |
Solution |
|---|---|---|---|---|
foo |
bar |
Écrit dans une seule table nommée d'après l'identifiant dans le binaire de l'application (foo)
|
Crée une table unique nommée d'après l'identifiant défini pour l'application Firebase (bar), puis y écrit des données.
|
Implémentez l'option 1 ou 2 décrite ci-dessous. |
foo |
bar, qux, etc. |
Écrit dans une seule table nommée d'après l'identifiant dans le binaire de l'application (foo)
|
Crée* ensuite des tables multiples nommées d'après les identifiants définis pour les applications Firebase (bar, qux, etc.) et y écrit des données.
|
Mettez en œuvre l'option 2 décrite ci-dessous. |
foo, baz, etc. |
bar |
Écrit dans plusieurs tables nommées d'après les identifiants multiples dans le binaire de l'application (foo, baz, etc.)
|
Crée** ensuite les données de chaque application et les écrit dans une seule table nommée d'après l'identifiant défini pour l'application Firebase (bar).
|
Aucune des options ne peut être implémentée.
Vous pouvez toujours différencier les données de chaque application dans le tableau unique en utilisant l' |
* Si l'identifiant du binaire de votre application correspond à l'un des identifiants définis pour une application Firebase, la nouvelle infrastructure d'exportation ne créera pas de table pour cet identifiant. Au lieu de cela, il continuera à y écrire des données pour cette application spécifique. Toutes les autres applications seront écrites dans de nouvelles tables.
** Si l'un des identifiants du binaire de votre application correspond à l'identifiant défini pour l'application Firebase, la nouvelle infrastructure d'exportation ne créera pas de table. Au lieu de cela, il conservera cette table et commencera à y écrire des données pour toutes les applications.
Options pour éviter les interruptions
Pour éviter toute interruption, suivez les instructions de l'une des options décrites ci-dessous avant de mettre à niveau manuellement ou avant le 9 janvier 2026.
OPTION 1 :
Utilisez la nouvelle table créée par la nouvelle infrastructure d'exportation. Vous allez copier les données de votre table existante dans la nouvelle table.Dans la console Firebase, passez à la nouvelle infrastructure d'exportation en désactivant, puis en réactivant l'exportation pour l'application associée.
Cette action crée une table par lot dont le nom est basé sur l'ID de bundle ou le nom de package défini pour votre application Firebase enregistrée dans votre projet Firebase.
Dans la console Google Cloud, copiez toutes les données de votre ancienne table vers la nouvelle table que vous venez de créer.
Si vous avez des dépendances en aval qui dépendent de votre table de lots, modifiez-les pour qu'elles utilisent la nouvelle table.
OPTION 2 :
Continuez à écrire dans votre tableau existant. Pour ce faire, vous allez remplacer certaines valeurs par défaut dans une configuration BigQuery.Dans la console Firebase, recherchez et notez l'ID d'application Firebase (par exemple,
1:1234567890:ios:321abc456def7890) de l'application dont le nom et l'identifiant de la table par lot ne correspondent pas :
. Accédez à settings Paramètres du projet, puis à la fiche Vos applications pour afficher toutes vos applications Firebase et leurs informations.Dans la console Firebase, passez à la nouvelle infrastructure d'exportation en désactivant, puis en réactivant l'exportation pour l'application associée.
Cette action a deux effets :
Crée une table par lot avec un nom basé sur l'ID de bundle ou le nom de package défini pour votre application Firebase enregistrée dans votre projet Firebase. (Vous finirez par supprimer cette table, mais ne la supprimez pas pour le moment.)
Crée une "configuration de transfert de données" BigQuery avec la source
Firebase Crashlytics with Multi-Region Support.
Dans la console Google Cloud, modifiez la nouvelle "configuration du transfert de données" afin que les données continuent d'être écrites dans votre table existante :
Accédez à BigQuery > Transferts de données pour afficher votre "configuration de transfert de données".
Sélectionnez la configuration contenant la source
Firebase Crashlytics with Multi-Region Support.Cliquez sur Modifier en haut à droite.
Dans la section Détails de la source de données, recherchez les listes gmp_app_id et client_namespace.
Dans BigQuery, l'ID de l'application Firebase est appelé
gmp_app_id. Par défaut, la valeurclient_namespacedans BigQuery correspond à l'ID de bundle / nom de package unique de l'application, mais vous allez remplacer cette configuration par défaut.BigQuery utilise la valeur
client_namespacepour le nom de la table par lot dans laquelle chaque application Firebase associée écrit.Recherchez le gmp_app_id de l'application Firebase pour laquelle vous souhaitez remplacer les paramètres par défaut. Modifiez sa valeur client_namespace en remplaçant le nom de la table dans laquelle l'application Firebase doit écrire par le nom de la table de destination (il s'agit généralement du nom de l'ancienne table dans laquelle l'application écrivait avec l'ancienne infrastructure d'exportation).
Enregistrez la modification de la configuration.
Planifiez un remplissage pour les jours pour lesquels votre tableau existant manque de données.
Une fois le remplissage terminé, supprimez la nouvelle table qui a été créée automatiquement par la nouvelle infrastructure d'exportation.