Crash 설정

IMQA Crash는 다양한 옵션이 존재하며, 사용자가 원하는 설정을 추가하여 더욱 자세한 크래시 리포트를 받아 보실 수 있습니다.

1. Custom Crash 발생

IMQA Crash Agent 에서는 다음과 같은 사용자 정의 에러를 수집할 수 있습니다. Exception 객체와 함께 특정 태그, 에러의 등급을 지정할 수 있습니다.

 try {
  ...
} catch (SomeException e) {
  IMQACrashAgent.SendException(e, "ERROR TAG", ErrorRank.Major);
}

에러 랭크의 경우 별도로 정해져있지는 않으며 앱의 구성에 따라 변경하여 사용가능합니다.

RankDescription

ErrorRank.Unhandle

기본이 되는 에러 등급으로 처리하지 못한 크래시에 사용

ErrorRank.Critical

앱에 상당한 영향을 주는 크래시 일 경우

ErrorRank.Major

앱에 영향이 있는 크래시 일 경우

ErrorRank.Minor

앱에 큰 영향이 없는 크래시 일 경우

2. Custom Web Crash 발생

IMQA Webview Agent 에서는 상세한 웹 에러 분석을 위해 원하는 에러 메시지를 지정하여 사용자 정의 에러를 수집할 수 있습니다.

Webview Crash 수집을 위해서는 CrashWebviewBridge 를 추가해 주어야 합니다. ‘Android > MPM 설정 > WebView HTTP 요청 > Android Agent 설정'을 참고하세요.

사용자 정의 에러 생성

IMQA Crash는 사용자가 정의한 에러를 감지하여 수집합니다.

다른 에러 일지라도 같은 에러 타입일 경우, 동일 에러로 인식하여 에러가 누적될 경우가 생길 수 있습니다

사용자 정의 에러 메시지 지정

WebView에서 수집하는 기본 에러 메시지를 원하는 에러 메시지로 변경하여 수집할 수 있습니다. 상세한 웹 에러 분석을 위해 에러 메시지를 지정하는 것을 권장드립니다.

에러 메시지를 지정하는 경우, 같은 에러 타입일지라도 다른 에러로 수집됩니다.

사용자 정의 에러 수집할 js 파일
...
// try catch를 사용할 경우
try {
	...
}
catch(e){
	throw new Error("사용자가 지정한 에러 메시지");
}

// 기본 Error를 생성할 경우
new Error("사용자가 지정한 에러 메시지");

아래와 같이 IMQA Crash 서비스에서 웹 크래시를 상세한 정보와 함께 확인할 수 있습니다.

❶ 캐치된 에러 인스턴스 웹뷰에서 에러가 생성되었을 경우 해당 에러의 캐치된 에러 인스턴스명을 표시합니다.

❷ 사용자 정의 에러 메시지 특정 에러 타입 에러가 생성될 때 사용자가 지정한 메시지를 표시합니다.

throw new Error("사용자가 지정한 에러 메시지");

❸ 에러 타입 / 코드 라인 넘버 웹뷰 에러의 타입과 해당 에러의 라인 넘버를 확인 할 수 있습니다.

에러 타입설명

Error

사용자가 설정한 에러 타입입니다.

EvalError

eval()에서 발생하는 오류입니다.

RangeError

변수의 유효한 범위를 벗어났을 경우 생성되는 오류입니다.

ReferenceError

잘못된 참조를 했을 경우 생성되는 오류입니다.

SyntaxError

잘못된 구문이 존재하는 경우 오류입니다.

TypeError

유효한 자료형이 아닐 경우 해당 타입의 오류입니다.

URIError

encodeURI()decodeURI() 함수에 부적절한 매개변수를 넘겨준 경우 생성되는 오류입니다.

AggregateError

여러 오류를 하나의 오류로 감싸는 오류 형태입니다.

3. EventPath 등

EventPath는 사용자의 기기에서 앱이 어떤 경로로 동작하는지 파악하는 기능입니다. 이를 사용하기 위해서는 클래스에 EventPath 추적 코드를 넣어주어야 합니다. 추적코드에 ‘STEP’ 과 ‘LABEL’에 해당되는 내용을 넣어줍니다.

STEPLABEL

수집할 콜스택의 단계, 해당 스텝의 클래스명, 함수이름, 호출 위치를 가지고 옵니다.

수집된 EventPath 의 별칭, 크래시 정보 창에서 EventPath의 각 발생 위치를 별칭으로 보여줍니다.

