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

Crashlytics kontrol panelinde bir sorunu tıklayıp ayrıntılı bir şekilde etkinlik raporu. Bu raporları, özel kampanyaları daha iyi anlamanıza yardımcı olacak şekilde özelleştirebilirsiniz. uygulamanızda neler olduğunu ve kendilerine bildirilen etkinliklerle ilgili koşulları Crashlytics.

  • Uygulamanız Google Analytics için Firebase SDK'sı. Bu günlükler, Uygulamanızda Crashlytics tarafından toplanan bir etkinlikle sonuçlanan kullanıcı işlemleri.

  • Otomatik kilitlenme raporlamasını kapatın ve Kullanıcılarınız için kayıt raporlamasını etkinleştirmeniz gerekir. Ancak, Crashlytics, varsayılan olarak tüm cihazlarınız için kilitlenme raporlarını kullanıcılara ulaşabiliyoruz.

Ö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 ve ardından, özel anahtarları kullanarak Firebase konsolunda kilitlenme raporlarını arayıp filtreleyebilirsiniz.

  • Crashlytics kontrol panelinde sorunları arayabilirsiniz eşleşen yeni bir etiket oluşturabilirsiniz.
  • Konsolda belirli bir sorunu incelerken her etkinlik için ilişkili özel anahtarlar kullanabilir (Anahtarlar alt sekmesi) ve hatta etkinlikleri özel anahtarlara göre (sayfanın üst kısmındaki Filtre menüsü) tıklayın.
ziyaret edin.

Anahtar/değer çiftlerini ayarlamak için setCustomValue yöntemini kullanın. Örneğin:

Swift

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

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

Objective-C

Tam sayılar, boole değerleri veya kayan noktalı değerleri ayarlarken değeri @(value) olarak kutulayın.

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

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

Mevcut bir anahtarın değerini, anahtarı ve ayarı çağırarak da değiştirebilirsiniz farklı bir değere ayarlayabilirsiniz. Örneğin:

Swift

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

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

Objective-C

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

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

setCustomKeysAndValues yöntemini kullanarak toplu anahtar/değer çiftlerini Tek parametre olarak NSDictionary:

Swift

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)

Objective-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

Bir kilitlenmeye yol açan etkinliklerle ilgili daha fazla bağlam bilgisi sağlamak için özel Crashlytics günlüklerini kullanabilirsiniz. Crashlytics, günlükleri ilişkilendirir bu verileri kilitlenmenizi sağlar ve Google Play'in Crashlytics sayfasında Firebase konsolunda, Günlükler sekmesi altında.

Swift

Sorunların belirlenmesine yardımcı olması için log() veya log(format:, arguments:) kullanın. Şu durumda: mesaj içeren kullanışlı bir günlük çıkışı almak istiyorsanız log(), CustomStringConvertible log(), kendisi için tanımladığınız açıklama özelliğini döndürür izin verir. Örneğin:

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

Çağrıdan döndürülen .log(format:, arguments:) biçim değerleri getVaList(). Örneğin:

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

log() veya log(format:, arguments:) özelliğinin nasıl kullanılacağıyla ilgili daha ayrıntılı bilgi için Crashlytics'e bakın referans belgeleri.

Objective-C

Sorunların belirlenmesine yardımcı olması için log veya logWithFormat kullanın. mesaj içeren kullanışlı bir günlük çıkışı almak istiyorsanız iki yöntemin de description örnek özelliğini geçersiz kılması gerekir. Ö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];

log ve logWithFormat işlemlerinin nasıl kullanılacağı hakkında daha fazla bilgi için Crashlytics referans belgeleri.

Kullanıcı tanımlayıcılarını ayarlama

Bir sorunu teşhis etmek için, hangi kullanıcılarınızın sorunla karşılaştığını bilmek genellikle yararlıdır en iyi yöntemin ne olduğunu öğreneceğiz. Crashlytics, Google Cloud'daki kullanıcıları anonim olarak kilitlenme raporları gösterilmektedir.

Raporlarınıza kullanıcı kimlikleri eklemek için bir kimlik numarası, jeton veya karma oluşturma işlemi uygulanmış değer biçimi:

Swift

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

Objective-C

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

Bir kullanıcı tanımlayıcısını ayarladıktan sonra onu temizlemeniz gerekirse değeri şu şekilde sıfırlayın: boş bir dize. Bir kullanıcı tanımlayıcısı temizlendiğinde mevcut tanımlayıcılar Crashlytics kayıtları. Bir kullanıcıyla ilişkili kayıtları silmeniz gerekiyorsa Kimliği, Firebase destek ekibiyle iletişime geçin.

Önemli olmayan istisnaları bildirin

Crashlytics, uygulamanızın kilitlenmelerini otomatik olarak bildirmenin yanı sıra, önemli olmayan istisnaları kaydedersiniz ve uygulamanız bir dahaki sefere bu istisnaları size gönderir lansman sonrasında gerçekleşebilir.

