Báo cáo sự cố với Crashlytics
() translation by (you can also view the original English article)
Trong Android, có một xác suất cao cho ứng dụng của bạn bị sự cố ngay cả sau khi bạn đã kiểm thử nó theo cách thủ công và cách tự động. Điều này có thể do các yếu tố như sự không tương thích với các level API khác nhau, kích cỡ màn hình, bộ nhớ điện thoại, cảm biến và sự tùy biến của các nhà cung cấp để cho phù hợp với từng thiết bị. Crashlytics sẽ giúp bạn chẩn đoán các vấn đề này.
Ứng dụng bị sự cố làm cho người dùng của bạn buồn và giận dữ. Họ thậm chí có thể muốn gỡ cài đặt ứng dụng nếu điều này xảy ra thường xuyên. Sau đó cung cấp cho ứng dụng của bạn một bài đánh giá xấu, cho phản hồi tiêu cực trên Play Store và sau đó đi cài đặt ứng dụng của đối thủ cạnh tranh! Trong thị trường ứng dụng ngày nay, việc làm cho người dùng của bạn hài lòng là rất quan trọng cho sự thành công của ứng dụng của bạn.
Không đơn giản để cho ứng dụng của bạn không bị đứng, nhưng giảm thiểu việc ứng dụng bị đứng là rất quan trọng. Trong quá trình phát triển và thử nghiệm, bạn có thể không gặp phải một vấn đề đặc biệt nào, nhưng trong giai đoạn sản phẩm khi người dùng của bạn đang sử dụng nó, bạn sẽ bắt đầu thấy vấn đề xảy ra. Sử dụng một giải pháp báo cáo lỗi mạnh mẽ là điều cần thiết để thu thập thông tin về việc bị sự cố của ứng dụng của bạn và cung cấp cho bạn một cái nhìn sâu sắc về cách làm thế nào bạn có thể khắc phục sự cố để giữ cho người dùng của bạn hài lòng.
Trong hướng dẫn này, tôi sẽ chỉ cho bạn cách sử dụng Crashlytics, một giải pháp báo cáo lỗi miễn phí và mạnh mẽ nhưng nhẹ nhàng, nó là một phần của bộ công cụ phát triển Fabric bởi Twitter. Chúng ta sẽ tạo ra một ứng dụng đơn giản bị sự cố khi một nút được nhấp vào, do đó chúng ta có thể có được cái nhìn sâu sắc về sự cố với Crashlytics.
1. Tại sao sử dụng Crashlytics?
Dưới đây là một vài lý do bạn có thể muốn sử dụng nó:
- Dễ dàng để thiết lập
- Không giới hạn ứng dụng, người dùng, và số lần treo
- Cảnh báo theo thời gian thực
- Báo cáo sự cố theo thời gian thực
- Phân tích sâu sự cố
- Theo dõi ngoại lệ
- Dễ dàng chia sẻ báo cáo sự cố
- Phân phối phiên bản beta
- Một ứng dụng mobile miễn phí để giám sát ứng dụng của bạn và có được cảnh báo theo thời gian thực cho các vấn đề quan trọng
- Miễn phí!
2. Tạo một dự án Android Studio
Trước tiên, mở Android Studio lên và tạo một dự án mới ''CrashlyticsTutorial" với một Activity được gọi là MainActivity
.
3. Cài đặt Plugin Fabric
Trước tiên, bạn phải có một tài khoản tại Fabric để tích hợp Crashlytics vào ứng dụng của bạn. Vì vậy hãy điền vào các chi tiết cần thiết và một email xác nhận sẽ được gửi đến bạn.
Bạn có thể chọn để tích hợp Fabric với dự án của bạn bằng cách tải về plugin cho Android Studio, nó sẽ tự động chỉnh sửa các tập tin cần thiết cho việc tích hợp, hoặc tự chỉnh sửa tập tin build.gradle của bạn. Hướng dẫn này, chúng ta sẽ sử dụng cách dễ nhất, đó là với plugin.
Sau khi nhấp vào liên kết xác nhận, bạn sẽ được hướng dẫn để cài đặt plugin:
Bước 1
Lựa chọn Android như là nền tảng.
Bước 2
Đối với người dùng Mac: chọn Preferences... từ menu Android Studio/IntelliJ. Người dùng Windows và Linux: chọn Settings từ menu File.



Bước 3
Chọn Plugins, nhấp vào nút Browse Repositories và tìm kiếm "Fabric for Android".
Bước 4
Nhấp vào nút Install plugin để tải về và cài đặt plugin.
4. Tích hợp Crashlytics
Bước 1
Để bắt đầu tích hợp Crashlytics vào dự án Android Studio của bạn, nhập thông tin của bạn để đăng nhập.



