초기화 (Initialization)
SDK 사용 전 initialize() 메서드를 호출하여 초기화합니다. 앱 시작 시 한 번만 호출하면 됩니다.
기본 초기화
import { appify } from '@nolraunsoft/appify-sdk';
await appify.initialize({ debug: true });
초기화 옵션 (InitializeOptions)
| 옵션 | 타입 | 기본값 | 설명 |
|---|---|---|---|
debug | boolean | 'console' | 'alert' | 'both' | false | 디버그 모드 활성화 및 출력 방식 |
serializedPermissions | boolean | false | 권한 요청 직렬화 (동시 요청 방지) |
bounces | boolean | true | (iOS) 웹뷰 바운스 효과 |
hideScrollbar | boolean | false | 스크롤바 숨김 |
enableRefresh | boolean | false | Pull-to-refresh 기능 |
statusBar | object | - | 상태바 스타일 설정 |
safeArea | object | - | Safe Area 적용 영역 |
전체 옵션 예시
import { appify } from '@nolraunsoft/appify-sdk';
await appify.initialize({
debug: 'console',
serializedPermissions: true,
bounces: false,
hideScrollbar: true,
enableRefresh: false,
statusBar: {
barStyle: 'dark-content',
backgroundColor: '#ffffff'
},
safeArea: {
edge: ['top', 'bottom']
}
});
초기화 상태 확인
isInitialized
SDK 초기화 여부를 동기적으로 확인합니다.
if (appify.isInitialized) {
// SDK 사용 가능
}
ensureInitialized()
초기화되지 않은 경우 NotInitializedError를 throw합니다.
import { appify, NotInitializedError } from '@nolraunsoft/appify-sdk';
try {
appify.ensureInitialized();
// SDK 사용
} catch (error) {
if (error instanceof NotInitializedError) {
console.error('SDK가 초기화되지 않았습니다.');
}
}
waitForInit()
초기화 완료를 비동기로 대기합니다.
await appify.waitForInit();
// 초기화 완료 후 실행
자동 초기화 대기
SDK 메서드 호출 시 초기화가 완료되지 않았다면, 100ms 동안 자동으로 대기합니다.
// 초기화와 동시에 다른 작업 시작 가능
appify.initialize({ debug: true }); // await 없이 호출
// 100ms 이내에 초기화 완료되면 정상 동작
const info = await appify.device.getInfo();
100ms 내에 초기화가 완료되지 않으면 NotInitializedError가 발생합니다.
중복 호출 방지
initialize()는 내부적으로 중복 호출을 방지합니다. 여러 번 호출해도 최초 1회만 실행됩니다.
await appify.initialize({ debug: true });
await appify.initialize({ debug: false }); // 무시됨, 경고 로그 출력
싱글턴 인스턴스
SDK는 싱글턴으로 동작합니다:
import { appify } from '@nolraunsoft/appify-sdk';
console.log(appify === window.appify); // true
동작 방식
- SDK 로드 시 자동으로 인스턴스 생성
window.appify에 등록- 이후 import 시 동일 인스턴스 반환
따라서 Provider에서 한 번 초기화하면, 모든 페이지에서 바로 사용할 수 있습니다.
SDK 정리 (destroy)
SDK를 완전히 정리하려면 destroy() 메서드를 사용합니다.
appify.destroy();
destroy() 동작
- 모든 이벤트 리스너 제거
- 진행 중인 요청 취소 (
SDKDestroyedError발생) - 대기 중인 큐 정리
- history 패치 복원
- 초기화 상태 리셋
주의사항
destroy() 호출 후에는 SDK를 다시 사용할 수 없습니다. 페이지를 새로고침하면 새 인스턴스가 생성됩니다.
appify.destroy();
await appify.device.getInfo(); // SDKDestroyedError 발생
React 예시
"use client";
import { ReactNode, useEffect } from "react";
import { appify } from "@nolraunsoft/appify-sdk";
export function AppifyProvider({ children }: { children: ReactNode }) {
useEffect(() => {
appify.initialize({ debug: true });
return () => {
// 필요시 cleanup (일반적으로 불필요)
// appify.destroy();
};
}, []);
return <>{children}</>;
}
import { AppifyProvider } from "./providers/AppifyProvider";
export default function RootLayout({ children }: { children: React.ReactNode }) {
return (
<html lang="ko">
<body>
<AppifyProvider>{children}</AppifyProvider>
</body>
</html>
);
}
이후 어떤 페이지에서든 import { appify }로 바로 사용:
"use client";
import { appify } from "@nolraunsoft/appify-sdk";
export default function AnyPage() {
const handleClick = async () => {
const info = await appify.device.getInfo();
console.log(info);
};
return <button onClick={handleClick}>디바이스 정보</button>;
}
SSR 안전성
SDK는 SSR (Server-Side Rendering) 환경에서 안전하게 동작합니다.
typeof window === "undefined"체크로 서버 환경 감지- 서버에서 import해도 에러 없음
- 브라우저에서만 실제 기능 동작
// Next.js 서버 컴포넌트에서도 import 가능 (동작하지 않을 뿐)
import { appify } from "@nolraunsoft/appify-sdk";
// 단, 실제 사용은 클라이언트 컴포넌트에서
"use client";
import { appify } from "@nolraunsoft/appify-sdk";