2015-08-12 14 views
9

Tắt báo cáo lỗi Crashlytics tương đối straight forward.. Tôi cũng muốn tắt các câu trả lời để gỡ lỗi các bản dựng. Tuy nhiên,Làm thế nào để vô hiệu hóa câu trả lời Crashlytics?

new Crashlytics.Builder().answers(null); 

không hoạt động kể từ rõ ràng câu trả lời không thể được null và

new Crashlytics.Builder().answers(new CustomAnswers()); 

với CustomAnswers là lớp học của tôi mở rộng Answers được tôi một NPE khi gọi Answers.getInstance(). Nhưng cách tiếp cận đó là cồng kềnh để bắt đầu so với việc chỉ đơn giản gọi một số phương thức enable().

Bất kỳ ý tưởng nào?

Một lưu ý phụ, tôi thực sự hy vọng Vải sẽ sớm cập nhật và cải thiện tài liệu của họ.

+2

Xin chào, Mike từ Vải tại đây. Thật tuyệt vời khi biết rằng bạn muốn vô hiệu hóa các câu trả lời khi gỡ lỗi các bản dựng. Ngay bây giờ, câu trả lời được bật cho tất cả các bản dựng, nhưng tôi sẽ cho nhóm biết rằng bạn muốn có thể thực hiện việc này. Hãy cho tôi biết những cải tiến bạn muốn xem cho tài liệu của chúng tôi tại đây: http://docs.fabric.io/index/fabric –

+0

Xin chào Mike, cảm ơn bạn đã trả lời. Điều gì về việc giới thiệu một lớp Answers.Builder à la CrashlyticsCore.Builder? Nó đã có thể vượt qua một đối tượng Answers vào Crashlytics, nhưng điều đó dường như không hoạt động như dự định. Trên các tài liệu: Tôi thực sự muốn thấy một javadoc thực sự cho phiên bản hiện tại. Ngoài ra, thông tin là a) một chút nằm rải rác giữa trang tài liệu và quảng cáo "cơ sở tri thức" b) tài liệu ở một số nơi dường như đang nhắm mục tiêu các phiên bản cũ. – jbxbergdev

+0

Cảm ơn, bạn có thể truy cập docs.fabric.io để biết tài liệu mới nhất của chúng tôi và Javadocs có tại đây: http://docs.fabric.io/android/javadocs.html –

Trả lời

4

trên ứng dụng của tôi, chúng tôi làm điều đó theo cách cũ thời:

if (!IS_DEBUG) { 
    Fabric.with(this, new Crashlytics()); 
} 

hoạt động tốt.

Tất nhiên bạn có thể khởi tạo với bất kỳ thông số tùy chỉnh nào bạn cần.

chỉnh sửa:

để có được debug boolean chỉ là vấn đề của việc sử dụng gradle để ủng hộ bạn:

src/ 
    main/ // your app code 
    debug/ 
     AppSettings.Java: 
      public static final boolean IS_DEBUG = true; 
    release/ 
     AppSettings.Java: 
      public static final boolean IS_DEBUG = false; 

chỉnh sửa:

tôi sẽ khuyên bạn không dùng BuildConfig. DEBUG, xem bài viết này: http://www.digipom.com/be-careful-with-buildconfig-debug/

+2

Xin cảm ơn, nhưng điều này đã cho tôi một IllegalStateException khi gọi các phương thức Trả lời tiếp tục xuống đường. – jbxbergdev

+0

Tôi vừa kiểm tra mã của mình, chúng tôi luôn kiểm tra 'if (! AppSettings.IS_DEBUG)' trước khi gọi bất kỳ phương thức Crashlytics nào. Xin lỗi nó không hữu ích hơn, nếu bạn tìm cách xử lý tự động hơn, hãy cho tôi biết. – Budius

+1

FYI, 'BuildConfig.DEBUG' luôn hoạt động bình thường đối với các bản dựng Gradle. Lỗi đó chỉ xuất hiện trong ADT. –

-1

T ry mã này

CrashlyticsCore core = new CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build(); 
Fabric.with(this, new Crashlytics.Builder().core(core).build()); 

hoặc

Fabric.with(this, new Crashlytics.Builder().core(new CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build()).build()); 
+2

Đó là thiết lập hiện tại của tôi. Nhưng nó chỉ ảnh hưởng đến báo cáo sự cố, không phải Trả lời (Câu trả lời luôn được bật bất kể cài đặt bị tắt()). – jbxbergdev

2

Đối với thời điểm hiện tại, tôi giải quyết vấn đề theo cách Java cũ:

Mở rộng Answers sử dụng một sắp xếp của singleton:

public class CustomAnswers extends Answers { 

    private static CustomAnswers instance; 

    private boolean mEnabled; 

    private CustomAnswers(boolean enabled) { 
     super(); 
     mEnabled = enabled; 
    } 

    public static synchronized void init(boolean enabled) { 
     if (instance == null) { 
      instance = new CustomAnswers(enabled); 
     } 
    } 

    public static synchronized CustomAnswers get() { 
     return instance; 
    } 

    @Override 
    public void logSignUp(SignUpEvent event) { 
     if (mEnabled) { 
      super.logSignUp(event); 
     } 
    } 

    // (...) 
} 

Khởi tạo Crashlytics với việc thực hiện câu trả lời:

boolean isDebug = DebugHelper.isDebugVersion(this); 
CustomAnswers.init(!isDebug); 
CrashlyticsCore crashlyticsCore = 
     new CrashlyticsCore.Builder().disabled(isDebug).build(); 
Fabric.with(this, new Crashlytics.Builder() 
     .core(crashlyticsCore).answers(CustomAnswers.get()).build()); 

Sử dụng câu trả lời thực hiện cho các sự kiện:

CustomAnswers.get().logInvite(new InviteEvent()); 

này sẽ vô hiệu hóa các sự kiện được ghi lại.

Lưu ý rằng, như được mô tả trong bài đăng đầu tiên của tôi, Answers.getInstance() sẽ trả lại giá trị rỗng và không phải là trường hợp CustomAnswers trong trường hợp đó.

Các vấn đề liên quan