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

Bu kılavuz, Firebase Crashlytics SDK'yı kullanarak kilitlenme raporlarınızı nasıl özelleştireceğinizi açıklar. Varsayılan olarak, Crashlytics otomatik olarak tüm uygulamanızın kullanıcılar (Otomatik Kilitlenme raporu kapatıp açabilir için çökme raporları toplar raporlama opt-etkinleştirmek yerine kullanıcılar için). : Crashlytics dört kutudan günlük mekanizmalar sağlar özel anahtarlar , özel günlükleri , kullanıcı tanımlayıcıları ve yakalandı istisnalar .

Özel anahtarlar ekle

Özel anahtarlar, uygulamanızın çökmeye neden olan belirli durumunu anlamanıza yardımcı olur. Keyfi 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.

  • In Crashlytics pano , özel bir anahtarla eşleşmesi konularda arama yapabilirsiniz.
  • Konsolda belirli bir sorunu incelerken, her bir etkinlik (Tuşlar alt sekmesi) ve hatta özel tuşlar ile olayları filtrelemek (sayfanın üst kısmında Filtre menüsü) için ilişkili özel anahtarlar görüntüleyebilirsiniz.

Kullanım setCustomValue grubu anahtar / değer çiftleri için yöntem. Örneğin:

Süratli

// Set int_key to 100.
Crashlytics.crashlytics().setCustomValue(100, forKey: "int_key")

// Set str_key to "hello".
Crashlytics.crashlytics().setCustomValue("hello", forKey: "str_key")

Amaç-C

Tamsayılar, Boolean veya yüzer ayarlarken, olarak değer kutu @( value ) .

// Set int_key to 100.
[[FIRCrashlytics crashlytics] setCustomValue:@(100) forKey:@"int_key"];

// Set str_key to "hello".
[[FIRCrashlytics crashlytics] setCustomValue:@"hello" forKey:@"str_key"];

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

Süratli

Crashlytics.crashlytics().setCustomValue(100, forKey: "int_key")

// Set int_key to 50 from 100.
Crashlytics.crashlytics().setCustomValue(50, forKey: "int_key")

Amaç-C

[[FIRCrashlytics crashlytics] setCustomValue:@(100) forKey:@"int_key"];

// Set int_key to 50 from 100.
[[FIRCrashlytics crashlytics] setCustomValue:@(50) forKey:@"int_key"];

Kullanarak toplu olarak anahtar / değer çiftleri ekleme setCustomKeysAndValues tek parametresi olarak NSDictionary yöntemi ile:

Süratli

let keysAndValues = [
               "string key" : "string value",
               "string key 2" : "string value 2",
               "boolean key" : true,
               "boolean key 2" : false,
               "float key" : 1.01,
               "float key 2" : 2.02
              ] as [String : Any]

Crashlytics.crashlytics().setCustomKeysAndValues(keysAndValues)

Amaç-C

NSDictionary *keysAndValues =
  @{@"string key" : @"string value",
    @"string key 2" : @"string value 2",
    @"boolean key" : @(YES),
    @"boolean key 2" : @(NO),
    @"float key" : @(1.01),
    @"float key 2" : @(2.02)};

[[FIRCrashlytics crashlytics] setCustomKeysAndValues: keysAndValues];

Ö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 ortakları arasında Crashlytics sayfasında Çökme verileri ve görüntüler bunları birlikte günlükleri Firebase konsolunun Kayıtlar sekmesi altında.

Süratli

Kullanım log() veya log(format:, arguments:) yardım belirlemekte konulara. Eğer mesajları ile yararlı bir ölçüm sonucu elde etmek istiyorsanız, nesne geçmek olduğunu log() uymalıdır CustomStringConvertible özelliği. log() nesne için tanımlar açıklama özelliği verir. Örneğin:

Crashlytics.crashlytics().log("Higgs-Boson detected! Bailing out…, \(attributesDict)")

.log(format:, arguments:) çağıran döndü biçimleri değerleri getVaList() . Örneğin:

Crashlytics.crashlytics().log(format: "%@, %@", arguments: getVaList(["Higgs-Boson detected! Bailing out…", attributesDict]))

Nasıl kullanılacağı hakkında daha fazla ayrıntı için log() veya log(format:, arguments:) , Crashlytics bakınız referans belgeleri .

Amaç-C

Kullanım log ya logWithFormat yardım belirlemekte konulara. Eğer mesajları ile yararlı bir ölçüm sonucu almak istiyorsanız, ya yönteme geçmesi nesne geçersiz kılmak gerektiğini unutmayın description örnek özelliğine. Örneğin:

[[FIRCrashlytics crashlytics] log:@"Simple string message"];

[[FIRCrashlytics crashlytics] logWithFormat:@"Higgs-Boson detected! Bailing out... %@", attributesDict];

[[FIRCrashlytics crashlytics] logWithFormat:@"Logging a variable argument list %@" arguments:va_list_arg];

Nasıl kullanılacağı hakkında daha fazla ayrıntı için log ve logWithFormat , Crashlytics bakınız referans belgeleri .

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:

Süratli

Crashlytics.crashlytics().setUserID("123456789")

Amaç-C

[[FIRCrashlytics crashlytics] setUserID:@"123456789"];

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. Eğer bir kullanıcı kimliği ile ilişkili kayıtları silmeniz gerekirse kontak Firebase desteği .

Önemli olmayan istisnaları bildirin

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

Sen kaydederek ölümcül olmayan istisnalar kaydedebilirsiniz NSError Nesneleri recordError yöntemiyle. recordError arayarak parçacığının çağrı yığını yakalar [NSThread callStackReturnAddresses] .

Süratli

Crashlytics.crashlytics().record(error: error)

Amaç-C

[[FIRCrashlytics crashlytics] recordError:error];

