Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

گزارش های خرابی Firebase Crashlytics خود را سفارشی کنید

این راهنما نحوه سفارشی سازی گزارش های خرابی شما با استفاده از Firebase Crashlytics SDK را توضیح می دهد. به طور پیش فرض، Crashlytics صورت خودکار جمع آوری گزارش های خرابی برای همه کاربران برنامه شما (شما می توانید خاموش گزارش خرابی اتوماتیک و فعال کردن شرکت در گزارش را برای کاربران خود به جای). Crashlytics فراهم می کند چهار مکانیزم ورود به سیستم در خارج از جعبه: کلید های سفارشی ، سیاهههای مربوط سفارشی ، شناسه های کاربر ، و استثنا گرفتار .

اضافه کردن کلیدهای سفارشی

کلیدهای سفارشی به شما کمک می کنند تا وضعیت خاصی از برنامه خود را داشته باشید که منجر به خرابی می شود. می توانید جفت کلید/مقدار دلخواه را با گزارش خرابی خود مرتبط کنید ، سپس از کلیدهای سفارشی برای جستجو و فیلتر گزارش های خرابی در کنسول Firebase استفاده کنید.

  • در داشبورد Crashlytics ، شما می توانید برای مسائلی که مطابقت یک کلید سفارشی جستجو کنید.
  • هنگامی که شما در حال بررسی یک مشکل خاص در کنسول، شما می توانید کلید های سفارشی همراه برای هر رویداد (کلید subtab) و حتی فیلتر حوادث توسط کلید های سفارشی (منوی فیلتر در بالای صفحه) را مشاهده کنید.

استفاده از setCustomValue روش به مجموعه ای جفت کلید / مقدار. مثلا:

سریع

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

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

هدف-ج

هنگامی که اعداد صحیح، Booleans می، یا شناور تنظیم، جعبه ارزش به عنوان @( 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"];

همچنین می توانید مقدار کلید موجود را با فراخوانی کلید و تنظیم آن بر روی مقدار متفاوتی تغییر دهید. مثلا:

سریع

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

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

هدف-ج

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

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

اضافه کردن جفت کلید / ارزش به صورت فله و با استفاده از setCustomKeysAndValues روش با NSDictionary به عنوان تنها پارامتر:

سریع

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)

هدف-ج

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

اضافه کردن پیامهای ثبت سفارشی

برای ارائه زمینه بیشتر برای رویدادهای منتهی به خرابی ، می توانید سیاهههای مربوط به Crashlytics را به برنامه خود اضافه کنید. Crashlytics همکاران سیاهههای مربوط با داده های خود را تصادف و نمایش آنها در صفحه Crashlytics از فایربیس کنسول ، تحت برگه گزارش ها.

سریع

استفاده از log() و یا log(format:, arguments:) به مسائل کمک به تعیین دقیق. اگر شما می خواهید برای دریافت خروجی ورود مفید با پیام های، شی که شما تصویب به log() باید به مطابقت CustomStringConvertible اموال. log() برمی گرداند اموال توضیحات برای شی تعریف می کنید. مثلا:

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

.log(format:, arguments:) فرمت مقادیر بازگردانده از تماس getVaList() . مثلا:

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

برای اطلاعات بیشتر در مورد چگونگی استفاده log() و یا log(format:, arguments:) ، به Crashlytics مراجعه اسناد مرجع .

هدف-ج

استفاده از log و یا logWithFormat به مسائل کمک به تعیین دقیق. توجه داشته باشید که اگر شما می خواهید برای دریافت خروجی ورود مفید با پیام های، شی که شما را به هر دو روش عبور باید نادیده گرفتن description اموال به عنوان مثال. مثلا:

