소개
웹 서비스를 네이티브 앱으로 전환할 때, 단 3줄의 코드로 네이티브 기능을 호출할 수 있습니다.
Appify SDK는 React Native WebView 환경에서 웹 코드가 카메라, GPS, 소셜 로그인 등 네이티브 기능을 직접 호출할 수 있게 해주는 WebView 브릿지 SDK입니다. 기존 웹 서비스 코드를 그대로 유지하면서 네이티브 앱 기능을 점진적으로 추가할 수 있습니다.
무엇을 할 수 있나요
Appify SDK를 사용하면 웹 코드에서 다음 네이티브 기능을 호출할 수 있습니다.
- 카카오, 네이버, 구글, 애플 소셜 로그인
- 디바이스 정보 및 광고 식별자(IDFA/ADID) 조회
- 카메라 촬영 및 QR/바코드 스캔
- GPS 위치 정보
- 푸시 알림 토큰 등록 및 로컬 알림
- 앱 전용 영구 저장소
- 햅틱 피드백, 공유, 파일 다운로드, 클립보드, 권한 관리
- 인앱 리뷰 요청
- 앱 이벤트 트래킹
설치
npm
npm install @nolraunsoft/appify-sdk
CDN
서버사이드 빌드 없이 스크립트 태그로 직접 로드할 수 있습니다.
<script src="https://cdn.jsdelivr.net/npm/@nolraunsoft/appify-sdk@latest/dist/appify-sdk.min.js"></script>
3줄 빠른 예시
import { appify } from '@nolraunsoft/appify-sdk';
await appify.initialize();
const info = await appify.device.getInfo();
초기화 한 번, 호출 한 번으로 네이티브 디바이스 정보를 가져올 수 있습니다. 모든 API는 이 패턴을 따릅니다.
기능 목록
| 카테고리 | 기능 | 모듈 |
|---|---|---|
| 인증 | 카카오, 네이버, 구글, 애플 소셜 로그인 | appify.auth |
| 디바이스 | 디바이스 정보, IDFA/ADID 조회 | appify.device |
| 카메라 | 카메라 촬영, QR/바코드 스캔 | appify.camera |
| 위치 | GPS 위치 정보 | appify.location |
| 푸시 알림 | 푸시 토큰 등록, 로컬 알림 발송 | appify.notification |
| 저장소 | 앱 전용 키-값 영구 저장소 | appify.storage |
| 햅틱 | 진동 피드백 | appify.haptic |
| 공유 | 시스템 공유 시트 | appify.share |
| 다운로드 | 파일 다운로드 및 저장 | appify.download |
| 클립보드 | 텍스트 복사/붙여넣기 | appify.clipboard |
| 권한 | 런타임 권한 요청 및 상태 확인 | appify.permission |
| 인앱 리뷰 | 앱스토어/플레이스토어 리뷰 요청 | appify.review |
| 앱 이벤트 | 커스텀 이벤트 전송 | appify.event |
아키텍처
SDK가 어떻게 동작하는지 이해하면 디버깅과 통합이 훨씬 쉬워집니다.
웹 코드는 SDK 메서드를 호출하고, SDK는 내부적으로 postMessage/onMessage를 통해 React Native WebView 브릿지와 통신합니다. 네이티브 앱이 실제 기능을 실행한 뒤 결과를 다시 웹으로 전달합니다.
주요 특징
싱글턴 패턴: 어디서 import해도 동일한 인스턴스를 반환합니다. 초기화는 앱 전체에서 한 번만 호출하면 됩니다.
TypeScript 지원: 모든 API에 완전한 타입 정의가 포함되어 있습니다. IDE 자동완성과 컴파일 타임 오류 검사를 활용할 수 있습니다.
환경 감지: appify.isWebview 속성으로 현재 환경이 WebView인지 일반 웹 브라우저인지 자동으로 감지합니다. 웹 브라우저에서 실행될 때는 네이티브 API 호출을 조건부로 건너뛸 수 있습니다.
SSR 안전: Next.js, Nuxt 등 서버사이드 렌더링 프레임워크에서 안전하게 동작합니다. 서버 환경에서는 브라우저 전용 API를 호출하지 않습니다.
Promise 기반: 모든 API가 Promise를 반환하므로 async/await 문법을 자연스럽게 사용할 수 있습니다.
에러 처리: 타임아웃, 미초기화, 브릿지 미연결 상황마다 구분된 에러 클래스를 제공합니다. try/catch로 각 상황을 명확하게 처리할 수 있습니다.
동시성 제어: 여러 API를 동시에 호출해도 요청 큐가 순서를 보장합니다. 경쟁 조건(race condition)이나 브릿지 충돌 없이 안전하게 동작합니다.