public void onClickSomething() {
      EventPathManager.CreateEventPath(STEP, LABEL);
  }

4. Custom User ID 등록

크래시 발생시 사용자를 구분하기 위한 커스텀한 ID를 부여할 수 있습니다. 유저 정보를 등록한 후에는 발생하는 크래시에서 사용자 정보가 포함되어 보여집니다.

Class NameMethod NameDescription

IdentifierCollector

setCustomUserId(STRING)

사용자 ID를 등록합니다.

IdentifierCollector

setCustomUserName(STRING)

사용자 이름을 등록합니다.

IdentifierCollector

setCustomUserMail(STRING)

사용자 이메일을 등록합니다.

IdentifierCollector.setCustomUserId("10"); // 사용자 ID를 등록합니다.
IdentifierCollector.setCustomUserName("My User Name"); // 사용자 이름을 등록합니다.
IdentifierCollector.setCustomUserMail("My User Email"); // 사용자 이메일을 등록합니다.

5. Custom User Log/Key 등록

크래시가 발생하기 전에 원하는 로그를 개발자가 직접 추가로 남길 수 있습니다. (최대 100개)

Class NameMethod NameDescription

CustomLogCollector

log(STRING)

로그를 일반 문자열로 남깁니다.

CustomLogCollector

log(KEY, VALUE)

로그를 키:값 형태로 남깁니다.

CustomLogCollector.log("test log"); // 로그를 일반 문자열로 남깁니다.
CustomKeyCollector.log("My Key", "My Log"); // 로그를 키:값 형태로 남깁니다.

6. 초기화 Option 추가

IMQAController 초기화 시 옵션을 지정할 수 있습니다. IMQA Crash 모드를 파라미터나 Option을 이용해 변경할 수 있습니다.

Class NameMethod Name

IMQAOption

setDirectUploadFlag(BOOL)

업로드 모드를 설정합니다. false 로 설정할 경우 debug mode 에서도 동작합니다.

IMQAOption

setPrintLog(BOOL)

Log 출력 여부를 설정합니다. true 로 설정할 경우 IMQA 의 Log가 출력됩니다.

IMQAOption

setAnrOn(BOOL)

ANR 을 모니터링 여부를 설정합니다. false 로 설정할 경우 ANR은 크래시 수집에서 제외됩니다.

IMQAOption

setAnrTimeoutIntercal(int)

ANR 타임아웃이 발생하는 시간을 설정합니다. (milliseconds 단위)

MyApplication.java
@Override
public void onCreate() {
    super.onCreate();
      
    io.imqa.core.IMQAOption imqaOption = new io.imqa.core.IMQAOption();

    /*  
     * 기본값 : true
     * ANR 정보 수집 여부를 설정합니다. 
     * true : ANR 발생 여부를 모니터링 합니다.
     * false : ANR 발생 모니터링을 중지합니다.
    */
    imqaOption.setAnrOn(false);


    /*
     * 기본값 : 5000
     * anrTimeoutInveral : ANR 타임아웃이 발생하는 시간을 설정합니다(milliseconds 단위)
     */
    imqaOption.setAnrTimeoutInterval(5000);


   /*
     * 기본값 : false
     * Log 출력 여부를 설정합니다. 
     * true : IMQA Crash 의 Log가 출력됩니다.
    */
    imqaOption.setPrintCrashLog(true);

    /*
     * 기본값 : true
     * 수집된 크래시 정보를 크래시 발생 순간에 업로드합니다.
     * true : 크래시 발생 순간에 업로드합니다.
     * false : 보관 후 재실행시 업로드 합니다.
    */
    imqaOption.setCrashDirectUploadFlag(false);

    /*
     * 기본값 : false
     * 압축 알고리즘을 설정합니다.
     * true : zstandard 압축 알고리즘 사용.
     * false : gzip 압축 알고리즘 사용.
    */
    imqaOption.setCompressZstd(true);

    /*
     * 기본값 : 'https://collector.imqa.io'
     * 크래시 서버 URL을 설정합니다.
     * String : 서버 정보
     */
    imqaOption.setCrashServerUrl('https://collector.imqa.io');

    io.imqa.crash.IMQACrashAgent.InitializeAndStartSession(
        this, // Application Context
        BuildConfig.FLAVOR, // Project Flavor Setting
        "PROJECT_KEY",  // 발급 받은 프로젝트 키
        imqaOption // 옵션을 설정할 경우 객체 추가
    );
}

Last updated