앱 심사 팁
Google Play, App Store 심사 통과 팁
왜 이 가이드가 필요한가요?
Unveily SDK는 WebView 기반 하이브리드 앱 솔루션입니다. Google Play와 Apple App Store는 심사 시점과 다르게 동작하는 앱을 엄격히 검토합니다.
좋은 소식은, Unveily SDK의 구조가 이미 심사에 유리하게 설계되어 있다는 것입니다.
Unveily SDK가 심사에 안전한 이유
네이티브 기능은 빌드 시 고정됩니다
| 항목 | 동적 변경 가능? | 설명 |
|---|---|---|
| Bridge 함수 목록 | 불가능 | 네이티브 코드에 하드코딩, 앱 업데이트 없이 추가 불가 |
config.json 모듈 ON/OFF | 불가능 | 앱 빌드 시 assets에 포함되어 고정 |
| 앱 권한 (카메라, 위치 등) | 불가능 | AndroidManifest.xml에 빌드 시 고정 |
| 웹 콘텐츠 (HTML/CSS/JS) | 가능 | 서버에서 변경 가능하나, 네이티브 기능 범위 내에서만 동작 |
웹 콘텐츠가 변경되더라도, 호출할 수 있는 네이티브 기능의 범위는 빌드 시 결정되므로 새로운 네이티브 기능이 동적으로 추가되는 것은 불가능합니다.
심사 제출 시 권장 사항
1. App Review Information에 설명 추가
Google Play Console의 앱 콘텐츠 또는 심사 메모에 아래 내용을 포함하세요:
This app uses Android WebView to display web content from our server.
All native device API access (camera, location, biometric, etc.) is
controlled by a static configuration file (config.json) bundled at
build time. No new native capabilities can be added dynamically
after installation. The app does not download or execute native code
at runtime.2. config.json 사본 첨부
심사 메모에 config.json 내용을 첨부하면, 심사관이 앱이 사용하는 기능 범위를 명확히 이해할 수 있습니다.
{
"modules": {
"accessibility": { "enabled": true },
"bottomTabs": { "enabled": true },
"sideDrawer": { "enabled": false }
},
"security": {
"screenshotProtectionEnabled": true,
"rootDetectionEnabled": true
}
}3. Bridge API 목록 문서화
웹 콘텐츠가 호출하는 유일한 전역 객체는 window.unveilyBridge 이며, 모든 네이티브 기능은 이 객체의 네임스페이스를 통해 노출됩니다. 필요시 아래 목록을 제출하세요:
unveilyBridge— 데이터 저장, 페이지 이동, 캐시 관리unveilyBridge.accessibilityPanel/.tts/.stt— 접근성 패널, TTS, STTunveilyBridge.bottomTabs/.sideDrawer/.topDownMenu— 네비게이션unveilyBridge.qr— QR/바코드 스캔 (config에서 활성화된 경우)unveilyBridge.auth— 생체 인증, 소셜 로그인 (플랜에서 활성화된 경우)
_unveilyBridgeQR, _unveilyBridgeBiometric 처럼 밑줄(_)로 시작하는 이름은 SDK 내부 등록 이름일 뿐, 웹에서 직접 호출하지 않습니다. 웹 개발자가 사용하는 공개 API는 window.unveilyBridge 하나뿐입니다.
4. App Store(iOS) 제출 시
App Store에 제출하는 경우에도 같은 원칙이 적용됩니다. 추가로 다음을 확인하세요:
- 사용하는 기능에 해당하는
Info.plist사용 목적 문자열(예:NSCameraUsageDescription,NSFaceIDUsageDescription)을 사실대로 명확하게 작성 - 인앱 결제를 사용하는 경우 StoreKit 2 상품을 App Store Connect에 구성
- 위 WebView 동작 설명 메모는 App Store Connect의 심사 노트에도 동일하게 첨부
심사 후 주의사항
config.json 변경 = 앱 업데이트 필요
config.json은 앱 빌드 시 assets/에 포함됩니다. 설정을 변경하려면:
config.json수정- 앱 다시 빌드 (새 APK/AAB 생성)
- Google Play에 업데이트 제출 (재심사)
config.json은 서버에서 원격으로 교체할 수 없습니다. 앱에 번들된 정적 파일이므로, 변경 시 반드시 앱 업데이트가 필요합니다.
웹 콘텐츠 변경은 자유
웹앱(HTML/CSS/JS)은 서버에서 자유롭게 업데이트할 수 있습니다. 이것은 일반 웹사이트 업데이트와 동일하며, 앱 재심사가 필요하지 않습니다.
단, 아래 사항을 지켜야 합니다:
- 심사 시 승인된 기능 범위를 벗어나지 않을 것
- 새로운 네이티브 기능을 우회하는 코드를 추가하지 않을 것
- Google Play 정책에 위반되는 콘텐츠를 표시하지 않을 것
자주 거절되는 사례와 대응
거절 회신을 AI로 빠르게 작성
심사에서 거절되면 **거절 사유 원문 + 위 WebView 동작 설명 메모 + config.json**을 AI 어시스턴트(Claude·Gemini·ChatGPT)에 주고 "심사팀에 보낼 정중하고 명확한 회신 초안"을 요청하면 대응 속도를 크게 높일 수 있습니다. 보내기 전 사실관계는 직접 확인하세요.
| 거절 사유 | 대응 방법 |
|---|---|
| "앱이 웹사이트를 감싸기만 함" | 네이티브 기능(QR스캔, 생체인증, 푸시알림 등)을 활용하고 있음을 설명 |
| "앱의 핵심 기능이 WebView에 의존" | 네이티브 Bridge 기능 목록과 config.json을 제출하여 차별점 설명 |
| "권한 사용 목적이 불명확" | 각 권한이 어떤 기능에 사용되는지 심사 메모에 명시 |
WebView 앱이 거절되는 가장 흔한 이유는 "웹사이트를 감싸기만 한 앱"으로 판단되는 경우입니다. Unveily SDK의 네이티브 Bridge 기능들(QR스캔, 생체인증, 접근성 등)을 적극 활용하고 심사 메모에 명시하면 승인 가능성이 높아집니다.