Bước 2
Chọn dự án Android CrashlyticsTutorial và nhấp vào nút Next.
Bước 3
Fabric sẽ liệt kê tất cả các tổ chức mà bạn đã đăng ký, vì vậy hãy chọn tổ chức mà bạn muốn kết hợp với ứng dụng và nhấp vào nút Next.



Bước 4
Sau đó Fabric sẽ liệt kê tất cả các bộ dụng cụ của nó. Vì đây là một hướng dẫn Crashlytics, hãy chọn Crashlytics và nhấp vào nút Next.
Bước 5
Nhấp vào nút Install.
Fabric muốn thực hiện thay đổi vào tập tin build.gradle, MainActivity.java và AndroidManifest.xml của bạn, vì vậy, bấm vào Apply để áp dụng những thay đổi xảy ra.
Bước 6
Xây dựng và chạy ứng dụng của bạn để chúng ta có thể đảm bảo rằng tất cả mọi thứ được cấu hình đúng. Nếu ứng dụng của bạn được cấu hình thành công, bạn sẽ nhận được một email ngay lập tức được gửi đến địa chỉ email bạn đã sử dụng để đăng ký với Fabric.
5. Xem bảng điều khiển
Bây giờ thì Crashlytics đã được tích hợp thành công với dự án của chúng ta, hãy truy cập bảng điều khiển chính để xem ứng dụng của chúng ta: CrashlyticsTutorial.
Nhấp vào một dự án sẽ mở bảng điều khiển Crashlytics, nó sẽ liệt kê những vấn đề gặp phải. Cho đến lúc này chúng ta vẫn chưa có; về sau, chúng ta sẽ vào lại bảng điều khiển này khi chúng ta tạo ra một sự cố có chủ ý.
Bên trong bảng điều khiển dự án Crashlytics, bạn có được một cái nhìn tổng quan chung về các sự cố. Bạn có thể lọc sự cố bằng các phiên bản ứng dụng, sự kiện, ngày tháng, tình trạng (mở, đóng cửa hoặc tất cả), thiết bị, Hệ điều hành hoặc hoạt động của người dùng (tuy vậy bộ kit Answers cần phải được kích hoạt để sử dụng tính năng này). Bạn cũng có thể xem tổng số sự cố, non-fatal, người dùng bị ảnh hưởng, và nhiều hơn nữa.
Bộ Answers cho bạn thống kê theo thời gian thực trên cách ứng dụng của bạn đang được sử dụng, bao gồm cả số lượng người dùng hoạt động, độ dài phiên sử dụng, đánh giá sự ổn định và duy trì.
6. Taạo ra một sự cố có chủ ý
Hiểu về sự khác biệt giữa các sự cố và vấn đề
Sự khác biệt giữa các sự cố và vấn đề là Crashlytics kết hợp các sự cố tương tự thành các vấn đề (các dòng code cụ thể xuất hiện để kích hoạt cùng loại sự cố). Ví dụ, nếu bạn đã có 100.000 sự cố được báo cáo, đây có thể được quy vào chỉ 60 vấn đề.
Hãy tạo ra một sự cố có chủ ý và xem vấn đề đăng nhập trên bảng điều khiển.
Tạo một layout
Đây là tập tin layout cho MainActivity
:
1 |
<?xml version="1.0" encoding="utf-8"?>
|
2 |
<RelativeLayout
|
3 |
xmlns:android="http://schemas.android.com/apk/res/android" |
4 |
xmlns:tools="http://schemas.android.com/tools" |
5 |
android:id="@+id/activity_main" |
6 |
android:layout_width="match_parent" |
7 |
android:layout_height="match_parent" |
8 |
android:paddingLeft="@dimen/activity_horizontal_margin" |
9 |
android:paddingRight="@dimen/activity_horizontal_margin" |
10 |
android:paddingTop="@dimen/activity_vertical_margin" |
11 |
android:paddingBottom="@dimen/activity_vertical_margin" |
12 |
tools:context="com.chikeandroid.crashlyticstutorial.MainActivity"> |
13 |
|
14 |
<Button
|
15 |
android:id="@+id/btn_crash_now" |
16 |
android:layout_height="wrap_content" |
17 |
android:layout_width="wrap_content" |
18 |
android:text="Crash Now!" |
19 |
android:layout_centerVertical="true" |
20 |
android:layout_centerHorizontal="true" /> |
21 |
|
22 |
</RelativeLayout>
|
Phương thức crashNow()
Sửa đổi lớp MainActivity
để chạy phương thức crashNow()
, nó sẽ kích hoạt một RuntimeException khi nút được nhấp.
1 |
package com.chikeandroid.crashlyticstutorial; |
2 |
|
3 |
import android.os.Bundle; |
4 |
import android.support.v7.app.AppCompatActivity; |
5 |
import android.view.View; |
6 |
import android.widget.Button; |
7 |
|
8 |
import com.crashlytics.android.Crashlytics; |
9 |
|
10 |
import io.fabric.sdk.android.Fabric; |
11 |
|
12 |
public class MainActivity extends AppCompatActivity { |
13 |
|
14 |
private Button mCrashNowButton; |
15 |
@Override |
16 |
protected void onCreate(Bundle savedInstanceState) { |
17 |
super.onCreate(savedInstanceState); |
18 |
Fabric.with(this, new Crashlytics()); |
19 |
setContentView(R.layout.activity_main); |
20 |
|
21 |
mCrashNowButton = (Button) findViewById(R.id.btn_crash_now); |
22 |
|
23 |
mCrashNowButton.setOnClickListener(new View.OnClickListener() { |
24 |
@Override |
25 |
public void onClick(View view) { |
26 |
crashNow(); |
27 |
} |
28 |
}); |
29 |
} |
30 |
|
31 |
private void crashNow() { |
32 |
throw new RuntimeException("This is a crash"); |
33 |
} |
34 |
} |
Sự cố!
Chạy ứng dụng và nhấp vào nút crash.
7. Xem xét lại bảng điều khiển
Sau khi tạo ra sự cố thành công, vào lại bảng điều khiển để xem vấn đề được ghi lại ngay lập tức. Bạn cũng sẽ nhận được một email thông báo từ Fabric về sự cố. Trong bảng điều khiển cho đến lúc này, bây giờ chúng ta có một vấn đề, một sự cố và người dùng bị ảnh hưởng. Bạn có thể tìm kiếm một vấn đề cụ thể với tên tập tin, tên phương thức, số dòng, hoặc ghi chú (cùng một thuật ngữ).
Khi bạn nhấp vào một vấn đề, nó sẽ mở ra một trang nơi bạn nhận được một báo cáo sâu về sự cố. Trang tập hợp tất cả các sự cố xảy ra.