NSError nesneyi şurada kaydederek önemli olmayan istisnaları kaydedebilirsiniz: recordError yöntemini çağırın. recordError, şunu çağırarak ileti dizisinin çağrı yığınını yakalar: [NSThread callStackReturnAddresses].

Swift

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

Objective-C

[[FIRCrashlytics crashlytics] recordError:error];

recordError yöntemini kullanırken NSError konusunu anlamak önemlidir. yapısı ve Crashlytics'in kilitlenmeleri gruplandırmak için verileri nasıl kullandığı hakkında bilgi verilmektedir. Yanlış recordError yönteminin kullanılması, öngörülemez davranışlara neden olabilir ve Crashlytics, uygulamanız için günlüğe kaydedilen hataların raporlanmasını sınırlandırır.

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

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

Yığın izleme analiziyle gruplanan önemli kilitlenmelerin aksine, günlüğe kaydedilen hatalar domain ve code grubuna göre gruplandırılır. Bu, proje yönetiminin önemli kilitlenmeler ile günlüğe kaydedilen hatalar arasındaki anlamına bakın. Örneğin:

Swift

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)

Objective-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ı günlüğe kaydettiğinizde şuna göre gruplandırılmış yeni bir sorun oluşturulur: NSSomeErrorDomain ve -1001. Aynı alan ve kod değerleri aynı sorun altında gruplandırılır. İçinde bulunduğu veriler userInfo nesnesi anahtar/değer çiftlerine dönüştürülür ve bu nesnel anahtar/günlükler bölümü kullanılabilir.

Günlükler ve özel anahtarlar

Kilitlenme raporlarında olduğu gibi, bağlam bilgisi eklemek için günlükleri ve özel anahtarları yerleştirebilirsiniz. NSError. Ancak, günlüklerin eklendiği veriler arasında bir fark vardır kayıtlı hatalarla karşılaştırabilirsiniz. Bir kilitlenme gerçekleştiğinde uygulama yeniden başlatıldığında, Crashlytics'in diskten aldığı günlük kayıtları, kilitlenmenin zamanı geldi. Bir NSError günlüğe kaydedildiğinde uygulama hemen feshedebilir. Crashlytics, yalnızca Search Console'da günlüğe kaydedilen hata raporunu bir sonraki uygulama lansmanında belirlemeniz gerekir ve diskteki günlükler için NSError kaydedildikten sonra yeterli düzeyde günlük kaydı yapılabilir. Böylece, ilgili tüm günlükler, Crashlytics'in raporu olanak tanır. NSErrors günlük kaydını yaparken ve günlükleri kullanırken bu dengeyi aklınızda bulundurun. ekleyebilirsiniz.

Performansla ilgili konular

NSError günlüğe kaydetmenin oldukça pahalı olabileceğini unutmayın. O dönemde ki daha fazla bilgi için mevcut iş parçacığının çağrı yığınını bu süreçte ele alacağız. Bu işlem CPU ve G/Ç yoğun olabilir. Özellikle DWARF geri sarmasını destekleyen mimarilerde (arm64 ve x86). Geri alma işlemi tamamlandıktan sonra bilgiler diske eşzamanlı olarak yazılır. Bu, sonraki satırın çökmesi durumunda veri kaybını önler.

Telefon etmek güvenli olsa da bir arka plan iş parçacığı üzerinde bu API'yi kullanmak istiyorsanız, bu çağrıyı başka bir sırası, geçerli yığın izlemenin bağlamını kaybeder.

NSExceptions nedir?

Crashlytics, NSException için günlük kaydı ve kayıt olanağı sunmuyor. sağlayabilir. Genel olarak Cocoa ve Cocoa Touch API'leri güvenli değildir. Bu durum, @catch kullanımında çok ciddi istenmeyen kullanımların olabileceği anlamına gelir. yan etkilere yol açabilir. Hiçbir zaman kodunuzda @catch ifadeleri kullanın. Daha fazla bilgi için lütfen Apple'ın belgeleri çok önemsiyor.

Yığın izlemeyi özelleştirme

Uygulamanız, yerel olmayan bir ortamda (ör. C++ veya Unity) çalışıyorsa Uygulamanızın yerel istisnasındaki kilitlenme meta verilerini bildirmek için İstisna Modeli API'sini biçimindedir. Bildirilen istisnalar önemli olmayanlar olarak işaretlenir.

Swift

var  ex = ExceptionModel(name:"FooException", reason:"There was a foo.")
ex.stackTrace = [
  StackFrame(symbol:"makeError", file:"handler.js", line:495),
  StackFrame(symbol:"then", file:"routes.js", line:102),
  StackFrame(symbol:"main", file:"app.js", line:12),
]

crashlytics.record(exceptionModel:ex)

Objective-C

