Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

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

Koleksiyonlar ile düzeninizi koruyun İçeriği tercihlerinize göre kaydedin ve kategorilere ayırın.

Bu kılavuz, Crashlytics API'lerini kullanarak kilitlenme raporlarınızı nasıl özelleştireceğinizi açıklar. Varsayılan olarak Crashlytics, uygulamanızın tüm kullanıcıları için platforma özgü kilitlenme raporlarını otomatik olarak toplar (ayrıca otomatik kilitlenme raporlamasını kapatabilir ve bunun yerine kullanıcılarınız için katılım raporlamasını etkinleştirebilirsiniz). Crashlytics, kullanıma hazır beş günlüğe kaydetme mekanizması sağlar: özel anahtarlar , özel günlükler , kullanıcı tanımlayıcıları , yakalanan ve yakalanmayan istisnalar.

Flutter uygulamaları için önemli raporlar, kullanıcının uygulamayı yeniden başlatmasına gerek kalmadan gerçek zamanlı olarak Crashlytics'e gönderilir. Önemli olmayan raporlar, bir sonraki önemli raporla birlikte veya uygulama yeniden başlatıldığında gönderilmek üzere diske yazılır.

Yakalanmayan istisnaları bildir

FirebaseCrashlytics.instance.recordFlutterFatalError FlutterError.onError ile geçersiz kılarak, Flutter çerçevesi içinde oluşturulan tüm "önemli" hataları otomatik olarak yakalayabilirsiniz. Alternatif olarak, "önemli olmayan" istisnaları da yakalamak için FirebaseCrashlytics.instance.recordFlutterError FlutterError.onError 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

Zaman uyumsuz 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 bir hata dinleyicisi kurun:

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 çökmelerini otomatik olarak bildirmenin yanı sıra, önemli olmayan istisnaları kaydetmenize olanak tanır ve bir sonraki ölümcül olay bildirildiğinde veya uygulama yeniden başlatıldığında bunları size gönderir.

Uygulamanızın yakalama bloklarında ö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 olası hata hakkında daha fazla bilgi 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 çökmelerden aldığınız tüm durum bilgilerinin yanı sıra sürüm ve donanım aygıtına göre arızaları içerir.

Crashlytics, uygulamanızın performans 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 raporların sayısını oran-sınırlandırır.

Özel anahtarlar ekle

Özel anahtarlar, uygulamanızın çökmeye neden olan belirli durumunu anlamanıza yardımcı olur. Rastgele 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 panosunda , özel bir anahtarla eşleşen sorunları arayabilirsiniz.

  • Konsolda belirli bir sorunu incelerken, her olay için ilişkili özel anahtarları görüntüleyebilir ( Anahtarlar alt sekmesi) ve hatta olayları ö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 neden olan olaylar hakkında kendinize daha fazla bağlam sağlamak için uygulamanıza özel Crashlytics günlükleri ekleyebilirsiniz. Crashlytics, günlükleri kilitlenme verilerinizle ilişkilendirir ve bunları Crashlytics Günlükleri sekmesi altındaki Firebase konsolunda görüntüler.

Sorunları saptamaya 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ı ayarla

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

FirebaseCrashlytics.instance.setUserIdentifier("12345");

Ayarladıktan sonra bir kullanıcı tanımlayıcısını 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 desteği ile iletişime geçin .

Kaydolma 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 yalnızca kodunuzda seçtiğinizde Crashlytics'e veri göndererek katılım raporlamasını etkinleştirebilirsiniz:

  1. Otomatik toplamayı yerel olarak kapatın:

    Apple platformları

    Info.plist dosyanıza yeni bir anahtar ekleyin:

    • Anahtar: FirebaseCrashlyticsCollectionEnabled
    • Değer: false

    Android

    AndroidManifest.xml dosyanızın application bloğuna, otomatik toplamayı kapatmak için 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ılmayı çağırarak belirli kullanıcılar için toplamayı etkinleştirin.

    Geçersiz kılma değeri, uygulamanızın lansmanları 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 izlemelerinizi diğer Firebase uygulamalarından gelen 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. Birçok sorun için Crash Insights, kilitlenmede hata ayıklamanıza yardımcı olacak kaynaklar bile 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 ederseniz, Firebase konsolundaki Crashlytics sorun listenizin üst kısmındaki Crash Insights menüsünden Crash Insights'ı devre dışı bırakabilirsiniz.