Google cam kết thúc đẩy công bằng chủng tộc cho Cộng đồng người da đen. Xem cách thực hiện.

Tùy chỉnh báo cáo sự cố Firebase Crashlytics của bạn

Hướng dẫn này mô tả cách tùy chỉnh báo cáo sự cố của bạn bằng cách sử dụng SDK Firebase Crashlytics. Theo mặc định, Crashlytics tự động thu thập báo cáo sự cố cho tất cả người dùng của ứng dụng của bạn (bạn có thể tắt báo cáo tai nạn tự động và cho phép lựa chọn trong báo cáo cho người dùng của bạn thay vì). Crashlytics cung cấp bốn cơ chế khai thác gỗ ra khỏi hộp: phím tùy chỉnh , các bản ghi tùy chỉnh , định danh người dùng , và ngoại lệ bắt .

Thêm khóa tùy chỉnh

Các khóa tùy chỉnh giúp bạn có được trạng thái cụ thể của ứng dụng dẫn đến sự cố. Bạn có thể liên kết các cặp khóa / giá trị tùy ý với báo cáo sự cố của mình, sau đó sử dụng các khóa tùy chỉnh để tìm kiếm và lọc báo cáo sự cố trong bảng điều khiển Firebase.

  • Trong bảng điều khiển Crashlytics , bạn có thể tìm kiếm các vấn đề phù hợp với một phím tùy chỉnh.
  • Khi bạn đang xem xét một vấn đề cụ thể trong giao diện điều khiển, bạn có thể xem các phím tùy chỉnh liên quan cho mỗi sự kiện (Phím tab phụ) và thậm chí lọc sự kiện bằng phím tùy chỉnh (menu Filter ở phía trên cùng của trang).

Sử dụng các setCustomValue phương pháp để cặp khóa / giá trị đặt. Ví dụ:

Nhanh

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

