5
votes

Firebase Crashlytics n'affiche pas les plantages

Je voulais obtenir un rapport d'incident de Firebase une fois l'application plantée. Est-il possible de séparer les journaux de mode de débogage et les journaux de crash de production en cas de crash de firebase? ... parce que ce n'est pas vraiment clair quand nous avons un crash de production ou de test de débogage. De plus, Firebase ne reflètera pas le rapport de plantage sur la console après un plantage. Que dois-je faire pour obtenir un rapport d'incident à jour? Existe-t-il un autre moyen d'obtenir un rapport de plantage autre que Firebase? J'ai mis à jour les bibliothèques requises pour les crashlytics de firebase. et suivi du didacticiel - https://firebase.google.com/docs/crashlytics/get -started # android


11 commentaires

firebase met 24h pour afficher les rapports de plantage.


Merci pour votre réponse rapide, mais je n'ai pas eu de crash après 24h.Dans ce cas, que dois-je faire?


@Urvishrana, je pense que ce n'est pas vrai, dans mon cas, les plantages se sont mis à jour dans 5 minutes


oui @Zlytherin généralement cela reflète en quelques minutes.


@MeeraPotdar quel tutoriel avez-vous suivi? et qu'avez-vous fait jusqu'ici? veuillez mettre à jour la question.


@Zlytherin quand j'ai testé, cela a pris 24 heures


Quel SDK Firebase Crash Reporting utilisez-vous?


@Rumit Patel, je n'avais encore suivi aucun tutoriel spécifique.


@MeeraPotdar suivez ce firebase.google.com/docs/crashlytics/get-started# android


@MeeraPotdar, modifiez votre question et publiez les deux fichiers build.gradle


Veuillez vérifier les build.gradles partagées dropbox.com/s/8b0sukk45hckf3u/build. gradle? dl = 0 dropbox.com/s/wonj78k8yt9pr9i /build.gradle_project?dl=0


3 Réponses :


6
votes

Est-il possible de séparer les journaux du mode de débogage et le journal des plantages de production en cas de crash de firebase?

Il est courant, voire même recommandé, de créer un projet distinct pour les tests et la production. Téléchargez et placez le google-services.json dans votre dossier de version de version

  • ~/app/src/release/google-services.json
  • ~/app/src/debug/google-services.json

Même si vous n'avez qu'un seul projet Firebase pour le test et la production, vous pouvez filtrer vos journaux par l'ID de l'application si vous configurez un suffixe d'ID de projet pour la version de développement: p >

~ / app / build.gradle

Button crashButton = new Button(this);
crashButton.setText("Crash!");
crashButton.setOnClickListener(new View.OnClickListener() {
    public void onClick(View view) {
        Crashlytics.getInstance().crash(); // Force a crash
    }
});

Ici vous pouvez voir les différentes saveurs disponibles dans Crashlytics

entrez la description de l'image ici

De plus, Firebase ne reflétera pas le rapport de plantage sur la console après un plantage.

La première fois que vous configurez des crashlytics, cela peut prendre un certain temps avant que les données n'apparaissent dans le tableau de bord. Mais si cela fait plus de 24 heures, il est probable qu'il ne soit pas correctement configuré. Essayez de déclencher explicitement un plantage pour vous assurer que cela fonctionne correctement .

buildTypes {
  release {
  }
  debug {
    applicationIdSuffix '.debug'
    versionNameSuffix '-dbg'
  }
}

Existe-t-il un autre moyen d'obtenir un rapport d'erreur autre que Firebase?

Oui, vous pouvez avoir plus d'un outil de rapport de plantage si vous en avez besoin. Vous pouvez peut-être créer une classe wrapper pour les rapports d'incident où vous résumez l'appel à Crashlytics et vous pouvez y ajouter ou modifier la plate-forme de rapport sous-jacente.


7 commentaires

Merci pour vos conseils. Je voudrais mettre en œuvre votre solution et vous informer si une aide est nécessaire.


Pouvez-vous m'expliquer comment créer plusieurs fichiers google-services.json d'un même projet? J'ai créé deux versions internes et de production, je dois donc créer deux fichiers google-services.json en fonction des identifiants d'application. Dois-je créer deux projets différents sur Firebase?


Vous obtenez un google-services.json pour chaque application que vous ajoutez à Firebase. Donc, de la même manière que vous avez ajouté la première application à Firebase, vous répétez pour la saveur avec applicationIdSuffix . C'est la même procédure que vous ayez deux projets Firebase distincts ou que vous ajoutiez les deux versions au même projet.


Je crée un nouveau projet sur Firebase pour obtenir un nouveau fichier google-service.json.


Oui, veuillez consulter la documentation pour savoir comment le configurer.


Est-ce obsolète? En utilisant un applicationIdSuffix pour ma version de débogage, je constate que rien n'est téléchargé sur la console Google Crashlytics. La version de version sans suffixe fonctionne comme prévu avec des rapports apparaissant presque instantanément dans la console.