Các phần quan trọng của giao diện này là như sau:
1 | Tên dự án và tên gói, bao gồm cả số dòng nơi xảy ra sự cố |
2 | Lọc sự cố hiện tại |
3 | Tổng số sự cố |
4 | Tổng số người dùng bị ảnh hưởng bởi sự cố |
5 | Bật/tắt để đánh dấu vấn đề đã đóng hoặc mở |
6 | Biểu đồ về số sự cố mỗi ngày |
7 | Nút để chia sẻ các vấn đề thông qua Twitter hoặc với các thành viên trong nhóm của bạn |
8 | Tỷ lệ phần trăm các thiết bị bị sự cố với ước lượng kích hoạt |
9 | Tỷ lệ phần trăm sự cố đã xảy ra khi ứng dụng được focus |
10 | Tỷ lệ phần trăm các thiết bị sự cố đã được root |
11 | Phân cấp tên model của thiết bị bị sự cố |
12 | Phân cấp hệ điều hành của thiết bị sự cố |
13 | Tải về exception stack trace như một tập tin .txt |
14 | Một view có thể mở rộng cho stack trace |
15 | Xem thông tin chi tiết của từng báo cáo sự cố. |
Trên trang này, bạn cũng có thể xem ghi chú và viết ghi chú về mỗi sự cố.
8. Các tính năng khác của Crashlytics
Ứng dụng Fabric mobile
Fabric cũng có một ứng dụng điện thoại di động miễn phí có sẵn trên Google Play Store. Với ứng dụng điện thoại di động, bạn nhận được thông báo đẩy ngay lập tức bất cứ khi nào một sự cố nghiêm trọng xảy ra, cũng như một số dữ liệu đưa ra cái nhìn sâu sắc về vấn đề: một phân tích về các nền tảng và thiết bị bị ảnh hưởng, full stack trace, số lượng người dùng bị ảnh hưởng, những người bị ảnh hưởng, ghi chú được nhập về một vấn đề, và một tùy chọn để chia sẻ vấn đề với các thành viên trong nhóm. Tất cả các dữ liệu này được cập nhật theo thời gian thực.



