Crashlytics kontrol panelinde bir soruna tıklayıp ayrıntılı bir etkinlik raporu alabilirsiniz. Uygulamanızda neler olup bittiğini ve Crashlytics'e bildirilen olaylarla ilgili koşulları daha iyi anlamanıza yardımcı olmak için bu raporları ö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 kaydedecek şekilde ayarlayı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ı eylemlerine ilişkin görünürlük sağlar.
Otomatik kilitlenme raporlamasını kapatın ve kullanıcılarınız için isteğe bağlı raporlamayı etkinleştirin . Varsayılan olarak Crashlytics'in uygulamanızın tüm kullanıcıları için platformda yerel kilitlenme raporlarını otomatik olarak topladığını unutmayın.
Yakalanmayan istisnaları bildirin
Flutter çerçevesinde oluşturulan tüm "ölümcül" hataları, FlutterError.onError
dosyasını FirebaseCrashlytics.instance.recordFlutterFatalError
ile geçersiz kılarak otomatik olarak yakalayabilirsiniz. Alternatif olarak, "ölümcül olmayan" istisnaları da yakalamak için FlutterError.onError
dosyasını 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ının dışında meydana gelen hataları yakalamak için mevcut Isolate
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ı bildirin
Crashlytics, uygulamanızın kilitlenmelerini otomatik olarak raporlamanın yanı sıra, önemli olmayan istisnaları kaydetmenize olanak tanır ve bir sonraki önemli olay raporlandığında veya uygulama yeniden başlatıldığında bunları size gönderir.
Uygulamanızın catch bloklarına ö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);
Ayrıca information
özelliğini kullanarak mümkün olan hata hakkında 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 ölümcül olmayan sorunlar olarak görünür. Sorun özeti, normalde çökmelerden aldığınız tüm durum bilgilerinin yanı sıra sürüm ve donanım aygıtına göre dökümleri de 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. Kullanıcılarınızın ağ trafiğini azaltmak için Crashlytics, gerekirse cihazdan gönderilen raporların sayısını oran sınırlayacaktır.
Özel anahtarlar ekleyin
Özel anahtarlar, uygulamanızın çökmeye yol açacak spesifik durumunu öğrenmenize yardımcı olur. Kilitlenme raporlarınızla rastgele anahtar/değer çiftlerini 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 etkinlik için 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. İşte 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 olaylarla ilgili kendinize daha fazla bağlam kazandırmak için uygulamanıza özel Crashlytics günlükleri ekleyebilirsiniz. Crashlytics, günlükleri kilitlenme verilerinizle ilişkilendirir ve bunları Firebase konsolunda Crashlytics Günlükler sekmesi altında görüntüler.
Sorunları belirlemeye yardımcı olması için log
kullanın. Örneğin:
FirebaseCrashlytics.instance.log("Higgs-Boson detected! Bailing out");
Kullanıcı tanımlayıcılarını ayarlayın
Bir sorunu teşhis etmek için hangi kullanıcılarınızın belirli bir kilitlenmeyle karşılaştığını bilmek genellikle yararlı olur. 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ı, belirteç veya karma değeri biçiminde benzersiz bir tanımlayıcı atayın:
FirebaseCrashlytics.instance.setUserIdentifier("12345");
Bir kullanıcı tanımlayıcısını ayarladıktan sonra silmeniz gerekirse değeri boş bir 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 desteğiyle iletişime geçin .
Kırıntı günlüklerini alın
Breadcrumb günlükleri, bir kullanıcının uygulamanızla yaşadığı ve kilitlenme, ölümcül olmayan veya ANR olayına 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 yararlı olabilir.
İçerik haritası günlükleri Google Analytics tarafından desteklenir; dolayısıyla içerik haritası günlüklerini almak için Firebase projeniz için Google Analytics'i etkinleştirmeniz ve Google Analytics için Firebase SDK'sını uygulamanıza eklemeniz gerekir. Bu gereksinimler karşılandıktan sonra, bir sorunun ayrıntılarını görüntülediğinizde, kırıntı günlükleri, Günlükler sekmesindeki bir etkinliğin verilerine otomatik olarak dahil edilir.
Analytics SDK'sı screen_view
olayını otomatik olarak günlüğe kaydeder ; bu, içerik haritası günlüklerinin kilitlenme, ölümcül olmayan olay veya ANR olayından önce görüntülenen ekranların bir listesini göstermesini sağlar. Bir screen_view
içerik haritası günlüğü, bir firebase_screen_class
parametresi içerir.
İçerik haritası günlükleri ayrıca, etkinliğin parametre verileri de dahil olmak üzere, kullanıcı oturumunda manuel olarak günlüğe kaydettiğiniz tüm özel olaylarla da doldurulur. Bu veriler, kilitlenme, ölümcül olmayan olay veya ANR olayına yol açan bir dizi kullanıcı işleminin gösterilmesine 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.
Katılım raporlamasını 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 sağlamak için, otomatik raporlamayı devre dışı bırakarak ve verileri yalnızca kodunuzda seçtiğinizde Crashlytics'e göndererek isteğe bağlı raporlamayı etkinleştirebilirsiniz:
Otomatik toplamayı yerel olarak kapatın:
Apple platformları
Info.plist
dosyanıza yeni bir anahtar ekleyin:- Anahtar:
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" />
- Anahtar:
Çalışma zamanında Crashlytics veri toplamayı geçersiz kılmayı çağırarak seçili kullanıcılar için veri toplamayı etkinleştirin.
Geçersiz kılma değeri, uygulamanızın başlatılması boyunca 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 uygulanmaz.FirebaseCrashlytics.instance.setCrashlyticsCollectionEnabled(true);
Crash Insights verilerini yönetin
Crash Insights, anonimleştirilmiş yığın izlerinizi diğer Firebase uygulamalarından gelen 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. Hatta Crash Insights birçok sorun için kilitlenme hatalarını ayıklamanıza yardımcı olacak kaynaklar da sağlar.
Crash Insights, ortak kararlılık eğilimlerini belirlemek için toplu kilitlenme verilerini kullanır. Uygulamanızın verilerini paylaşmamayı tercih ediyorsanız Firebase konsolundaki Crashlytics sorun listenizin üst kısmındaki Crash Insights menüsünden Crash Insights'ı devre dışı bırakabilirsiniz.