Crashlytics kontrol panelinde bir sorunu tıklayıp ayrıntılı etkinlik raporu alabilirsiniz. Uygulamanızda neler olduğunu ve Crashlytics'e bildirilen etkinliklerle ilgili koşulları daha iyi anlamanıza yardımcı olması için bu raporları özelleştirebilirsiniz.
Yakalanamayan istisnaları ve yakalanan istisnaları Crashlytics'e bildirin.
Özel anahtarları, özel günlük mesajlarını ve kullanıcı tanımlayıcılarını günlüğe kaydetmek için uygulamanızı kullanın.
Uygulamanız Google Analytics için Firebase SDK'sını kullanıyorsa içerik haritası günlüklerini otomatik olarak alın. Bu günlükler, uygulamanızda Crashlytics tarafından toplanan bir etkinliğe yol açan kullanıcı işlemlerini görebilmenizi sağlar.
Otomatik kilitlenme raporlamasını kapatın ve kullanıcılarınız için kaydolma raporlarını etkinleştirin. Crashlytics'in varsayılan olarak, uygulamanızın tüm kullanıcıları için platformda yerel kilitlenme raporlarını otomatik olarak topladığını unutmayın.
Yakalanmayan istisnaları bildir
FlutterError.onError
değerini FirebaseCrashlytics.instance.recordFlutterFatalError
ile geçersiz kılarak Flutter çerçevesi içinde oluşan tüm "önemli" hataları otomatik olarak yakalayabilirsiniz. Alternatif olarak, "önemli olmayan" istisnaları da yakalamak için FlutterError.onError
öğesini FirebaseCrashlytics.instance.recordFlutterError
ile 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şleyicisini 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 meydana gelen hataları yakalamak için mevcut Isolate
öğesine bir hata işleyici 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ızdaki kilitlenmeleri otomatik olarak bildirmenin yanı sıra, önemli olmayan istisnaları kaydetmenize olanak tanır ve bir sonraki önemli etkinlik bildirildiğinde veya uygulama yeniden başlatıldığında bu istisnaları size gönderir.
Uygulamanızın yakalama bloklarına önemli olmayan istisnaları kaydetmek için recordError
yöntemini kullanın. Örnek:
await FirebaseCrashlytics.instance.recordError(
error,
stackTrace,
reason: 'a non-fatal error'
);
// Or you can use:
await FirebaseCrashlytics.instance.recordFlutterError(errorDetails);
Ayrıca, information
özelliğini kullanarak hatayla ilgili daha fazla bilgiyi 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 özel bir arka plan iş parçacığında istisnaları işler. Kullanıcılarınızın ağ trafiğini azaltmak için Crashlytics, gerekirse cihaz dışına gönderilen rapor sayısını sınırlandırır.
Özel anahtar ekle
Özel anahtarlar, uygulamanızın kilitlenmeye yol açan belirli durumunu öğrenmenize yardımcı olur. Rastgele anahtar/değer çiftlerini kilitlenme raporlarınızla ilişkilendirebilir, ardından özel anahtarları kullanarak Firebase konsolunda kilitlenme raporlarını arayabilir ve filtreleyebilirsiniz.
Crashlytics kontrol panelinde, özel bir anahtarla eşleşen sorunları arayabilirsiniz.
Konsolda belirli bir sorunu incelerken, her bir 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. Bazı örnekler:
// 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ı ekleyin
Kilitlenmeye yol açan etkinliklerle ilgili daha fazla bilgi sağlamak için uygulamanıza özel Crashlytics günlükleri ekleyebilirsiniz. Crashlytics, günlükleri kilitlenme verilerinizle ilişkilendirir ve Firebase konsolundaki Crashlytics Günlükler sekmesinde görüntüler.
Sorunları tespit etmek için log
kullanın. Örnek:
FirebaseCrashlytics.instance.log("Higgs-Boson detected! Bailing out");
Kullanıcı tanımlayıcıları ayarlama
Bir sorunu teşhis etmek için, belirli bir kilitlenmeyi hangi kullanıcılarınızın yaşadığını bilmek genellikle yararlıdır. Crashlytics, kilitlenme raporlarınızda kullanıcıları anonim olarak tanımlamanızı sağlayan bir yol sunar.
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ş dizeye sıfırlayın. Bir kullanıcı tanımlayıcısının temizlenmesi, mevcut Crashlytics kayıtlarını kaldırmaz. Bir kullanıcı kimliğiyle ilişkili kayıtları silmeniz gerekiyorsa Firebase destek ekibiyle iletişime geçin.
İçerik haritası günlüklerini alma
İçerik haritası günlükleri, kullanıcıların uygulamanızla, kilitlenme, önemli olmayan veya ANR olaylarına neden olan etkileşimlerini daha iyi anlamanızı 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 desteklenmektedir. Bu nedenle, içerik haritası günlüklerini almak amacıyla Firebase projeniz için Google Analytics'i etkinleştirmeniz ve uygulamanıza Google Analytics için Firebase SDK'sını eklemeniz gerekir. Bu gereksinimler karşılandıktan sonra, sorunun ayrıntılarını görüntülediğinizde içerik haritası günlükleri, etkinlik verilerine otomatik olarak eklenir. Günlükler sekmesine eklenir.
Analytics SDK'sı, screen_view
etkinliğini otomatik olarak günlüğe kaydeder. Böylece içerik haritası günlüklerinde, kilitlenme, önemli olmayan veya ANR etkinliğinden önce görüntülenen ekranların listesi gösterilir. screen_view
içerik haritası günlüğü, firebase_screen_class
parametresi içerir.
İçerik haritası günlükleri, etkinliğin parametre verileri dahil olmak üzere, kullanıcının oturumunda manuel olarak günlüğe kaydettiğiniz tüm özel etkinliklerle de doldurulur. Bu veriler; kilitlenme, önemli olmayan veya ANR etkinliğine yol açan bir dizi kullanıcı işlemini göstermeye yardımcı olabilir.
İçerik haritası günlüklerini dolduran verileri içeren Google Analytics verilerinin toplanmasını ve kullanılmasını kontrol edebileceğinizi unutmayın.
Raporlamaya dahil olmayı etkinleştir
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ğı sağlamak için otomatik raporlamayı devre dışı bırakarak ve Crashlytics'e yalnızca kodunuzda istediğiniz zaman veri göndererek kayıt 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
Otomatik toplamayı kapatmak için
AndroidManifest.xml
dosyanızınapplication
bloğuna birmeta-data
etiketi ekleyin:<meta-data android:name="firebase_crashlytics_collection_enabled" android:value="false" />
- Tuş:
Çalışma zamanında Crashlytics veri toplama geçersiz kılmasını çağırarak belirli kullanıcılar için veri toplamayı etkinleştirin.
Geçersiz kılma değeri, uygulamanızın kullanıma sunulduğu tüm platformlarda aynı kalır. Böylece Crashlytics, raporları otomatik olarak toplayabilir. Otomatik kilitlenme raporlarını devre dışı bırakmak için geçersiz kılma değeri olarak
false
değerini iletin.false
olarak ayarlandığında yeni değer, uygulamanın bir sonraki çalıştırılmasına kadar geçerli olmaz.FirebaseCrashlytics.instance.setCrashlyticsCollectionEnabled(true);
Crash Insights verilerini yönetme
Crash Insights, anonimleştirilmiş yığın izlerinizi diğer Firebase uygulamalarındaki izlerle karşılaştırarak ve sorununuzun daha büyük bir eğilimin parçası olup olmadığını size bildirerek sorunları çözmenize yardımcı olur. Crash Insights, birçok sorun için kilitlenme hatalarını ayıklamanıza yardımcı olacak kaynaklar da sağlar.
Crash Insights, yaygın kararlılık trendlerini belirlemek için birleştirilmiş kilitlenme verilerini kullanır. Uygulamanızın verilerini paylaşmak istemiyorsanız Firebase konsolunda Crashlytics sorun listenizin üst kısmında bulunan Crash Insights menüsünden Kilitlenme Analizleri'ni devre dışı bırakabilirsiniz.