معرفی ACRA برای مدیریت بهتر کرش کردن برنامه ها

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

ACRA یکی از library هایی است که کار مدیریت کرش های برنامه را انجام می دهد و آن ها را به سمت یک سرور ارسال می کند.

راه اندازی ACRA ساده است و البته شما می توانید به راحتی پارامترهای آن را تغییر دهید.برای مثال کد زیر نشان دهنده نحوه ارسال کرش ها به یک سرور خاص است:

@ReportsCrashes(
        formUri = Const.Api + Const.ExceptionReportPath,
        reportType = HttpSender.Type.FORM,
        httpMethod = HttpSender.Method.POST,
        customReportContent = {
                ReportField.APP_VERSION_CODE,
                ReportField.APP_VERSION_NAME,
                ReportField.ANDROID_VERSION,
                ReportField.PACKAGE_NAME,
                ReportField.REPORT_ID,
                ReportField.BUILD,
                ReportField.STACK_TRACE,
                ReportField.BRAND,
                ReportField.PHONE_MODEL,
                ReportField.USER_CRASH_DATE,
                ReportField.USER_IP,
                ReportField.DEVICE_ID,
                ReportField.DUMPSYS_MEMINFO,
        },
        mode = ReportingInteractionMode.SILENT)

public class App extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        ACRA.init(this);
    }
}

همانطور که در کد بالا مشاهده می کنید پارامتر های زیر به سرور از طریق متد POST ارسال می شوند:

ReportField.APP_VERSION_CODE,
ReportField.APP_VERSION_NAME,
ReportField.ANDROID_VERSION,
ReportField.PACKAGE_NAME,
ReportField.REPORT_ID,
ReportField.BUILD,
ReportField.STACK_TRACE,
ReportField.BRAND,
ReportField.PHONE_MODEL,
ReportField.USER_CRASH_DATE,
ReportField.USER_IP,
ReportField.DEVICE_ID,
ReportField.DUMPSYS_MEMINFO,

اگر فرض کنیم سمت سرور یک برنامه asp.net mvc وظیفه ثبت این خطاها را بر عهده دارد به شکل زیر باید عمل کنیم:

    [Route("api/[controller]")]
    public class ExceptionReportController : BaseApiController
    {
        public ExceptionReportController(ApplicationDbContext ctx, IOptions<BaseSettings> settings) : base(ctx, settings)
        {
        }

        [HttpPost]
        public async Task Post([FromForm] ExceptionReport exceptionReport)
        {
            DbContext.ExceptionReport.Add(exceptionReport);
            await DbContext.SaveChangesAsync();
        }
    }

همچنین مدلی که به عنوان ورودی اکشن در نظر گرفته ایم به شکل زیر خواهد بود:

    public class ExceptionReport
    {
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        [Key]
        public int Id { get; set; }
        public string REPORT_ID { get; set; }
        public string ANDROID_VERSION { get; set; }
        public int APP_VERSION_CODE { get; set; }
        public double APP_VERSION_NAME { get; set; }
        public int AVAILABLE_MEM_SIZE { get; set; }
        public string BRAND { get; set; }
        public string DUMPSYS_MEMINFO { get; set; }
        public string FILE_PATH { get; set; }
        public string INSTALLATION_ID { get; set; }
        public bool IS_SILENT { get; set; }
        public string LOGCAT { get; set; }
        public string PACKAGE_NAME { get; set; }
        public string PHONE_MODEL { get; set; }
        public string PRODUCT { get; set; }
        public string STACK_TRACE { get; set; }
        public int TOTAL_MEM_SIZE { get; set; }
        public string USER_APP_START_DATE { get; set; }
        public DateTime USER_CRASH_DATE { get; set; }
        public string USER_EMAIL { get; set; }
    }

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

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *