Flutter için kilitlenme raporlarını özelleştirme

Platform seçin: iOS+ Android Flutter Unity


Firebase konsolunun DevOps ve Etkileşim > Crashlytics kontrol panelinde bir sorunu tıklayarak ayrıntılı etkinlik raporu alabilirsiniz. Uygulamanızda neler olduğunu ve Crashlytics hizmetine bildirilen etkinliklerle ilgili koşulları daha iyi anlamanıza yardımcı olması için bu raporları özelleştirebilirsiniz.

İstisnaları bildirme

Yakalanmayan istisnaları bildirme

FlutterError.onError değerini FirebaseCrashlytics.instance.recordFlutterFatalError ile geçersiz kılarak Flutter çerçevesinde oluşan tüm "önemli" hataları otomatik olarak yakalayabilirsiniz. Alternatif olarak, "önemli olmayan" istisnaları da yakalamak için FlutterError.onError yerine FirebaseCrashlytics.instance.recordFlutterError kullanı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 gerçekleşen hataları yakalamak için mevcut Isolate üzerinde bir hata dinleyici 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 olanak tanır ve önemli bir olay bildirildiğinde veya uygulama yeniden başlatıldığında bunları size gönderir.

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);

Ayrıca, information özelliğini kullanarak hatayla ilgili daha fazla bilgi de kaydedebilirsiniz:

await FirebaseCrashlytics.instance.recordError(
  error,
  stackTrace,
  reason: 'a non-fatal error',
  information: ['further diagnostic information about the error', 'version 2.0'],
);

Bu istisnalar, Firebase konsolunun DevOps ve Etkileşim > Crashlytics kontrol panelinde önemli olmayan sorunlar olarak görünür. Sorun özeti, normalde kilitlenmelerden aldığınız tüm durum bilgilerinin yanı sıra sürüm ve donanım cihazına göre dökümleri içerir.

Crashlytics, uygulamanızın performansının etkilenmesini en aza indirmek için özel bir arka plan iş parçacığında istisnaları işler. Crashlytics, kullanıcılarınızın ağ trafiğini azaltmak için gerekirse cihazdan gönderilen rapor sayısını sınırlandırır.

Özel anahtar ekleme

Özel anahtarlar, uygulamanızın kilitlenmeden önceki durumunu öğrenmenize yardımcı olur. Kilitlenme raporlarınızla rastgele anahtar/değer çiftlerini ilişkilendirebilir, ardından Firebase konsolunun DevOps & Engagement > Crashlytics kontrol panelinde kilitlenme raporlarını aramak ve filtrelemek için özel anahtarları kullanabilirsiniz.

  • Kontrol panelinde, özel anahtarla eşleşen sorunları arayabilirsiniz.

  • Kontrol panelinde 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. 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 olaylar 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 bir sorunun ayrıntılarını görüntülediğinizde Günlükler sekmesinde gösterir (tüm sorunlarınızı Firebase Console'un DevOps ve Etkileşim > Crashlytics kontrol panelinde görebilirsiniz).

Sorunları tespit etmek için log aracını kullanın. Örneğin:

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

Kullanıcı kimliklerini ayarlama

Bir sorunu teşhis etmek için genellikle hangi kullanıcılarınızın belirli bir kilitlenme yaşadığını bilmek faydalı olur. 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 değer biçiminde benzersiz bir tanımlayıcı atayın:

FirebaseCrashlytics.instance.setUserIdentifier("12345");

Ayarladığınız bir kullanıcı kimliğini temizlemeniz gerekirse değeri boş bir dizeye sıfırlayın. Kullanıcı kimliğini temizlemek, mevcut Crashlytics kayıtlarını kaldırmaz. Bir kullanıcı kimliğiyle ilişkili kayıtları silmeniz gerekiyorsa Firebase Destek Ekibi ile iletişime geçin.

Breadcrumb günlüklerini alma

Breadcrumb kayıtları, bir kullanıcının kilitlenme, önemli olmayan hata veya ANR etkinliğine yol açan uygulama 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.

Breadcrumb kayıtları Google Analytics tarafından desteklenir. Bu nedenle, breadcrumb kayıtlarını almak için Firebase projenizde Google Analytics'i etkinleştirmeniz ve uygulamanıza Google Analytics için Firebase SDK'sını eklemeniz gerekir. Bu koşullar karşılandıktan sonra, bir sorunun ayrıntılarını görüntülerken breadcrumb kayıtları Kayıtlar sekmesindeki etkinlik verilerine otomatik olarak dahil edilir (Tüm sorunlarınızı Firebase konsolunun DevOps ve Etkileşim > Crashlytics kontrol panelinde görebilirsiniz).

Analytics SDK'sı, screen_view etkinliğini otomatik olarak günlüğe kaydeder. Bu sayede breadcrumb kayıtları, kilitlenme, önemli olmayan hata veya ANR etkinliğinden önce görüntülenen ekranların listesini gösterebilir. screen_view breadcrumb kaydı, firebase_screen_class parametresi içeriyor.

Breadcrumb kayıtları, kullanıcının oturumu içinde manuel olarak kaydettiğiniz tüm özel etkinliklerle (etkinliğin parametre verileri dahil) doldurulur. Bu veriler, kilitlenme, önemli olmayan hata veya ANR etkinliğine yol açan bir dizi kullanıcı işlemini gösterebilir.

Breadcrumb kayıtlarını dolduran veriler de dahil olmak üzere Google Analytics verilerinin toplanmasını ve kullanılmasını kontrol edebileceğinizi unutmayın.

Etkinleştirme raporlamasını etkinleştirme

Crashlytics, uygulamanızın tüm kullanıcıları için kilitlenme raporlarını varsayılan olarak otomatik olarak toplar. Kullanıcılara gönderdikleri veriler üzerinde daha fazla kontrol sağlamak için otomatik raporlamayı devre dışı bırakıp yalnızca kodunuzda seçtiğinizde Crashlytics hizmetine veri göndererek raporlamaya dahil olmayı etkinleştirebilirsiniz.

  1. 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ı 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ı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şlemlerinde geçerli olur. Böylece Crashlytics, söz konusu kullanıcı için otomatik olarak rapor toplayabilir.

    FirebaseCrashlytics.instance.setCrashlyticsCollectionEnabled(true);
    

    Kullanıcı daha sonra veri toplamayı kapsamı dışında kalmayı seçerse geçersiz kılma değeri olarak false değerini iletebilirsiniz. Bu değer, kullanıcı uygulamayı bir sonraki başlatışında uygulanır ve kullanıcının sonraki tüm başlatma işlemlerinde geçerli olur.

Crash Insights verilerini yönetme

Crash Insights, 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ı size bildirerek sorunları çözmenize yardımcı olur. Crash Insights, birçok sorun için kilitlenmeyle ilgili hata 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 konsolunun DevOps ve Etkileşim > Crashlytics kontrol panelindeki sorun listesinin üst kısmında bulunan Crash Insights menüsünden Crash Insights'ı devre dışı bırakabilirsiniz.

Sonraki adımlar