Kullanırken recordError yöntemi, bunu anlamak önemlidir NSError yapısını ve nasıl Crashlytics grup çöker verileri kullanır. Yanlış kullanımı recordError yöntemiyle öngörülemeyen davranışlara neden olabilir ve uygulamanız için açmış hataların raporlanması sınırına Crashlytics neden olabilir.

Bir NSError nesnenin üç bağımsız değişkeni vardır:

  • domain: String
  • code: Int
  • userInfo: [AnyHashable : Any]? = nil

Yığın izleme analizi ile gruplanmıştır ölümcül çöker farklı olarak, oturum hatalar göre gruplandırılmış domain ve code . Bu, ölümcül çökmeler ile günlüğe kaydedilen hatalar arasındaki önemli bir ayrımdır. Örneğin:

Süratli

let userInfo = [
NSLocalizedDescriptionKey: NSLocalizedString("The request failed.", comment: ""),
NSLocalizedFailureReasonErrorKey: NSLocalizedString("The response returned a 404.", comment: ""),
NSLocalizedRecoverySuggestionErrorKey: NSLocalizedString("Does this page exist?", comment: ""),
"ProductID": "123456",
"View": "MainView"
]

let error = NSError.init(domain: NSCocoaErrorDomain,
                       code: -1001,
                       userInfo: userInfo)

Amaç-C

NSDictionary *userInfo = @{
NSLocalizedDescriptionKey: NSLocalizedString(@"The request failed.", nil),
NSLocalizedFailureReasonErrorKey: NSLocalizedString(@"The response returned a 404.", nil),
NSLocalizedRecoverySuggestionErrorKey: NSLocalizedString(@"Does this page exist?", nil),
@"ProductID": @"123456",
@"View": @"MainView",
};

NSError *error = [NSError errorWithDomain:NSCocoaErrorDomain
                                   code:-1001
                               userInfo:userInfo];

Yukarıdaki hatayı giriş yaptığımda, göre gruplandırılmış olan yeni bir sorun yaratır NSSomeErrorDomain ve -1001 . Aynı etki alanını ve kod değerlerini kullanan ek günlüğe kaydedilen hatalar aynı sorun altında gruplanır. Veri bulunan userInfo nesnesi anahtar değer çiftleri dönüştürülür ve anahtarlar görüntülenen / bağımsız bir konu içinde bölümü kaydeder.

Günlükler ve özel anahtarlar

Sadece çökme raporları gibi, sen bağlam eklemek için günlükleri ve özel anahtarlar gömebilirsiniz NSError . Ancak, çökmelere hangi günlüklerin eklendiği ile günlüğe kaydedilen hatalar arasında bir fark vardır. Bir kilitlenme meydana geldiğinde ve uygulama yeniden başlatıldığında, Crashlytics'in diskten aldığı günlükler, çökme anına kadar yazılmış olan günlüklerdir. Bir oturum açtığınızda NSError uygulama hemen sona etmez. Crashlytics sadece bir sonraki uygulama başlatma oturum hata raporu gönderir ve diskteki günlükleri için ayrılan alan miktarını sınırlamak gerektiğinden sonrası, yeterince oturum mümkündür NSError böylece kaydedilir ilgili tüm günlükleri Crashlytics gönderir zaman dışarı döndürülmüş olduğunu cihazdan gelen rapor. Giriş yaparken zihnimizde bu dengeyi tutmak NSErrors ve uygulamanızda günlükleri ve özel tuşlarını kullanarak.

Performans konuları

Bir günlüğü unutmayın NSError oldukça pahalı olabilir. Aramayı yaptığınız sırada Crashlytics, yığın çözme adı verilen bir işlemi kullanarak mevcut iş parçacığının çağrı yığınını yakalar. Bu işlem, özellikle DWARF çözmeyi (arm64 ve x86) destekleyen mimarilerde CPU ve G/Ç açısından yoğun olabilir. Çözme işlemi tamamlandıktan sonra, bilgiler diske eşzamanlı olarak yazılır. Bu, bir sonraki satırın çökmesi durumunda veri kaybını önler.

Bu API'yi bir arka plan iş parçacığında çağırmak güvenli olsa da, bu çağrıyı başka bir kuyruğa göndermenin geçerli yığın izleme bağlamını kaybettiğini unutmayın.

NSException'lar ne olacak?

Crashlytics yapıp kaydetmek için bir tesis sunmuyor NSException doğrudan örneklerini. Genel olarak konuşursak, Cocoa ve Cocoa Touch API'leri istisnai olarak güvenli değildir. Araçlarının Bu kullanımı @catch son derece dikkatli kullanıldığında bile senin sürecinde çok ciddi istenmeyen yan etkileri olabilir. Sen kullanmak asla @catch Kodunuzdaki ifadeleri. Bakınız Apple'ın belgelerine konu üzerine.

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. Sizin için yeni bir anahtar ekleyerek otomatik toplama kapatma Info.plist dosyasının:

    • Anahtar: FirebaseCrashlyticsCollectionEnabled
    • Değeri: 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 kazasında raporlama devre dışı bırakmak için, geçiş false geçersiz kılma değeri olarak. Ayarlandığında false , yeni değer Uygulamanın bir sonraki dönemde dek geçerli değildir.

    Süratli

    Crashlytics.crashlytics().setCrashlyticsCollectionEnabled(true)
    

    Amaç-C

    [[FIRCrashlytics crashlytics] setCrashlyticsCollectionEnabled:YES];
    

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. Eğer uygulamanızın verilerini paylaşmamayı tercih ediyorsanız, devre dışı bırakabilirsiniz Crash Insights menüsünden Crash Insights'tan içinde Crashlytics sorun listesinin en üstünde Firebase konsoluna .