Avez-vous différents projets à développer / production ou rapporter au même projet Firebase? Avez-vous vérifié le sélecteur / filtre d'application pour les rapports? Tout le reste fonctionne bien pour votre version de débogage?



2
votes

Firebase ne fera pas la différence entre les journaux / plantages des versions de débogage et de production dans Crashlytics si vous avez défini la collecte automatique des journaux. Vous pouvez utiliser une bibliothèque de journalisation pour envoyer uniquement des journaux et des plantages si l'application build.gradle a debug: fasle, c'est-à-dire production. Vous pouvez consulter la bibliothèque de journalisation Timber qui présente un excellent exemple d'ajout de rapports de plantage. https://github.com/JakeWharton/timber

Vous devez désactiver l'initialisation automatique de crashlytics dans le manifeste pour avoir le contrôle lorsque des plantages sont envoyés à Firebase

/**
     * {@link Timber.Tree} using {@link Crashlytics} as crash reporting
     */
    private static class CrashReportingTree extends Timber.Tree {

        CrashReportingTree(Context context) {
            CrashlyticsCore core = new CrashlyticsCore.Builder()
                    .disabled(BuildConfig.DEBUG)
                    .build();
            Fabric.with(context, new Crashlytics.Builder().core(core).build());
        }

        @Override
        protected void log(int priority, String tag, @NonNull String message, Throwable t) {
            // don't report log to Crashlytics if priority is Verbose or Debug
            if (priority == Log.VERBOSE || priority == Log.DEBUG) {
                return;
            }
            Crashlytics.log(priority, tag, message);

            if (t != null) {
                if (priority == Log.ERROR) {
                    Crashlytics.logException(t);
                }
            }

        }
    }

Ensuite, dans onCreate de votre classe Application, vous vérifiez si BuildConfig.DEBUG est vrai, vous n'initialiserez pas crashlaytics donc vos journaux de débogage et les exceptions n'iront pas dans firebase, ce qui n'entraînera que des plantages de production.

Pour le bois lorsque vous voulez mettre des journaux et des plantages dans firebase, vous pouvez utiliser cette arborescence:

<meta-data
            android:name="firebase_crashlytics_collection_enabled"
            android:value="false" />

Pour le mode débogage, vous ne devez pas envoyer de plantages à Firebase car vous pouvez vérifier les journaux de débogage localement.


1 commentaires

Merci beaucoup pour votre brève description. Je voudrais d'abord vérifier, cela fonctionne correctement pour moi ou non. Faites-vous savoir si j'ai besoin d'aide.



3
votes

Mettre à jour le SDK

Après avoir effectué les paramètres pour la migration vers le nouveau SDK, il est important d'éviter l'erreur suivante:

Tentative d'envoi d'un rapport d'erreur au moment de l'incident.

Cela peut être causé en forçant un plantage (sans bouton d'écoute dans mon cas) avant que FirebaseCrashlytics envoie les rapports, c'est-à-dire que le téléchargement de Crashlytics Reports Endpoint est terminé . p>


Tester la mise en œuvre h2>

Activer la journalisation du débogage Crashlytics

Attempting to send 1 report(s)
FirebaseCrashlytics: Settings result was: 200
FirebaseCrashlytics: Adding single file 5EDA9D7....cls to report 5EDA9D7...
FirebaseCrashlytics: Sending report to: https://reports.crashlytics.com/spi/v1/platforms/android/apps/.../reports
FirebaseCrashlytics: Crashlytics Reports Endpoint upload complete: 5EDABB42 ...

1) Première étape: NE PAS forcer un plantage et exécuter l'application. Observer comment dans le logcat Crashlyticis il est correctement initialisé.

private fun setupCrashlytics() {
     //throw RuntimeException("Test crash")
}

2) Deuxième étape: forcer un crash (avec un bouton ou directement).

MainActivity .kt

FirebaseCrashlytics: Crashlytics completed exception processing. Invoking default exception handler.
FirebaseCrashlytics: Attempting to send crash report at time of crash...

Remarque: La seule chose nécessaire pour générer un rapport est ce code en plus des dépendances. De plus, vous pouvez vous connecter à des clés personnalisées avec FirebaseCrashlytics.getInstance().

Ensuite, exécutez l'application et vérifiez les éléments suivants:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    setupCrashlytics()

    ...
 }

 private fun setupCrashlytics() {
     throw RuntimeException("Test crash")  //TODO: Clean
 }

À ce stade, le processus d'exception est journalisé sur le serveur Firebase mais les rapports n'ont pas encore été envoyés à la console, c'est-à-dire que le téléchargement est incomplet.

3) Enfin, nous nettoyons ou commentons le crash crash

...
FirebaseCrashlytics: Update app request ID: 1d62cb...
FirebaseCrashlytics: Result was 204.
Crashlytics Reports Endpoint upload complete

Lancez l'application et vérifions:

$ adb devices 
$ adb shell setprop log.tag.FirebaseCrashlytics DEBUG
$ adb logcat -s FirebaseCrashlytics

Cela garantit que le rapport a atteint la console. p >

GL


0 commentaires