Crashlytics kontrol panelinde bir sorunu tıklayarak ayrıntılı bir etkinlik raporu alabilirsiniz. Bu raporları, uygulamanızda neler olduğunu ve Crashlytics'a bildirilen etkinliklerle ilgili koşulları daha iyi anlamanıza yardımcı olacak şekilde özelleştirebilirsiniz.
Yakalanmayan istisnaları ve yakalanan istisnaları Crashlytics'e bildirin.
Uygulamanızı özel anahtarlar, özel günlük mesajları ve kullanıcı tanımlayıcıları kaydedecek şekilde ayarlayın.
Uygulamanız Google Analytics için Firebase SDK'sını kullanıyorsa breadcrumb günlüklerini otomatik olarak alın. Bu günlükler, uygulamanızda Crashlytics ile toplanan bir etkinliğe yol açan kullanıcı işlemlerini görmenizi sağlar.
Otomatik kilitlenme raporlamayı devre dışı bırakın ve kullanıcılarınız için katılıma dayalı raporlamayı etkinleştirin. Crashlytics'nın varsayılan olarak uygulamanızın tüm kullanıcıları için platforma özgü kilitlenme raporlarını otomatik olarak topladığını unutmayın.
Yakalanmayan istisnaları bildirme
FlutterError.onError
işlevini FirebaseCrashlytics.instance.recordFlutterFatalError
ile geçersiz kılarak Flutter çerçevesinde oluşturulan tüm "fatal" hataları otomatik olarak yakalayabilirsiniz. Alternatif olarak, "önemli olmayan" istisnaları da yakalamak için FlutterError.onError
işlevini FirebaseCrashlytics.instance.recordFlutterError
işleviyle geçersiz kılın:
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
bool weWantFatalErrorRecording = true;
FlutterError.onError = (errorDetails) {
if(weWantFatalErrorRecording){
FirebaseCrashlytics.instance.recordFlutterFatalError(errorDetails);
} else {
FirebaseCrashlytics.instance.recordFlutterError(errorDetails);
}
};
runApp(MyApp());
}
Eşzamansız hatalar
Eşzamansız hatalar Flutter çerçevesi tarafından yakalanmaz:
ElevatedButton(
onPressed: () async {
throw Error();
}
...
)
Bu tür hataları yakalamak için PlatformDispatcher.instance.onError
işleyiciyi kullanabilirsiniz:
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
FlutterError.onError = (errorDetails) {
FirebaseCrashlytics.instance.recordFlutterFatalError(errorDetails);
};
// Pass all uncaught asynchronous errors that aren't handled by the Flutter framework to Crashlytics
PlatformDispatcher.instance.onError = (error, stack) {
FirebaseCrashlytics.instance.recordError(error, stack, fatal: true);
return true;
};
runApp(MyApp());
}
Flutter dışındaki hatalar
Flutter bağlamı dışında oluşan hataları yakalamak için mevcut Isolate
'ya bir hata dinleyicisi yükleyin:
Isolate.current.addErrorListener(RawReceivePort((pair) async {
final List<dynamic> errorAndStacktrace = pair;
await FirebaseCrashlytics.instance.recordError(
errorAndStacktrace.first,
errorAndStacktrace.last,
fatal: true,
);
}).sendPort);
Yakalanan istisnaları bildir
Crashlytics, uygulamanızın kilitlenmelerini otomatik olarak bildirmenin yanı sıra önemli olmayan istisnaları kaydetmenize ve önemli bir olay bildirildiğinde veya uygulama yeniden başlatıldığında bunları size göndermenize olanak tanır.
Uygulamanızın catch bloklarındaki önemli olmayan istisnaları kaydetmek için recordError
yöntemini kullanın. Örneğin:
await FirebaseCrashlytics.instance.recordError(
error,
stackTrace,
reason: 'a non-fatal error'
);
// Or you can use:
await FirebaseCrashlytics.instance.recordFlutterError(errorDetails);
information
özelliğini kullanarak hatayla ilgili daha fazla bilgi de günlüğe kaydetmek isteyebilirsiniz:
await FirebaseCrashlytics.instance.recordError(
error,
stackTrace,
reason: 'a non-fatal error',
information: ['further diagnostic information about the error', 'version 2.0'],
);
Bu istisnalar, Firebase konsolunda önemli olmayan sorunlar olarak görünür. Sorun özeti, normalde kilitlenmelerden aldığınız tüm durum bilgilerinin yanı sıra sürüme ve donanım cihazına göre dökümleri içerir.
Crashlytics, uygulamanızın performans üzerindeki etkisini en aza indirmek için istisnaları özel bir arka plan iş parçacığında işler. Crashlytics, kullanıcılarınızın ağ trafiğini azaltmak için gerekirse cihaz dışında gönderilen rapor sayısını hız sınırına tabi tutar.
Özel anahtar ekleme
Özel anahtarlar, uygulamanızın kilitlenmeye yol açan belirli durumunu almanıza yardımcı olur. Kilitlenme raporlarınızla rastgele anahtar/değer çiftleri ilişkilendirebilir, ardından Firebase konsolunda kilitlenme raporlarını aramak ve filtrelemek için özel anahtarları kullanabilirsiniz.
Crashlytics kontrol panelinde, özel bir anahtarla eşleşen sorunları arayabilirsiniz.
Konsolda belirli bir sorunu incelerken her etkinlikle ilişkili özel anahtarları (Anahtarlar alt sekmesi) görüntüleyebilir ve hatta etkinlikleri özel anahtarlara göre filtreleyebilirsiniz (sayfanın üst kısmındaki Filtre menüsü).
Anahtar/değer çiftlerini ayarlamak için setCustomKey
örnek yöntemini kullanın. Aşağıda bazı örnekler verilmiştir:
// Set a key to a string.
FirebaseCrashlytics.instance.setCustomKey('str_key', 'hello');
// Set a key to a boolean.
FirebaseCrashlytics.instance.setCustomKey("bool_key", true);
// Set a key to an int.
FirebaseCrashlytics.instance.setCustomKey("int_key", 1);
// Set a key to a long.
FirebaseCrashlytics.instance.setCustomKey("int_key", 1L);
// Set a key to a float.
FirebaseCrashlytics.instance.setCustomKey("float_key", 1.0f);
// Set a key to a double.
FirebaseCrashlytics.instance.setCustomKey("double_key", 1.0);
Özel günlük mesajları ekleme
Kilitlenmeye yol açan etkinlikler hakkında daha fazla bilgi edinmek için uygulamanıza özel Crashlytics günlükleri ekleyebilirsiniz. Crashlytics, günlükleri kilitlenme verilerinizle ilişkilendirir ve Crashlytics Günlükler sekmesi altındaki Firebase konsolunda gösterir.
Sorunları belirlemek için log
simgesini kullanın. Örneğin:
FirebaseCrashlytics.instance.log("Higgs-Boson detected! Bailing out");
Kullanıcı tanımlayıcılarını ayarlama
Bir sorunu teşhis etmek için genellikle kullanıcılarınızdan hangisinin belirli bir kilitlenme yaşadığını bilmek faydalıdır. Crashlytics, kilitlenme raporlarınızdaki kullanıcıları anonim olarak tanımlamanın bir yolunu içerir.
Raporlarınıza kullanıcı kimlikleri eklemek için her kullanıcıya kimlik numarası, jeton veya karma oluşturma işlemi uygulanmış değer biçiminde benzersiz bir tanımlayıcı atayın:
FirebaseCrashlytics.instance.setUserIdentifier("12345");
Bir kullanıcı tanımlayıcısını ayarladıktan sonra temizlemeniz gerekirse değeri boş bir dizeye sıfırlayın. Kullanıcı tanımlayıcısının temizlenmesi mevcut kayıtları kaldırmaz.Crashlytics Bir kullanıcı kimliğiyle ilişkili kayıtları silmeniz gerekiyorsa Firebase destek ekibiyle iletişime geçin.
İçerik haritası günlüklerini alma
Breadcrumb günlükleri, bir kullanıcının kilitlenme, ölümcül olmayan veya ANR etkinliğine yol açan uygulama etkileşimleri hakkında daha iyi bilgi edinmenizi sağlar. Bu günlükler, bir sorunu yeniden oluşturmaya ve hata ayıklamaya çalışırken faydalı olabilir.
İçerik haritası günlükleri Google Analytics tarafından desteklenir. Bu nedenle, içerik haritası günlüklerini almak için Firebase projenizde Google Analytics'i etkinleştirmeniz ve uygulamanıza Google Analytics için Firebase SDK'sını eklemeniz gerekir. Bu şartlar karşılandıktan sonra, bir sorunun ayrıntılarını görüntülerken içerik haritası günlükleri Günlükler sekmesindeki etkinlik verilerine otomatik olarak eklenir.
Analytics SDK'sı, screen_view
etkinliğini otomatik olarak günlüğe kaydeder. Bu sayede, kilitlenme, ölümcül olmayan veya ANR etkinliğinden önce görüntülenen ekranların listesini göstermek için izleme kaydı günlükleri kullanılabilir. screen_view
izleme kaydı, firebase_screen_class
parametresini içeriyor.
Ayrıca, kullanıcı oturumunda manuel olarak günlüğe kaydettiğiniz tüm özel etkinlikler (etkinliğin parametre verileri dahil) ile de izleme kaydı günlükleri doldurulur. Bu veriler, kilitlenme, ölümcül olmayan veya ANR etkinliğine yol açan bir dizi kullanıcı işlemini göstermeye yardımcı olabilir.
Google Analytics verilerinin toplanmasını ve kullanılmasını kontrol edebileceğinizi unutmayın. Bu veriler, izleme kaydı günlüklerini dolduran verileri de içerir.
Etkinleştirme raporlamasını etkinleştirme
Varsayılan olarak Crashlytics, uygulamanızın tüm kullanıcıları için kilitlenme raporlarını otomatik olarak toplar. Kullanıcılara gönderdikleri veriler üzerinde daha fazla kontrol olanağı sunmak için otomatik raporlamayı devre dışı bırakıp yalnızca kodunuzda seçtiğiniz zaman Crashlytics'a veri göndererek izinli raporlamayı etkinleştirebilirsiniz.
Otomatik toplamayı yerel olarak devre dışı bırakma:
Apple platformları
Info.plist
dosyanıza yeni bir anahtar ekleyin:- Tuş:
FirebaseCrashlyticsCollectionEnabled
- Değer:
false
Android
application
dosyanızınAndroidManifest.xml
bloğunda, otomatik toplamayı devre dışı bırakmak içinmeta-data
etiketi ekleyin:<meta-data android:name="firebase_crashlytics_collection_enabled" android:value="false" />
- Tuş:
Çalışma zamanında Crashlytics data collection geçersiz kılma işlevini çağırarak belirli kullanıcılar için veri toplamayı etkinleştirin. Geçersiz kılma değeri, uygulamanızın sonraki tüm başlatma işlemleri boyunca geçerli olur. Böylece Crashlytics, söz konusu kullanıcı için raporları otomatik olarak toplayabilir.
FirebaseCrashlytics.instance.setCrashlyticsCollectionEnabled(true);
Kullanıcı daha sonra veri toplamayı devre dışı bırakırsa geçersiz kılma değeri olarak
false
değerini iletebilirsiniz. Bu değer, kullanıcı uygulamayı bir sonraki kez başlattığında uygulanır ve bu kullanıcının sonraki tüm başlatma işlemleri için geçerli olmaya devam eder.
Kilitlenme analizleri verilerini yönetme
Kilitlenme analizleri, anonimleştirilmiş yığın izlemelerinizi diğer Firebase uygulamalarındaki izlemelerle karşılaştırarak sorunları çözmenize yardımcı olur ve sorununuzun daha büyük bir trendin parçası olup olmadığını bildirir. Kilitlenme Analizleri, birçok sorunda kilitlenmeyi ayıklamanıza yardımcı olacak kaynaklar da sunar.
Kilitlenme Analizleri, yaygın kararlılık trendlerini belirlemek için birleştirilmiş kilitlenme verilerini kullanır. Uygulamanızın verilerini paylaşmak istemiyorsanız Firebase konsolundaki Crashlytics sorun listenizin üst kısmındaki Çökme Analizleri menüsünden Çökme Analizleri'ni devre dışı bırakabilirsiniz.