[[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 و logWithFormat ، به Crashlytics مراجعه اسناد مرجع .

شناسه های کاربر را تنظیم کنید

برای تشخیص یک مشکل ، اغلب مفید است که بدانید کدام یک از کاربران شما تصادف خاصی را تجربه کرده اند. Crashlytics شامل روشی برای شناسایی ناشناس کاربران در گزارش خرابی شما است.

برای افزودن شناسه های کاربری به گزارشات خود ، به هر کاربر یک شناسه منحصر به فرد در قالب شماره شناسه ، توکن یا مقدار هش اختصاص دهید:

سریع

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

هدف-ج

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

اگر بعد از تنظیم شناسه کاربری نیاز به پاک کردن آن دارید ، مقدار را به یک رشته خالی بازنشانی کنید. پاک کردن شناسه کاربر ، سوابق موجود Crashlytics را حذف نمی کند. اگر شما نیاز به حذف سوابق مرتبط با شناسه کاربر، در ارتباط با پشتیبانی فایربیس .

گزارش استثنائات غیر کشنده

Crashlytics علاوه بر گزارش خودکار خرابی های برنامه شما ، به شما امکان می دهد موارد استثنایی غیر کشنده را ثبت کرده و دفعه بعد که برنامه شما راه اندازی می شود آنها را برای شما ارسال می کند.

شما می توانید استثنا غیر کشنده را با ضبط ضبط NSError اشیاء با recordError روش. recordError قطاری پشته پاسخ موضوع را با تلفن زدن [NSThread callStackReturnAddresses] .

سریع

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

هدف-ج

[[FIRCrashlytics crashlytics] recordError:error];

هنگام استفاده از recordError روش، این مهم است که درک NSError ساختار و چگونگی Crashlytics با استفاده از داده به سقوط گروه. استفاده نادرست از recordError روش می تواند رفتار غیر قابل پیش بینی می شود و ممکن است Crashlytics به حد باعث گزارش خطاها به سیستم وارد برای برنامه شما.

NSError شی دارای سه آرگومان:

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

بر خلاف تصادفات منجر به مرگ، که از طریق تجزیه و تحلیل پشته اثری گروه بندی می شوند، خطاهای سیستم وارد شده توسط گروه بندی می شوند domain و code . این تمایز مهم بین تصادفات کشنده و خطاهای ثبت شده است. مثلا:

سریع

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)

هدف-ج

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

هنگامی که شما خطا در بالا وارد بخش مدیریت شوید، این یک مسئله جدید است که توسط گروه بندی ایجاد NSSomeErrorDomain و -1001 . خطاهای ثبت شده اضافی که از دامنه و مقادیر کد یکسانی استفاده می کنند در یک مسئله گروه بندی می شوند. اطلاعات موجود در userInfo شی به جفت کلید-مقدار تبدیل شده و نمایش داده شده در کلید / بخش سیاهههای مربوط در یک شماره منحصر به فرد.

سیاهههای مربوط و کلیدهای سفارشی

درست مثل گزارش های خرابی، شما می توانید سیاهههای مربوط و کلید های سفارشی جاسازی برای اضافه کردن متن به NSError . با این حال ، تفاوتهایی وجود دارد که سیاهههای مربوط به خرابیها در مقابل خطاهای ثبت شده متصل می شوند. هنگامی که خرابی رخ می دهد و برنامه دوباره راه اندازی می شود ، سیاهههای مربوط به بازیابی Crashlytics از دیسک مواردی هستند که تا زمان خرابی نوشته شده اند. هنگامی که شما یک ورود NSError ، برنامه بلافاصله خاتمه. از آنجا Crashlytics تنها گزارش خطا ثبت در راه اندازی برنامه بعدی می فرستد و باید مقدار فضای اختصاص داده شده برای سیاهههای مربوط بر روی دیسک محدود می کند، آن را ممکن است برای ورود به اندازه کافی پس از NSError ثبت شده است به طوری که تمام سیاهههای مربوط هستند که توسط زمان Crashlytics می فرستد چرخش گزارش از دستگاه هنگام ورود به خاطر این تعادل در ذهن NSErrors و با استفاده از سیاهههای مربوط و کلید های سفارشی در برنامه شما.

ملاحظات عملکرد

به خاطر داشته باشید که با گروهش NSError می تواند نسبتا گران است. در زمان برقراری تماس ، Crashlytics پشته تماس رشته فعلی را با استفاده از فرایندی به نام باز کردن پشته ضبط می کند. این فرایند می تواند CPU و I/O فشرده باشد ، به ویژه در معماری هایی که از باز شدن DWARF پشتیبانی می کنند (arm64 و x86). پس از اتمام باز شدن ، اطلاعات به طور همزمان روی دیسک نوشته می شوند. در صورت خرابی خط بعدی ، از از دست رفتن داده جلوگیری می کند.

اگرچه فراخوانی این API در یک موضوع پس زمینه ایمن است ، به یاد داشته باشید که ارسال این تماس به صف دیگر زمینه ردپای پشته فعلی را از دست می دهد.

در مورد استثنائات NSE چطور؟

Crashlytics، امکانی برای ورود به سیستم و ضبط ارائه نمی NSException موارد به طور مستقیم. به طور کلی ، API های Cocoa و Cocoa Touch ایمن نیستند. این بدان معناست که استفاده از @catch می توانید بسیار جدی ناخواسته عوارض جانبی در فرایند خود را داشته باشند، حتی زمانی که با مراقبت شدید استفاده می شود. شما هرگز نباید استفاده @catch اظهارات در کد خود را. لطفا به مستندات اپل در موضوع.

گزارش انتخاب را فعال کنید

به طور پیش فرض ، Crashlytics به طور خودکار گزارش خرابی را برای همه کاربران برنامه شما جمع آوری می کند. برای اینکه کاربران کنترل بیشتری بر داده های ارسال شده داشته باشند ، می توانید با غیرفعال کردن گزارش خودکار و تنها ارسال داده به Crashlytics هنگامی که کد خود را انتخاب کرده اید ، گزارش انتخاب را فعال کنید:

  1. خاموش کردن خودکار مجموعه با اضافه کردن یک کلید جدید به خود Info.plist فایل:

    • کلیدی: FirebaseCrashlyticsCollectionEnabled
    • ارزش: false
  2. با فراخوانی نادیده گرفتن مجموعه داده Crashlytics در زمان اجرا ، مجموعه را برای کاربران منتخب فعال کنید. ارزش نادیده گرفتن در سراسر راه اندازی برنامه شما ادامه می یابد تا Crashlytics بتواند به طور خودکار گزارش ها را جمع آوری کند.

    برای انتخاب کردن از گزارش خرابی اتوماتیک، عبور false به عنوان ارزش زیر پا بگذارند. هنگامی که به مجموعه ای false ، ارزش جدید تا زمانی که اجرای بعدی برنامه نمی شود.

    سریع

    Crashlytics.crashlytics().setCrashlyticsCollectionEnabled(true)

    هدف-ج

    [[FIRCrashlytics crashlytics] setCrashlyticsCollectionEnabled:YES];

مدیریت داده های Crash Insights

Crash Insights با مقایسه آثار پشته ناشناس با آثار دیگر برنامه های Firebase و اطلاع از اینکه آیا مشکل شما بخشی از یک روند بزرگتر است به شما کمک می کند تا مشکلات را حل کنید. برای بسیاری از مسائل ، Crash Insights حتی منابعی را برای کمک به شما در اشکال زدایی خرابی ارائه می دهد.

Crash Insights از داده های جمع آوری خرابی برای شناسایی روندهای ثبات رایج استفاده می کند. اگر شما ترجیح میدهید به اشتراک گذاری داده برنامه خود را، شما می توانید در بالای لیست موضوع Crashlytics خود را در انتخاب کردن از سقوط بینش از منوی سقوط بینش کنسول فایربیس .