Trục trặc và ngoại lệ

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 Google Analytics SDK phiên bản 4 dành cho Android.

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 cũng như 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ủa mình. Một trường hợp ngoại lệ có các trường sau đây:

Tên trường Loại Bắt buộc Nội dung mô tả
Nội dung mô tả 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 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

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

Đ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:

// Get tracker.
Tracker t =
    ((AnalyticsSampleApp) getActivity().getApplication()).getTracker(TrackerName.APP_TRACKER);

// Build and send exception.
t.send(new HitBuilders.ExceptionBuilder()
    .setDescription(getExceptionMethod() + ":" + getExceptionLocation())
    .setFatal(getExceptionFatal())
    .build());

Xem phần Cấu hình nâng cao để biết thông tin chi tiết về phương thức getTracker.

Đ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ị các trường hợp mà ứ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 đặt giá trị cấu hình ga_reportUncaughtExceptions hoặc bằng cách sử dụng lớp ExceptionReporter.

Cấu hình tự động

Để tự động gửi tất cả các trường hợp ngoại lệ chưa được nắm bắt trong ứng dụng của bạn tới Google Analytics, hãy thêm dòng sau vào tệp cấu hình XML:

<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ệ, ngoại lệ đó sẽ được chuyển 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

Hãy sử dụng lớp ExceptionReporter để triển khai chế độ đo lường ngoại lệ chưa nắm bắt tự động nếu bạn đang sử dụng phương thức triển khai nâng cao và không sử dụng giá trị cấu hình ga_reportUncaughtExceptions.

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.

Thread.UncaughtExceptionHandler myHandler = new ExceptionReporter(
    myTracker,
    Thread.getDefaultUncaughtExceptionHandler(),
    context);

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

// Get tracker.
Tracker t = ((AnalyticsSampleApp) getActivity().getApplication()).getTracker(
    TrackerName.APP_TRACKER);

// Using StandardExceptionParser to get an Exception description.
try {
    // Request some scores from the network.
    ArrayList<Integer> highScores = getHighScoresFromCloud();
} catch (IOException e) {
    t.send(new HitBuilders.ExceptionBuilder()
        .setDescription(new StandardExceptionParser(this, null)
            .getDescription(Thread.currentThread().getName(), e))
        .setFatal(false)
        .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.