Firebase Crashlytics kilitlenme raporlarınızı özelleştirme

Crashlytics kontrol panelinde, bir sorunu tıklayıp ayrıntılı 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ı bildir

FlutterError.onError öğesini 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 öğ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 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);

Rapor yakalanan istisnalar

Crashlytics, uygulamanızın kilitlenmelerini otomatik olarak bildirmenin yanı sıra önemli olmayan istisnaları da kaydetmenizi sağlar ve tekrar önemli bir etkinlik bildirildiğinde veya uygulama yeniden başlatıldığında size gönderir.

Uygulamanızın yakalama bloklarındaki ö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 bilgi 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 anahtarlar ekleyin

Özel anahtarlar, kilitlenmeye yol açan uygulama 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ı arayıp filtreleyebilirsiniz.

  • 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, 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 birkaç örnek 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ı ekleyin

Kilitlenmeye yol açan olaylarla ilgili kendinize 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ı belirlemeye yardımcı olması için log kullanın. Örnek:

FirebaseCrashlytics.instance.log("Higgs-Boson detected! Bailing out");

Kullanıcı tanımlayıcılarını 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ımlayabileceğiniz bir yöntem 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 onu temizlemeniz 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 destek ekibiyle iletişime geçin.

İçerik haritası günlüklerini alma

İçerik haritası günlükleri, kullanıcıların uygulamanızda kurduğu, kilitlenmeye, önemli olmayan veya ANR etkinliğine neden olan etkileşimleri daha iyi anlamanızı sağlar. Bu günlükler, bir sorunu yeniden oluşturup 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ülediğinizde içerik haritası günlükleri Günlükler sekmesine etkinlik verileriyle otomatik olarak eklenir.

Analytics SDK'sı screen_view etkinliğini otomatik olarak günlüğe kaydeder. Bu etkinlik, içerik haritası günlüklerinde kilitlenme, önemli olmayan veya ANR etkinliğinden önce görüntülenen ekranların listesini göstermesini sağlar. screen_view içerik haritası günlüğü firebase_screen_class parametresi içeriyor.

İçerik haritası günlükleri, etkinliğin parametre verileri de dahil olmak üzere kullanıcının oturumunda manuel olarak girdiğiniz tüm özel etkinliklerle doldurulur. Bu veriler; kilitlenme, önemli olmayan veya ANR etkinliğiyle sonuçlanan 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ımını kontrol edebileceğinizi unutmayın.

Kayıt raporlamayı etkinleştir

Crashlytics, varsayılan olarak uygulamanızın tüm kullanıcıları için kilitlenme raporlarını otomatik olarak toplar. Kullanıcıların gönderdikleri veriler üzerinde daha fazla kontrol sahibi olmaları için otomatik raporlamayı devre dışı bırakarak ve sadece kodunuzda istediğiniz zaman Crashlytics'e veri göndererek kayıt raporlamayı etkinleştirebilirsiniz:

  1. Otomatik toplamayı yerel olarak devre dışı bırakın:

    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ın application bloğuna bir meta-data etiketi ekleyin:

    <meta-data
        android:name="firebase_crashlytics_collection_enabled"
        android:value="false" />
    
  2. Ç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 lansmanları boyunca da 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

Crash Insights, anonimleştirilmiş yığın izlerinizi diğer Firebase uygulamalarındaki izlerle karşılaştırarak ve sorununuzun daha büyük bir trendin parçası olup olmadığını bildirerek sorunları çözmenize yardımcı olur. Crash Insights, çoğu sorun için kilitlenmede hata 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 istemiyorsanız Firebase konsolundaki Crashlytics sorun listenizin üst kısmındaki Crash Insights menüsünden Crash Insights'ı devre dışı bırakabilirsiniz.