Android 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.

Ö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 ve Etkileşim > Crashlytics kontrol panelinde kilitlenme raporlarını aramak ve filtrelemek için özel anahtarları kullanabilirsiniz.

  • Ö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. setCustomKey, value parametresi için aşırı yüklenmiştir ve herhangi bir temel veya String bağımsız değişkenini kabul eder. Aşağıda bazı örnekler verilmiştir:

Kotlin

val crashlytics = Firebase.crashlytics
crashlytics.setCustomKeys {
    key("my_string_key", "foo") // String value
    key("my_bool_key", true) // boolean value
    key("my_double_key", 1.0) // double value
    key("my_float_key", 1.0f) // float value
    key("my_int_key", 1) // int value
}

Java

FirebaseCrashlytics crashlytics = FirebaseCrashlytics.getInstance();

crashlytics.setCustomKey("my_string_key", "foo" /* string value */);

crashlytics.setCustomKey("my_bool_key", true /* boolean value */);

crashlytics.setCustomKey("my_double_key", 1.0 /* double value */);

crashlytics.setCustomKey("my_float_key", 1.0f /* float value */);

crashlytics.setCustomKey("my_int_key", 1 /* int value */);

Mevcut bir anahtarın değerini, anahtarı çağırıp farklı bir değere ayarlayarak da değiştirebilirsiniz. Örneğin:

Kotlin

val crashlytics = Firebase.crashlytics
crashlytics.setCustomKeys {
    key("current_level", 3)
    key("last_UI_action", "logged_in")
}

Java

FirebaseCrashlytics crashlytics = FirebaseCrashlytics.getInstance();

crashlytics.setCustomKey("current_level", 3);
crashlytics.setCustomKey("last_UI_action", "logged_in");

CustomKeysAndValues örneğini setCustomKeys örnek yöntemine ileterek anahtar/değer çiftlerini toplu olarak ekleyin:

Kotlin

Kotlin'de mevcut işlev, CustomKeysAndValues oluşturucuyu kullanmaktan daha basittir.

crashlytics.setCustomKeys {
  key("str_key", "hello")
  key("bool_key", true)
  key("int_key", 1)
  key("long_key", 1L)
  key("float_key", 1.0f)
  key("double_key", 1.0)
}

Java

CustomKeysAndValues keysAndValues = new CustomKeysAndValues.Builder()
.putString("string key", "string value")
.putString("string key 2", "string  value 2")
.putBoolean("boolean key", True)
.putBoolean("boolean key 2", False)
.putFloat("float key", 1.01)
.putFloat("float key 2", 2.02)
.build();

FirebaseCrashlytics.getInstance().setCustomKeys(keysAndValues);

Ö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:

Kotlin

Firebase.crashlytics.log("message")

Java

FirebaseCrashlytics.getInstance().log("message");

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:

Kotlin

Firebase.crashlytics.setUserId("user123456789")

Java

FirebaseCrashlytics.getInstance().setUserId("user123456789");

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.

(Yalnızca Android NDK) NDK kilitlenme raporlarına meta veri ekleme

NDK kilitlenme raporlarına özel anahtarlar, özel günlükler, kullanıcı kimlikleri gibi meta veriler eklemek için isteğe bağlı olarak C++ kodunuza crashlytics.h başlığını ekleyebilirsiniz. Tüm bu seçenekler bu sayfanın üst kısmında açıklanmıştır.

crashlytics.h, Firebase Android SDK GitHub deposunda yalnızca başlık içeren bir C++ kitaplığı olarak kullanılabilir.

NDK C++ API'lerini kullanma talimatları için üst dosyadaki yorumları okuyun.

Bellek bozulması sorunlarını ayıklamak için GWP-ASan raporlarını ekleme

Crashlytics, GWP-ASan raporlarını toplayarak yerel bellek hatalarından kaynaklanan kilitlenmelerde hata ayıklamanıza yardımcı olabilir. Bellekle ilgili bu hatalar, uygulamanızdaki bellek bozulmasıyla ilişkilendirilebilir. Bellek bozulması, uygulama güvenliği açıklarının başlıca nedenidir.

Firebase Console'un DevOps ve Etkileşim > Crashlytics kontrol panelinde bu verilerle şunları yapabilirsiniz:

  • Bir sorunun ayrıntılarını tıkladığınızda bu verileri yeni "Bellek yığın izlemeleri" sekmesinde görüntüleyebilirsiniz.

  • Bu verilerle ilgili tüm sorunları hızlıca görüntülemek için yeni "GWP-ASan raporu" sinyalini ve filtresini kullanabilirsiniz.

Uygulamanızda GWP-ASan'ı açıkça etkinleştirirseniz ve NDK v18.3.6+ (Firebase BoM v31.3.0+) için Crashlytics SDK'sını kullanırsanız GWP-ASan bellek raporlarını alabilirsiniz. GWP-ASan kurulumunuzu Android belgelerindeki örnek yerel kodu kullanarak test edebilirsiniz.

Önemli olmayan istisnaları bildirme

Crashlytics, uygulamanızın kilitlenmelerini otomatik olarak bildirmenin yanı sıra, önemli olmayan istisnaları kaydetmenize ve uygulamanız bir sonraki başlatıldığında bunları size göndermenize olanak tanır.

Uygulamanızın catch bloklarındaki önemli olmayan istisnaları kaydetmek için recordException yöntemini kullanın. Örneğin:

Kotlin

try {
    methodThatThrows()
} catch (e: Exception) {
    Firebase.crashlytics.recordException(e)
    // handle your exception here
}

Java

try {
    methodThatThrows();
} catch (Exception e) {
    FirebaseCrashlytics.getInstance().recordException(e);
    // handle your exception here
}

Ayrıca, belirli önemli olmayan istisnalara özel anahtarlar da ekleyebilirsiniz. Örneğin:

Kotlin

try {
    methodThatThrows()
} catch (e: Exception) {
    Firebase.crashlytics.recordException(e) {
        key("string key", "string value")
        key("boolean key", true)
        key("float key", Float.MAX_VALUE)
    }
    // handle your exception here
}

Java

try {
    methodThatThrows();
} catch (Exception e) {
    CustomKeysAndValues keysAndValues = new CustomKeysAndValues.Builder()
            .putString("string key", "string value")
            .putBoolean("boolean key", true)
            .putFloat("float key", Float.MAX_VALUE)
            .build();
    FirebaseCrashlytics.getInstance().recordException(e, keysAndValues);
    // handle your exception here
}

Kaydedilen tüm 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 Android 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 günlüğe kaydedilen istisnaları bir araya getirir ve uygulama bir sonraki sefer başlatıldığında gönderir.

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 günlükleri, kullanıcının oturumu içinde manuel olarak günlüğe kaydettiğiniz tüm özel etkinliklerle (etkinliğin parametre verileri dahil) de 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ı 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.

    Kotlin

    Firebase.crashlytics.setCrashlyticsCollectionEnabled(true)

    Java

    FirebaseCrashlytics.getInstance().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