Το Firebase Crashlytics είναι μια υπηρεσία Google για τη συλλογή, ομαδοποίηση και ανάλυση σφαλμάτων εφαρμογών κινητού σε πραγματικό χρόνο. Το SDK αναχαιτίζει αυτόματα μη διαχειρισμένες εξαιρέσεις, crashes εγγενούς κώδικα και σήματα ANR, δημιουργώντας μια λεπτομερή αναφορά με ανίχνευση στοίβας, κατάσταση συσκευής και αρχεία καταγραφής. Σύμφωνα με τα δεδομένα του Google, 2026, το Crashlytics χρησιμοποιείται σε περισσότερες από 4 εκατομμύρια εφαρμογές παγκοσμίως. Η υπηρεσία παρέχεται δωρεάν με όριο 500 χιλιάδων συνεδριών την ημέρα ανά έργο.
Κύρια σημεία
Firebase Crashlytics είναι μια δωρεάν υπηρεσία Google για την παρακολούθηση της σταθερότητας εφαρμογών κινητού, που εξαγοράστηκε από την Google το 2017 μαζί με την εταιρεία Fabric. Το Crashlytics συλλέγει αυτόματα πληροφορίες για κάθε σφάλμα εφαρμογής, ομαδοποιεί πανομοιότυπα crashes βάσει της υπογραφής στοίβας και τα εμφανίζει στην κονσόλα Firebase με προτεραιοποίηση βάσει του αριθμού των επηρεαζόμενων χρηστών.
Το Crashlytics ξεκίνησε το 2011 ως μέρος της πλατφόρμας Fabric και γρήγορα έγινε το de facto πρότυπο για αναφορά crashes στο iOS. Μετά την εξαγορά από την Google το 2017 έναντι εκτιμώμενων 2 δισεκατομμυρίων δολαρίων (ολόκληρο το Fabric), το Crashlytics ενσωματώθηκε στο Firebase SDK. Η έκδοση 18.0.0 (2021) πρόσθεσε υποστήριξη για Kotlin Multiplatform, και η έκδοση 19.0.0 (2024) — αυτόματη συλλογή ANR σε Android χωρίς πρόσθετη παραμετροποίηση. Σύμφωνα με δεδομένα της Google (2026), το Crashlytics επεξεργάζεται περισσότερα από 10 δισεκατομμύρια crashes μηνιαίως.
Crashlytics παρέχεται δωρεάν με όριο 500 χιλιάδων συνεδριών την ημέρα ανά έργο Firebase. Για τις περισσότερες εφαρμογές αυτό είναι αρκετό — σύμφωνα με δεδομένα της Google (2026), το 95% των έργων δεν υπερβαίνει το όριο. Σε περίπτωση υπέρβασης, η συλλογή δεδομένων δεν σταματά, αλλά οι αναφορές σταματούν να ενημερώνονται μέχρι την επόμενη ημέρα. Για έργα με υψηλό φορτίο, διατίθενται τα πακέτα Spark και Blaze της Firebase — το Crashlytics παραμένει δωρεάν και στα δύο πακέτα και το όριο συνεδριών υπολογίζεται ξεχωριστά.
Ο μηχανισμός συλλογής του Crashlytics βασίζεται στην αναχαίτιση εξαιρέσεων σε επίπεδο πλατφόρμας και χρόνου εκτέλεσης. Σε Android, το SDK υλοποιεί έναν UncaughtExceptionHandler που αναχαιτίζει όλες τις μη διαχειρισμένες εξαιρέσεις Kotlin και Java. Σε iOS, το Crashlytics χρησιμοποιεί NSSetUncaughtExceptionHandler για Objective-C/Swift και τον δικό του χειριστή εξαιρέσεων Mach για crashes εγγενούς κώδικα.
Το Crashlytics διακρίνει πέντε τύπους βλαβών: fatal (θανατηφόρα crashes), non-fatal (μη θανατηφόρες εξαιρέσεις που αποστέλλονται χειροκίνητα), ANR (Android — η εφαρμογή δεν ανταποκρίνεται), signal (σήματα OS — SIGSEGV, SIGABRT) και OOM (έλλειψη μνήμης σε iOS). Κάθε τύπος υποβάλλεται σε επεξεργασία από ξεχωριστό μηχανισμό και εμφανίζεται στην κονσόλα με αντίστοιχη ετικέτα.
| Τύπος βλάβης | Πλατφόρμες | Ενεργοποιητής |
|---|---|---|
| Fatal | Android, iOS | Μη διαχειρισμένη εξαίρεση |
| Non-fatal | Android, iOS | Χειροκίνητη κλήση Crashlytics.logException() |
| ANR | Android | Καμία απόκριση > 5 δευτερόλεπτα |
| Signal | Android, iOS | Σήμα OS (SEGV, ABRT, BUS) |
| OOM | iOS | Έλλειψη μνήμης |
Κάθε αναφορά Crashlytics περιέχει εξαντλητικές πληροφορίες: πλήρη ανίχνευση στοίβας με ονόματα κλάσεων και αριθμούς γραμμών, έκδοση εφαρμογής (versionName + versionCode), μοντέλο συσκευής, έκδοση OS, ποσότητα ελεύθερης μνήμης, προσανατολισμό οθόνης και χρόνο από την εκκίνηση. Εάν το Firebase Analytics είναι συνδεδεμένο, η αναφορά περιλαμβάνει επίσης τη διαδρομή των τελευταίων 50 συμβάντων χρήστη πριν από τη βλάβη — αυτό είναι κρίσιμο για την αναπαραγωγή του crash.
class CrashlyticsHelper {
fun logNonFatal(error: Throwable) {
FirebaseCrashlytics.getInstance()
.log("Non-fatal: user action = payment_failed")
FirebaseCrashlytics.getInstance()
.recordException(error)
}
fun setUserContext(userId: String) {
FirebaseCrashlytics.getInstance()
.setUserId(userId)
FirebaseCrashlytics.getInstance()
.setCustomKey("subscription", "premium")
}
}
Η σύνδεση του Crashlytics σε μια εφαρμογή Android απαιτεί την προσθήκη δύο εξαρτήσεων στο build.gradle και τη ρύθμιση του πρόσθετου Google Services. Το SDK ενεργοποιεί αυτόματα την αναφορά crashes κατά την αρχικοποίηση του Firebase χωρίς πρόσθετο κώδικα. Για τη σωστή λειτουργία απαιτούνται επίσης το πρόσθετο google-services και το αρχείο google-services.json από την κονσόλα Firebase.
// build.gradle (project-level)
plugins {
id "com.google.gms.google-services" version "4.4.0"
}
// build.gradle (app-level)
plugins {
id "com.google.firebase.crashlytics"
}
dependencies {
implementation(platform("com.google.firebase:firebase-bom:33.1.0"))
implementation("com.google.firebase:firebase-crashlytics-ktx")
implementation("com.google.firebase:firebase-analytics-ktx")
}
Το πρόσθετο com.google.firebase.crashlytics εκτελεί δύο εργασίες: δημιουργεί ένα μοναδικό αναγνωριστικό build (build ID) για τη χαρτογράφηση συγκεχυμένων στοιβών και δημιουργεί αυτόματα πόρους για το Crashlytics SDK. Χωρίς το πρόσθετο, τα crashes θα επισημαίνονται ως "unmapped" — θα βλέπετε μόνο συγκεχυμένα ονόματα κλάσεων (a.b.c) χωρίς δυνατότητα εύρεσης του πηγαίου κώδικα. Το πρόσθετο προστίθεται στο root build.gradle και στο build.gradle της ενότητας εφαρμογής.
Για τη δοκιμή της ενσωμάτωσης Crashlytics χρησιμοποιείται η ειδική μέθοδος forceCrash(), η οποία δημιουργεί μια δοκιμαστική εξαίρεση. Σε εκδόσεις παραγωγής, αυτή η μέθοδος δεν είναι διαθέσιμη. Μετά την εκτέλεση του δοκιμαστικού crash, η αναφορά εμφανίζεται στην κονσόλα Firebase εντός 1-5 λεπτών. Εάν η αναφορά δεν εμφανίζεται — ελέγξτε εάν το google-services.json αντιστοιχεί στο πακέτο της εφαρμογής και εάν δεν υπάρχουν σημαίες στο AndroidManifest που απενεργοποιούν τη συλλογή δεδομένων.
Η κονσόλα Crashlytics παρέχει δύο επίπεδα προβολής: λίστα όλων των crashes (Issues) με ομαδοποίηση ανά τύπο βλάβης και λεπτομερή αναφορά για κάθε Issue με ανίχνευση, στατιστικά και δεδομένα χρήστη. Κάθε Issue συνδυάζει όλα τα crashes με την ίδια υπογραφή — τον ίδιο τύπο εξαίρεσης και αντίστοιχη ανίχνευση στοίβας.
Η ομαδοποίηση crashes — το βασικό χαρακτηριστικό του Crashlytics. Αντί να εμφανίζει χιλιάδες μεμονωμένα crashes, η υπηρεσία τα συνδυάζει σε Issues βάσει fingerprint — του αθροίσματος ελέγχου της ανίχνευσης στοίβας. Ένα Issue μπορεί να περιέχει από 1 έως αρκετά εκατομμύρια crashes. Για κάθε Issue εμφανίζονται: ο αριθμός των θανατηφόρων περιπτώσεων, ο αριθμός των μοναδικών χρηστών, η έκδοση εφαρμογής στην οποία εμφανίστηκε το crash και το ποσοστό χρηστών που αντιμετώπισαν το πρόβλημα.
Σύμφωνα με δεδομένα της Google (2026), κατά μέσο όρο το 20% των Issues προκαλεί το 80% όλων των θανατηφόρων crashes της εφαρμογής (αρχή Pareto). Το Crashlytics ταξινομεί αυτόματα τα Issues κατά σοβαρότητα — όσο περισσότεροι χρήστες επηρεάζονται, τόσο υψηλότερη είναι η προτεραιότητα. Αυτό επιτρέπει στον προγραμματιστή να διορθώνει πρώτα τα πιο μαζικά προβλήματα.
Crashlytics παρακολουθεί τη σταθερότητα κάθε έκδοσης εφαρμογής ξεχωριστά. Το γράφημα crash-free users δείχνει το ποσοστό των χρηστών που δεν αντιμετώπισαν θανατηφόρο crash σε κάθε έκδοση. Εάν κατά την ενημέρωση το ποσοστό πέσει κάτω από το όριο (προεπιλογή 99%), το Crashlytics στέλνει ειδοποίηση μέσω email και στην κονσόλα Firebase. Αυτό επιτρέπει τη γρήγορη ανάκληση της προβληματικής έκδοσης ή την κυκλοφορία hotfix.
Crashlytics παρέχει τρεις μηχανισμούς για τον εμπλουτισμό αναφορών με περιεχόμενο: προσαρμοσμένα κλειδιά (keys) για δομημένα δεδομένα, αρχεία καταγραφής (logs) για ανίχνευση κειμένου και Breadcrumbs από το Analytics για τη διαδρομή χρήστη. Και οι τρεις τύποι δεδομένων επισυνάπτονται στην αναφορά crash και είναι ορατοί στη λεπτομερή κάρτα της.
Custom Keys — είναι ζεύγη "κλειδί-τιμή" που μεταδίδονται μαζί με κάθε crash. Μέγιστο 64 κλειδιά ανά εφαρμογή, κάθε κλειδί — συμβολοσειρά μήκους έως 1024 χαρακτήρων. Τα κλειδιά είναι βολικά για τη σήμανση της κατάστασης της εφαρμογής: επίπεδο συνδρομής, κατάσταση εξουσιοδότησης, τελευταία οθόνη, εάν το VPN είναι ενεργοποιημένο. Οι τιμές αντικαθίστανται — ένα νέο κλειδί με το ίδιο όνομα αντικαθιστά το παλιό.
Custom Logs — είναι μηνύματα κειμένου που το Crashlytics αποθηκεύει σε κυκλικό buffer μεγέθους 64 KB. Τα αρχεία καταγραφής επισυνάπτονται αυτόματα στο επόμενο crash. Εάν δεν συμβεί crash — τα αρχεία καταγραφής δεν μεταδίδονται στον διακομιστή (δεν καταναλώνουν κίνηση). Η καταγραφή χρησιμοποιείται για την καταγραφή των βημάτων του χρήστη πριν από τη βλάβη: "payment_processing_started", "api_call_initiated", "response_received_200".
class PaymentViewModel {
fun processPayment(amount: Double) {
FirebaseCrashlytics.getInstance().log("Payment started: amount=$amount")
FirebaseCrashlytics.getInstance().setCustomKey("last_screen", "payment_screen")
FirebaseCrashlytics.getInstance().setCustomKey("subscription_tier", "basic")
try {
paymentGateway.charge(amount)
} catch (e: NetworkException) {
FirebaseCrashlytics.getInstance().recordException(e)
}
}
}
Εάν το Firebase Analytics είναι συνδεδεμένο στο έργο, το Crashlytics λαμβάνει αυτόματα Breadcrumbs — τα τελευταία 50 αναλυτικά συμβάντα πριν από το crash. Κάθε breadcrumb περιέχει το όνομα του συμβάντος και τις παραμέτρους του. Αυτό επιτρέπει την ανακατασκευή της ακριβούς ακολουθίας ενεργειών που οδήγησαν στη βλάβη: ο χρήστης άνοιξε την οθόνη → πρόσθεσε προϊόν → προχώρησε σε πληρωμή → συνέβη crash. Τα Breadcrumbs εμφανίζονται στην κάρτα Issue σε ξεχωριστή καρτέλα "Logs".
Crashlytics είναι πιο αποτελεσματικό με τη σωστή διαμόρφωση περιεχομένου και διαδικασίας επεξεργασίας Issues. Η πρακτική δείχνει ότι οι ομάδες που εφάρμοσαν κανονισμούς εργασίας με crashes μειώνουν τον χρόνο επιδιόρθωσης κρίσιμων σφαλμάτων κατά 60% (δεδομένα Google, 2026).
Δεν είναι όλα τα crashes εξίσου σημαντικά. Η προτεραιοποίηση βάσει αριθμού χρηστών και συχνότητας εμφάνισης βοηθά στην εστίαση στα πιο κρίσιμα προβλήματα. Κανόνας: διορθώνετε Issues που επηρεάζουν περισσότερο από 0.1% των χρηστών εντός 24 ωρών. Issues με μεμονωμένες εμφανίσεις (< 0.01%) μπορούν να αναβληθούν μέχρι την επόμενη προγραμματισμένη έκδοση. Το Crashlytics επισημαίνει αυτόματα υποτροπές — Issues που διορθώθηκαν αλλά εμφανίστηκαν ξανά σε νέα έκδοση.
Το Crashlytics API επιτρέπει την ενσωμάτωση αναφορών σφαλμάτων στο pipeline CI/CD μέσω REST API ή Firebase CLI. Σε κάθε νέα έκδοση, μπορείτε να ελέγχετε αυτόματα εάν το ποσοστό crash-free users υπερβαίνει το όριο. Εάν το όριο ξεπεραστεί — το CI/CD αποκλείει την ανάπτυξη και στέλνει ειδοποίηση στην ομάδα. Το Firebase CLI υποστηρίζει την εντολή firebase crashlytics:builds:upload για τη μεταφόρτωση αρχείων αντιστοίχισης ProGuard/R8 — χωρίς αυτά, οι στοίβες θα είναι δυσανάγνωστες.
Σύμφωνα με δεδομένα της Google (2026), οι εφαρμογές που χρησιμοποιούν αυτόματο έλεγχο ορίων crash-free στο CI/CD κυκλοφορούν 40% λιγότερες υποτροπές σε παραγωγή. Συνιστώμενο όριο: crash-free users >= 99.5% για κρίσιμες εκδόσεις και >= 99.0% για συνήθεις εκδόσεις.
Συχνές ερωτήσεις
Crashlytics είναι δωρεάν έως 500 χιλιάδες συνεδρίες την ημέρα ανά έργο Firebase. Σε περίπτωση υπέρβασης, οι αναφορές σταματούν να ενημερώνονται μέχρι την επόμενη ημέρα, αλλά η συλλογή δεδομένων δεν σταματά.
Crashlytics λειτουργεί χωρίς Analytics, αλλά με αυτό οι αναφορές περιέχουν Breadcrumbs — τα τελευταία 50 συμβάντα χρήστη πριν από το crash. Συνιστάται η σύνδεση και των δύο μονάδων.
Ομαδοποίηση γίνεται βάσει fingerprint — αθροίσματος ελέγχου της ανίχνευσης στοίβας, συμπεριλαμβανομένων των τύπων εξαιρέσεων και αριθμών γραμμών. Τα crashes με ίδιο fingerprint καταλήγουν σε ένα Issue.
Ελέγξτε τις ρυθμίσεις: το αρχείο google-services.json, την ύπαρξη του πρόσθετου crashlytics στο build.gradle, την απουσία φιλτραρίσματος ανά έκδοση στην κονσόλα και την ύπαρξη build που έχει αποδεχτεί τη συμφωνία άδειας χρήσης. Ο εντοπισμός σφαλμάτων λειτουργεί μόνο σε εκδόσεις release.
Ναι, χρησιμοποιήστε τη recordException() για μη θανατηφόρες εξαιρέσεις. Τέτοιες αναφορές δεν διακόπτουν τη λειτουργία της εφαρμογής, αλλά εμφανίζονται στην κονσόλα με μετρητή εμφανίσεων και πλήρη ανίχνευση στοίβας.
Περίληψη
Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση
Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.
Διαβάστε επίσης