Khi thiết lập số nguyên, boolean, hoặc phao nổi, hộp giá trị như @( 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"];

Bạn cũng có thể sửa đổi giá trị của khóa hiện có bằng cách gọi khóa và đặt nó thành một giá trị khác. Ví dụ:

Nhanh

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"];

Thêm cặp giá trị / khóa với số lượng lớn bằng cách sử dụng các setCustomKeysAndValues phương pháp với một NSDictionary như thông số duy nhất:

Nhanh

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

Thêm thông báo nhật ký tùy chỉnh

Để có thêm ngữ cảnh cho các sự kiện dẫn đến sự cố, bạn có thể thêm nhật ký Crashlytics tùy chỉnh vào ứng dụng của mình. Crashlytics cộng các bản ghi với dữ liệu của bạn sụp đổ và hiển thị chúng trong trang Crashlytics của căn cứ hỏa lực console , trong tab Logs.

Nhanh

Sử dụng log() hoặc log(format:, arguments:) đến các vấn đề giúp đỡ pinpoint. Nếu bạn muốn để có được một sản lượng log hữu ích với những thông điệp, những đối tượng mà bạn vượt qua để log() phải phù hợp với CustomStringConvertible tài sản. log() trả về thuộc tính mô tả bạn xác định cho các đối tượng. Ví dụ:

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

.log(format:, arguments:) định dạng giá trị trở về từ gọi getVaList() . Ví dụ:

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

Để biết thêm chi tiết về cách sử dụng log() hoặc log(format:, arguments:) , hãy tham khảo Crashlytics tài liệu tham khảo .

Objective-C

Sử dụng log hoặc logWithFormat đến các vấn đề giúp đỡ pinpoint. Lưu ý rằng nếu bạn muốn có được một sản lượng log hữu ích với những thông điệp, những đối tượng mà bạn vượt qua một trong hai phương pháp phải ghi đè lên các description tài sản chẳng hạn. Ví dụ:

[[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];

Để biết thêm chi tiết về cách sử dụng loglogWithFormat , hãy tham khảo Crashlytics tài liệu tham khảo .

Đặt số nhận dạng người dùng

Để chẩn đoán sự cố, thường hữu ích khi biết người dùng nào của bạn gặp phải sự cố nhất định. Crashlytics bao gồm một cách để xác định ẩn danh người dùng trong báo cáo sự cố của bạn.

Để thêm ID người dùng vào báo cáo của bạn, hãy chỉ định cho mỗi người dùng một giá trị nhận dạng duy nhất ở dạng số ID, mã thông báo hoặc giá trị băm:

Nhanh

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

Objective-C

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

Nếu bạn cần xóa số nhận dạng người dùng sau khi đặt, hãy đặt lại giá trị thành chuỗi trống. Xóa số nhận dạng người dùng không xóa các bản ghi Crashlytics hiện có. Nếu bạn cần phải xóa các bản ghi liên kết với một ID người dùng, liên hệ hỗ trợ căn cứ hỏa lực .

Báo cáo các trường hợp ngoại lệ không gây tử vong

Ngoài việc tự động báo cáo sự cố ứng dụng của bạn, Crashlytics cho phép bạn ghi lại các trường hợp ngoại lệ không nghiêm trọng và gửi chúng cho bạn vào lần tiếp theo khi ứng dụng của bạn khởi chạy.

Bạn có thể ghi trường hợp ngoại lệ không gây tử vong bằng cách ghi lại NSError đối tượng với recordError phương pháp. recordError chụp gọi stack của thread bằng cách gọi [NSThread callStackReturnAddresses] .

Nhanh

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

Objective-C

[[FIRCrashlytics crashlytics] recordError:error];

Khi sử dụng recordError phương pháp, điều quan trọng là bạn phải hiểu được NSError cấu trúc và cách Crashlytics sử dụng dữ liệu để treo nhóm. Sử dụng không đúng các recordError phương pháp có thể gây ra hành vi không thể đoán trước và có thể gây Crashlytics đến giới hạn báo cáo lỗi đăng nhập cho ứng dụng của bạn.

Một NSError đối tượng có ba đối số:

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

Không giống như tai nạn gây tử vong, trong đó được nhóm thông qua phân tích vết đống, lỗi đăng nhập được nhóm lại theo domaincode . Đây là sự khác biệt quan trọng giữa sự cố nghiêm trọng và lỗi đã ghi. Ví dụ:

Nhanh

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

Khi bạn đăng nhập các lỗi trên, nó tạo ra một vấn đề mới được nhóm bởi NSSomeErrorDomain-1001 . Các lỗi đã ghi bổ sung sử dụng cùng một miền và các giá trị mã được nhóm lại trong cùng một vấn đề. Dữ liệu chứa trong userInfo đối tượng được chuyển đổi thành cặp khóa-giá trị và hiển thị trong các phím / ghi phần trong một vấn đề cá nhân.

Nhật ký và khóa tùy chỉnh

Cũng giống như báo cáo sự cố, bạn có thể nhúng các bản ghi và các phím tùy chỉnh để thêm ngữ cảnh cho NSError . Tuy nhiên, có sự khác biệt về những bản ghi được đính kèm với sự cố so với những lỗi đã ghi. Khi sự cố xảy ra và ứng dụng được khởi chạy lại, nhật ký mà Crashlytics truy xuất từ ​​đĩa là những nhật ký được ghi ngay đến thời điểm xảy ra sự cố. Khi bạn đăng nhập một NSError , ứng dụng không ngay lập tức chấm dứt. Bởi vì Crashlytics chỉ gửi báo cáo lỗi đăng nhập sự ra mắt ứng dụng tiếp theo và phải giới hạn số lượng gian được phân bổ cho các bản ghi trên đĩa, nó có thể đăng nhập đủ sau một NSError được ghi lại để tất cả các bản ghi có liên quan được luân chuyển ra vào thời điểm Crashlytics gửi báo cáo từ thiết bị. Giữ sự cân bằng này trong tâm trí khi đăng nhập NSErrors và sử dụng các bản ghi và các phím tùy chỉnh trong ứng dụng của bạn.

Cân nhắc về hiệu suất

Hãy ghi nhớ rằng cách đăng nhập một NSError có thể khá tốn kém. Tại thời điểm bạn thực hiện cuộc gọi, Crashlytics nắm bắt ngăn xếp cuộc gọi của luồng hiện tại bằng cách sử dụng một quy trình được gọi là giải nén ngăn xếp. Quá trình này có thể chuyên sâu về CPU và I / O, đặc biệt là trên các kiến ​​trúc hỗ trợ giải nén DWARF (arm64 và x86). Sau khi hoàn tất việc thư giãn, thông tin sẽ được ghi vào đĩa một cách đồng bộ. Điều này ngăn ngừa mất dữ liệu nếu dòng tiếp theo bị lỗi.

Mặc dù an toàn khi gọi API này trên một chuỗi nền, hãy nhớ rằng việc gửi lệnh gọi này đến hàng đợi khác sẽ làm mất ngữ cảnh của dấu vết ngăn xếp hiện tại.

Điều gì về NSExceptions?

Crashlytics không cung cấp một cơ sở để đăng nhập và ghi NSException trường hợp trực tiếp. Nói chung, các API Cocoa và Cocoa Touch không phải là ngoại lệ an toàn. Điều đó có nghĩa việc sử dụng @catch có thể có ngoài ý muốn tác dụng phụ rất nghiêm trọng trong quá trình của bạn, ngay cả khi được sử dụng một cách cẩn thận khắc nghiệt. Bạn không bao giờ nên sử dụng @catch báo cáo trong mã của bạn. Vui lòng tham khảo tài liệu hướng dẫn của Apple về chủ đề này.

Bật báo cáo chọn tham gia

Theo mặc định, Crashlytics tự động thu thập báo cáo sự cố cho tất cả người dùng ứng dụng của bạn. Để cung cấp cho người dùng nhiều quyền kiểm soát hơn đối với dữ liệu họ gửi, bạn có thể bật tính năng báo cáo chọn tham gia bằng cách tắt báo cáo tự động và chỉ gửi dữ liệu đến Crashlytics khi bạn chọn trong mã của mình:

  1. Tắt bộ sưu tập tự động bằng cách thêm một chìa khóa mới vào trình duyệt Info.plist file:

    • Chính: FirebaseCrashlyticsCollectionEnabled
    • Giá trị: false
  2. Bật thu thập cho những người dùng được chọn bằng cách gọi ghi đè thu thập dữ liệu Crashlytics trong thời gian chạy. Giá trị ghi đè vẫn tồn tại qua các lần khởi chạy ứng dụng của bạn nên Crashlytics có thể tự động thu thập báo cáo.

    Để chọn không tham gia báo cáo tai nạn tự động, vượt qua false như giá trị ghi đè. Khi thiết lập để false , giá trị mới không áp dụng cho đến khi thời gian tiếp theo của ứng dụng.

    Nhanh

    Crashlytics.crashlytics().setCrashlyticsCollectionEnabled(true)
    

    Objective-C

    [[FIRCrashlytics crashlytics] setCrashlyticsCollectionEnabled:YES];
    

Quản lý dữ liệu Crash Insights

Crash Insights giúp bạn giải quyết các vấn đề bằng cách so sánh các dấu vết ngăn xếp ẩn danh của bạn với các dấu vết từ các ứng dụng Firebase khác và cho bạn biết liệu sự cố của bạn có phải là một phần của xu hướng lớn hơn hay không. Đối với nhiều vấn đề, Crash Insights thậm chí còn cung cấp tài nguyên để giúp bạn gỡ lỗi.

Crash Insights sử dụng dữ liệu sự cố tổng hợp để xác định các xu hướng ổn định phổ biến. Nếu bạn không muốn chia sẻ dữ liệu của ứng dụng, bạn có thể chọn ra khỏi sụp đổ Insights từ menu sụp đổ Insights ở phía trên cùng của danh sách vấn đề Crashlytics của bạn trong căn cứ hỏa lực console .