Sự cố và ngoại lệ – SDK Android

Tài liệu này cung cấp thông tin tổng quan cấp cao về hoạt động đo lường sự cố và ngoại lệ bằng cách sử dụng SDK Google Analytics dành cho Android phiên bản 3.

Tổng quan

Tính năng đo lường sự cố và ngoại lệ cho phép bạn đo lường số lượng và loại sự cố đã phát hiện và chưa phát hiện được cũng như ngoại lệ xảy ra trong ứng dụng. Có các trường ngoại lệ sau đây:

Tên trường Trường công cụ theo dõi Loại Bắt buộc Nội dung mô tả
Nội dung mô tả Fields.EX_DESCRIPTION String Không Nội dung mô tả về trường hợp ngoại lệ (tối đa 100 ký tự). Chấp nhận null .
isFatal Fields.EX_FATAL boolean Cho biết liệu ngoại lệ có nghiêm trọng hay không. true cho biết lỗi nghiêm trọng.

Dữ liệu về sự cố và ngoại lệ chủ yếu có trong báo cáo Sự cố và ngoại lệ.

Ngoại lệ đã phát hiện

Trường hợp ngoại lệ đã phát hiện là các lỗi trong ứng dụng mà bạn đã xác định mã xử lý ngoại lệ, chẳng hạn như thỉnh thoảng hết thời gian chờ kết nối mạng trong một yêu cầu dữ liệu.

Đo lường một trường hợp ngoại lệ đã phát hiện được bằng cách đặt các giá trị trường ngoại lệ trên trình theo dõi và gửi lượt truy cập, như trong ví dụ sau:

/*
 * An app tries to load a list of high scores from the cloud. If the request
 * times out, an exception is sent to Google Analytics
 */
try {

  // Request some scores from the network.
  ArrayList highScores = getHighScoresFromCloud();

} catch (IOException e) {

  // May return null if EasyTracker has not yet been initialized with a
  // property ID.
  EasyTracker easyTracker = EasyTracker.getInstance(this);

  // StandardExceptionParser is provided to help get meaningful Exception descriptions.
 	easyTracker.send(MapBuilder
      .createException(new StandardExceptionParser(this, null)              // Context and optional collection of package names
                                                                            // to be used in reporting the exception.
                       .getDescription(Thread.currentThread().getName(),    // The name of the thread on which the exception occurred.
                                       e),                                  // The exception.
                       false)                                               // False indicates a nonfatal exception
      .build()
  );


  ... // Display alert to user that high scores are currently unavailable.
}

Đo lường ngoại lệ chưa nắm bắt

Các trường hợp ngoại lệ chưa phát hiện được biểu thị những trường hợp ứng dụng của bạn gặp phải những điều kiện không mong muốn trong thời gian chạy và thường nghiêm trọng, khiến ứng dụng gặp sự cố. Bạn có thể tự động gửi các trường hợp ngoại lệ chưa phát hiện được đến Google Analytics bằng cách sử dụng EasyTracker hoặc lớp ExceptionReporter.

Sử dụng EasyTracker

Để tự động gửi tất cả các trường hợp ngoại lệ chưa nắm bắt được trong ứng dụng của bạn bằng EasyTracker, hãy thêm dòng này vào tệp analytics.xml của bạn:

<bool name="ga_reportUncaughtExceptions">true</bool>

Sau khi gửi một ngoại lệ bằng tính năng tự động đo lường ngoại lệ, EasyTracker sẽ chuyển ngoại lệ sang trình xử lý ngoại lệ mặc định của Thread.

Sử dụng phương thức triển khai nâng cao

Sử dụng lớp ExceptionReporter để triển khai tính năng tự động đo lường ngoại lệ chưa nắm bắt được nếu bạn đang sử dụng phương thức triển khai nâng cao và không sử dụng EasyTracker.

ExceptionReporter có thể đóng vai trò là trình xử lý ngoại lệ chưa nắm bắt mặc định cho một luồng cụ thể hoặc tất cả các luồng trong ứng dụng của bạn. Sau khi gửi một ngoại lệ đến Google Analytics, lớp ExceptionReporter có thể tuỳ ý chuyển trường hợp ngoại lệ tới trình xử lý ngoại lệ chưa nắm bắt mà bạn cung cấp.

Mã sau đây sẽ tạo một đối tượng ExceptionReporter mới và đặt đối tượng đó làm trình xử lý ngoại lệ chưa nắm bắt mới mặc định. Do đó, mọi ngoại lệ chưa nắm bắt sẽ được gửi đến Google Analytics, sau đó chuyển đến trình xử lý ngoại lệ chưa nắm bắt trước đó. Đối với hầu hết ứng dụng, trình xử lý mặc định sẽ ghi ngoại lệ vào nhật ký và chấm dứt ứng dụng.

UncaughtExceptionHandler myHandler = new ExceptionReporter(
    GoogleAnalytics.getInstance(this).getDefaultTracker(), // Tracker, may return null if not yet initialized.
    GAServiceManager.getInstance(),                        // GAServiceManager singleton.
    Thread.getDefaultUncaughtExceptionHandler());          // Current default uncaught exception handler.

// Make myHandler the new default uncaught exception handler.
Thread.setDefaultUncaughtExceptionHandler(myHandler);

Khi sử dụng tính năng tự động đo lường ngoại lệ, hãy lưu ý những điều sau:

  • Tất cả các trường hợp ngoại lệ được gửi bằng tính năng tự động đo lường ngoại lệ đều được báo cáo là nghiêm trọng trong Google Analytics.
  • Theo mặc định, trường nội dung mô tả được tự động đặt bằng cách sử dụng loại ngoại lệ, tên lớp, tên phương thức và tên luồng.

Phân tích cú pháp nội dung mô tả trường hợp ngoại lệ

SDK cung cấp StandardExceptionParser để đơn giản hoá quá trình nhận và gửi nội dung mô tả trường hợp ngoại lệ đến Google Analytics:

// Using StandardExceptionParser to get an Exception description.
try {

  // Request some scores from the network.
  ArrayList highScores = getHighScoresFromCloud();

} catch (IOException e) {

  // May return null if EasyTracker has not yet been initialized with a
  // property ID.
  EasyTracker easyTracker = EasyTracker.getInstance(this);

 	easyTracker.send(MapBuilder
      .createException(new StandardExceptionParser(this, null)              // Context and optional collection of package names
                                                                            // to be used in reporting the exception.
                       .getDescription(Thread.currentThread().getName(),    // The name of the thread on which the exception occurred.
                                       e),                                  // The exception.
	                     false)                                               // False indicates a fatal exception
      .build()
  );

  ... // Display alert to user that high scores are currently unavailable.
}

Bạn cũng có thể triển khai trình phân tích cú pháp của riêng mình bằng cách triển khai giao diện ExceptionParser và gọi phương thức setDescription khi gửi trường hợp ngoại lệ đến Google Analytics.