에러 처리 (Error Handling)
Appify SDK는 통신 과정이나 네이티브 작업 중 발생하는 에러를 체계적으로 관리할 수 있도록 커스텀 에러 클래스를 제공합니다.
에러 클래스
AppifyError
모든 SDK 에러의 베이스 클래스입니다.
code: 에러 코드message: 에러 메시지details: 추가 상세 정보 (객체)
주요 에러 클래스 목록
| 에러 클래스 | 코드 | 설명 |
|---|---|---|
TimeoutError | TIMEOUT | 네이티브 응답이 지정된 시간 내에 오지 않을 때 |
BridgeNotAvailableError | BRIDGE_NOT_AVAILABLE | 네이티브 브릿지가 없는 환경(일반 브라우저 등)에서 호출 시 |
NativeError | NATIVE_ERROR | 네이티브 코드 실행 중 에러 발생 시 |
PermissionDeniedError | PERMISSION_DENIED | 필요한 권한이 거부되었을 때 |
ConcurrentRequestError | CONCURRENT_REQUEST | 동일한 요청이 이미 진행 중일 때 |
NotInitializedError | NOT_INITIALIZED | SDK 초기화 전에 메서드 호출 시 |
SDKDestroyedError | SDK_DESTROYED | SDK가 destroy된 후 메서드 호출 시 |
에러 처리 패턴
try...catch 블록을 사용하여 안전하게 에러를 처리할 수 있습니다.
import {
appify,
TimeoutError,
BridgeNotAvailableError,
NotInitializedError,
SDKDestroyedError
} from '@nolraunsoft/appify-sdk';
async function safeCall() {
try {
const data = await appify.storage.getItem('my_data');
} catch (error) {
if (error instanceof NotInitializedError) {
console.error('SDK가 초기화되지 않았습니다. initialize()를 먼저 호출하세요.');
} else if (error instanceof SDKDestroyedError) {
console.error('SDK가 이미 destroy되었습니다.');
} else if (error instanceof TimeoutError) {
console.error('응답 시간이 초과되었습니다.');
} else if (error instanceof BridgeNotAvailableError) {
console.warn('앱 환경이 아닙니다. 폴백 처리를 시작합니다.');
} else {
console.error('알 수 없는 에러가 발생했습니다:', error.message);
}
}
}
초기화 관련 에러
NotInitializedError
SDK 메서드 호출 시 initialize()가 완료되지 않으면 발생합니다.
SDK는 내부적으로 100ms 동안 초기화 완료를 대기합니다:
- 100ms 이내에 초기화 완료 → 요청 정상 진행
- 100ms 초과 시 미완료 →
NotInitializedError발생
// 잘못된 사용 - 초기화 전 호출
const info = await appify.device.getInfo(); // NotInitializedError 발생 가능
// 올바른 사용
await appify.initialize();
const info = await appify.device.getInfo(); // 정상 동작
SDKDestroyedError
destroy() 호출 후 SDK 메서드를 사용하면 발생합니다.
appify.destroy();
const info = await appify.device.getInfo(); // SDKDestroyedError 발생
에러 코드 참조
| 코드 | 의미 | 대응 방법 |
|---|---|---|
TIMEOUT | 네이티브 응답 타임아웃 | 네트워크 상태 확인, 재시도 |
BRIDGE_NOT_AVAILABLE | 웹뷰 환경 아님 | appify.isWebview 체크 후 분기 처리 |
NATIVE_ERROR | 네이티브 측 오류 | 에러 상세 정보 확인 |
PERMISSION_DENIED | 권한 거부 | 사용자에게 권한 필요성 안내 |
CONCURRENT_REQUEST | 중복 요청 | 이전 요청 완료 후 재시도 |
NOT_INITIALIZED | 미초기화 | initialize() 호출 확인 |
SDK_DESTROYED | SDK 파괴됨 | 새 인스턴스 필요 (페이지 새로고침) |