FIRExceptionModel *model =
    [FIRExceptionModel exceptionModelWithName:@"FooException" reason:@"There was a foo."];
model.stackTrace = @[
  [FIRStackFrame stackFrameWithSymbol:@"makeError" file:@"handler.js" line:495],
  [FIRStackFrame stackFrameWithSymbol:@"then" file:@"routes.js" line:102],
  [FIRStackFrame stackFrameWithSymbol:@"main" file:@"app.js" line:12],
];

[[FIRCrashlytics crashlytics] recordExceptionModel:model];

Özel yığın çerçeveleri yalnızca şu adreslerle de başlatılabilir:

Swift

var  ex = ExceptionModel.init(name:"FooException", reason:"There was a foo.")
ex.stackTrace = [
  StackFrame(address:0xfa12123),
  StackFrame(address:12412412),
  StackFrame(address:194129124),
]

crashlytics.record(exceptionModel:ex)

Objective-C

FIRExceptionModel *model =
    [FIRExceptionModel exceptionModelWithName:@"FooException" reason:@"There was a foo."];
model.stackTrace = @[
  [FIRStackFrame stackFrameWithAddress:0xfa12123],
  [FIRStackFrame stackFrameWithAddress:12412412],
  [FIRStackFrame stackFrameWithAddress:194129124],
];


[[FIRCrashlytics crashlytics] recordExceptionModel:model];

İçerik haritası günlüklerini alma

İçerik haritası günlükleri, kullanıcının kilitlenme, önemli olmayan veya ANR etkinliğine neden olan sorunları içerir. Bu günlükler yardımcı olabilir.

İçerik haritası günlükleri, Google Analytics tarafından desteklenmektedir. Bu nedenle, içerik haritası günlüklerini almak için gerek Google Analytics'i etkinleştirme Firebase projeniz için Google Analytics için Firebase SDK'sını ekleyin ekleyin. Bu şartlar karşılandıktan sonra, içerik haritası günlükleri otomatik olarak ayrıntıları görüntülediğinizde Günlükler sekmesindeki bir etkinlik verilerine eklenir bir sonucudur.

Analytics SDK'sı screen_view etkinliğini otomatik olarak günlüğe kaydeder Bu, içerik haritası günlüklerinin veya ANR olayını kapsar. screen_view içerik haritası günlüğü firebase_screen_class parametresinden yararlanın.

İçerik haritası günlükleri ayrıca özel etkinlikler oluşturabilirsiniz. oturumuna ait verileri toplar. Bu veriler, seçtiğiniz seriyi göstermeye yardımcı olabilir Kilitlenme, önemli olmayan veya ANR etkinliğiyle sonuçlanan kullanıcı işlemlerinin sayısı.

Şunları yapabilirsiniz: Google Analytics verilerinin toplanmasını ve kullanımını kontrol etme Bu işlem, içerik haritası günlüklerini dolduran verileri içerir.

Kayıt raporlamayı etkinleştir

Varsayılan olarak Crashlytics, tüm cihazlarınız için kilitlenme raporlarını kullanıcılara ulaşabiliyoruz. Kullanıcılara gönderdikleri veriler üzerinde daha fazla kontrol sağlamak için aşağıdakileri etkinleştirebilirsiniz: otomatik raporlamayı devre dışı bırakarak ve yalnızca Crashlytics'i kodunuzda seçtiğinizde:

  1. Info.plist dosyanıza yeni bir anahtar ekleyerek otomatik toplamayı devre dışı bırakın:

    • Anahtar: FirebaseCrashlyticsCollectionEnabled
    • Değer: false
  2. Crashlytics verilerini çağırarak belirli kullanıcılar için veri toplamayı etkinleştirin koleksiyonu geçersiz kılmanın zamanı geldi. Geçersiz kılma değeri, Crashlytics'in raporları otomatik olarak toplayabilmesi için uygulamanızın lansmanını yapabilirsiniz.

    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 uygulamasını indirin.

    Swift

    Crashlytics.crashlytics().setCrashlyticsCollectionEnabled(true)

    Objective-C

    [[FIRCrashlytics crashlytics] setCrashlyticsCollectionEnabled:YES];

Crash Insights verilerini yönetme

Crash Insights, anonimleştirilmiş yığınınızı karşılaştırarak sorunları çözmenize yardımcı olur diğer Firebase uygulamalarından gelen izleri izler ve sorununuzun büyük bir trendin parçası haline geldi. Crash Insights, sorunların çoğu için kaynak bile sağlar kilitlenmede hata ayıklamanıza yardımcı olur.

Crash Insights, yaygın kararlılık trendlerini belirlemek için birleştirilmiş kilitlenme verilerini kullanır. Uygulamanızın verilerini paylaşmak istemezseniz Crash Insights'ı devre dışı bırakabilirsiniz Crashlytics sorun listenizin üst kısmındaki Kilitlenme Analizleri menüsünden Firebase konsolunda oluşturun.