Crashlytics kontrol panelinde bir sorunu tıklayarak ayrıntılı bir etkinlik raporu alabilirsiniz. Bu raporları, uygulamanızda neler olduğunu ve Crashlytics'e 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ını ve kullanıcı tanımlayıcılarını günlüğe kaydetecek şekilde donatın.
Uygulamanız Google Analytics için Firebase SDK'sını kullanıyorsa ekmek kırıntıları 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örmenizi sağlar.
Otomatik kilitlenme raporlamasını kapatın ve kullanıcılarınız için kayıt bildirmeyi etkinleştirin. Crashlytics'ü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
değerini FirebaseCrashlytics.instance.recordFlutterFatalError
ile geçersiz kılarak Flutter çerçevesinde bildirilen tüm "önemli" hataları otomatik olarak yakalayabilirsiniz. Alternatif olarak, "önemli olmayan" istisnaları da yakalamak için FlutterError.onError
değerini 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 oluşan hataları yakalamak için mevcut Isolate
cihaza 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ı bildirme
Crashlytics, uygulamanızın kilitlenmelerini otomatik olarak bildirmenin yanı sıra önemli olmayan istisnaları kaydetmenize olanak tanır ve bir sonraki önemli olay bildirildiğinde veya uygulama yeniden başlatıldığında bunları size gönderir.
Uygulamanızın yakalama 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);
Hatayla ilgili daha fazla bilgiyi information
mülkünü kullanarak da 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 cihazdan gönderilen rapor sayısını hızlandırır.
Özel anahtar ekleme
Özel anahtarlar, uygulamanızın kilitlenmesine yol açan belirli durumu öğrenmenize yardımcı olur. İsteğe bağlı anahtar/değer çiftlerini kilitlenme raporlarınızla 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ı görüntüleyebilir (Anahtarlar alt sekmesi) 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 sekmesinde Firebase konsolunda görüntüler.
Sorunları tespit etmek 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 hangi kullanıcılarınızın belirli bir kilitlenme yaşadığını bilmek yararlıdır. Crashlytics, kilitlenme raporlarınızda 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ı temizlendiğinde mevcut Crashlytics kayıtları kaldırılmaz. Bir kullanıcı kimliğiyle ilişkili kayıtları silmeniz gerekiyorsa Firebase destek ekibiyle iletişime geçin.
İçerik haritası günlüklerini alma
Kırıntı günlükleri, kullanıcının uygulamanızla yaptığı ve kilitlenme, ölümcül olmayan veya ANR etkinliğine yol açan etkileşimleri 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 için Firebase projenizde Google Analytics'i etkinleştirmeniz ve Google Analytics için Firebase SDK'sını uygulamanıza 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 sekmesine otomatik olarak etkinlik verileri eklenir.
Analytics SDK'sı, screen_view
etkinliğini otomatik olarak günlüğe kaydeder. Bu sayede, içerik haritası günlükleri kilitlenme, ölümcül olmayan veya ANR etkinliğinden önce görüntülenen ekranların listesini gösterebilir. screen_view
içerik haritası günlüğü bir firebase_screen_class
parametresi içeriyor.
Kırıntı günlükleri, etkinliğin parametre verileri de dahil olmak üzere kullanıcı oturumunda manuel olarak kaydettiğiniz tüm özel etkinliklerle de doldurulur. Bu veriler, kilitlenmeye, ölümcül olmayan bir kilitlenmeye 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 arasında, içerik haritası günlüklerini dolduran veriler de bulunur.
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 sahibi olma imkanı tanımak için otomatik raporlamayı devre dışı bırakarak ve yalnızca kodunuzda Crashlytics'ye veri göndermeyi seçtiğinizde etkinleştirerek etkinleştirmeyi etkinleştirebilirsiniz:
Otomatik toplamayı doğal olarak devre dışı bırakma:
Apple platformları
Info.plist
dosyanıza yeni bir anahtar ekleyin:- Anahtar:
FirebaseCrashlyticsCollectionEnabled
- Değer:
false
Android
Otomatik toplamayı devre dışı bırakmak için
AndroidManifest.xml
dosyanızınapplication
bloğuna birmeta-data
etiketi ekleyin:<meta-data android:name="firebase_crashlytics_collection_enabled" android:value="false" />
- Anahtar:
Çalışma zamanında Crashlytics veri toplama geçersiz kılma işlevini çağırarak veri toplamayı belirli kullanıcılar için etkinleştirin.
Üzeride yazılma değeri, uygulamanızın her lansmanında devam eder. Böylece Crashlytics, raporları otomatik olarak toplayabilir. Otomatik kilitlenme raporlaması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
Kilitlenme Analizleri, anonimleştirilmiş yığın izlemelerinizi diğer Firebase uygulamalarından alınan izlemelerle karşılaştırarak ve sorununuzun daha büyük bir trendin parçası olup olmadığını bildirerek sorunları çözmenize yardımcı olur. Kilitlenme Analizleri, birçok sorun için kilitlenmeyi ayıklamanıza yardımcı olacak kaynaklar bile 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 istemezseniz Firebase konsolunda Crashlytics sorun listenizin üst kısmındaki Kilitlenme Analizleri menüsünden Kilitlenme Analizleri'ni devre dışı bırakabilirsiniz.