Log các ngoại lệ xảy ra
Crashlytics cũng cho phép bạn log lại ngoại lệ xảy ra trong khối catch
bằng cách sử dụng Crashlytics.logException(Exception)
.
1 |
try { |
2 |
myMethodThatThrows(); |
3 |
} catch (Exception e) { |
4 |
Crashlytics.logException(e); |
5 |
// handle your exception here!
|
6 |
}
|
Tất cả các ngoại lệ được log sẽ xuất hiện như là các vấn đề "non-fatal" trong bảng điều khiển Fabric. Crashlytics xử lý ngoại lệ trên một tiến trình nền dành riêng, như vậy việc log ngoại lệ sẽ không ngăn chặn giao diện người dùng của ứng dụng và tác động đến hiệu năng đối với ứng dụng của bạn sẽ nhỏ.
Log tuỳ biến
Khi bạn log một ngoại lệ, bạn có thể tạo một thông điệp log tuỳ biến liên quan đến dữ liệu sự cố của bạn, và nó sẽ được hiển thị trên trang quản lý Crashlytics trên sự cố cụ thể đó.
1 |
Crashlytics.log(int priority, String tag, String msg); |
Ngoài việc xuất hiện trong báo cáo của bạn, nó cũng sẽ được thêm vào LogCat của Android. Để ngăn chặn điều đó xảy ra, hãy sử dụng cái dưới đây để thay thế:
1 |
Crashlytics.log(String message); |
Như trong ví dụ dưới đây:
1 |
private void crashNow() { |
2 |
Crashlytics.log("My log message"); |
3 |
throw new RuntimeException("This is a crash"); |
4 |
}
|



Nhận dạng người dùng duy nhất
Để xác định người dùng cuối duy nhất trong ứng dụng của bạn trong bảng điều khiển để gỡ lỗi một cách dễ dàng, Crashlytics có phương thức dưới đây:
1 |
Crashlytics.setUserIdentifier("12345"); |
2 |
Crashlytics.setUserEmail("fakeemail@gmail.com"); |
3 |
Crashlytics.setUserName("Test User"); |
Sử dụng Crashlytics.setUserIdentifier
để cung cấp một số ID, token, hoặc băm nhỏ giá trị định danh duy nhất người dùng trong ứng dụng của bạn mà không tiết lộ hay truyền bất kỳ thông tin cá nhân của họ.
Phân phối phiên bản beta
Nếu bạn muốn phân phối phiên bản beta của ứng dụng của bạn cho một tập hợp người dùng để thử nghiệm và nhận được phản hồi trước khi phát hành ứng dụng của bạn cho công chúng, Crashlytics có một công cụ rất hữu ích miễn phí được gọi là Beta. Tôi sẽ không đi sâu vào nó ở đây, nhưng hãy xem các tài liệu chính thức để biết thêm thông tin.
Vô hiệu hoá Crashlytics cho Debug Build
Bạn có thể vô hiệu hóa Crashlytics cho debug builde, nó sẽ đẩy nhanh tiến trình debug build của bạn.
Trước tiên, thêm vào tập tin build.gradle của bạn:
1 |
buildTypes { |
2 |
...
|
3 |
debug { |
4 |
// Disable fabric build ID generation for debug builds
|
5 |
ext.enableCrashlytics = false |
6 |
}
|
7 |
}
|
Sau đó, vô hiệu hóa Crashlytics Kit tại runtime.
1 |
...
|
2 |
@Override
|
3 |
protected void onCreate(Bundle savedInstanceState) { |
4 |
super.onCreate(savedInstanceState); |
5 |
|
6 |
// Set up Crashlytics, disabled for debug builds
|
7 |
Crashlytics crashlyticsKit = new Crashlytics.Builder() |
8 |
.core(new CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build()) |
9 |
.build(); |
10 |
|
11 |
Fabric.with(this, crashlyticsKit); |
12 |
setContentView(R.layout.activity_main); |
13 |
|
14 |
}
|
Tổng kết
Crashlytics rất mạnh mẽ và hữu ích để có được các báo cáo sự cố có hiệu quả. Trong hướng dẫn này, bạn đã học được:
- cách làm thế nào để tích hợp Crashlytics vào dự án Android của bạn
- cách bảng điều khiên Crashlytics có thể cung cấp cho bạn cái nhìn sâu sắc về một vấn đề
- cách log ngoại lệ
- cách viết log tuỳ biến
- cách nhận dạng người dùng riêng biệt để dễ dàng gỡ lỗi
- cách vô hiệu hóa Crashlytics cho các debug-build
Để tìm hiểu thêm về Crashlytics, bạn có thể tham khảo tài liệu chính thức. Bạn cũng có thể tham khảo một số hướng dẫn khác của chúng tôi về các dịch vụ dựa trên đám mây cho phát triển Android.
- Android SDKLàm quen với Firebase cho AndroidAshraff Hathibelagal
- Android SDKGoogle Play Games Services: Tạo Event và QuestAshraff Hathibelagal
- QuizQuiz: Amazon Web Services, bạn có biết công cụ nào thích hợp cho công việc không?Adam Brown
- Android SDKCách tạo ra một ứng dụng Chat trên Android bằng cách sử dụng FirebaseAshraff Hathibelagal