본문 바로가기
프로그래밍

웹뷰 앱을 스토어에 등록하기 위한 필요 기능

by 채연2 2025. 7. 17.

요즘 웹 기반 서비스를 빠르게 앱으로 출시하려는 수요가 많아짐. 특히 사내 전용 서비스, 이벤트 페이지, 커머스 사이트 등은 굳이 앱을 따로 만들기보다 기존 웹을 WebView로 감싸는 방식을 많이 시도함. 하지만 구글 플레이나 애플 앱스토어에서는 이런 단순 웹뷰 앱을 거부하는 경우가 많음.
사유는 명확함.

 

"이 앱은 웹사이트를 단순히 감싸고 있을 뿐이며, 앱으로서의 고유한 기능이 없습니다."
"해당 서비스는 사용자가 브라우저 즐겨찾기로 추가하여 사용할 수 있습니다."

 

 

특히 애플은 더욱 엄격함. 내장 사파리 뷰를 사용하는 수준이라고 판단되면 앱이 아예 등록되지 못하고 심사에서 거절됨. 즉, 단순한 웹뷰 앱으로는 스토어에 올라갈 수 없음.

 

 


 

웹뷰 앱을 스토어에 등록하기 위한 필요 기능

어떤 기능이 들어가야 할까?

앱 심사 통과를 위해선 앱이 네이티브 환경에서 돌아갈 필요성을 보여줘야 함. 즉, 이 앱이 단순 웹이 아니라 '앱'이어야 한다는 점을 기능적으로 입증해야 함.

 

1. 스플래시 화면 (Splash Screen)

앱을 실행했을 때 보여주는 로고 또는 브랜드 페이지. 기술적으로는 큰 의미 없어 보여도, 앱의 "독립된 실행 환경"이라는 인상을 줌.
Flutter 기준 flutter_native_splash를 활용해 설정 가능.

 

2. 하단 내비게이션 (Bottom Navigation)

웹페이지 내에서 탭 기능이 있다면, 이를 네이티브 BottomNavigationBar로 분리하는 것도 효과적임.
예를 들어 쇼핑몰이라면 "홈 / 카테고리 / 장바구니 / 마이페이지" 등 각 탭을 각각의 WebView 인스턴스로 구성.
이렇게 하면 단일 웹뷰가 아니라 탭 별로 명확한 구조를 가진 앱처럼 보이게 됨.

 

3. 로딩 인디케이터

페이지 전환이나 로딩 시, 네이티브로 CircularProgressIndicator 또는 커스텀 로딩을 넣으면 사용성 측면에서도 도움되고, 단순 웹이 아님을 보여줌. onPageStarted / onPageFinished 이벤트로 처리 가능.

 

4. 설정 페이지

'설정'이라는 항목이 있다는 것만으로도 앱이라는 인상을 줄 수 있음. 이곳에 몇 가지 기본적인 기능을 넣는 게 중요함

 

5. 푸시 알림 기능

Firebase Cloud Messaging(FCM) 또는 OneSignal 등을 연동해서 사용자에게 푸시 알림을 보내는 기능을 추가하면, 단순한 웹뷰 앱이라는 이미지에서 완전히 벗어남. 실제로 FCM만 연동해도 구글 측 심사에서 별도 설명 없이 통과되는 경우 많음.
웹과의 연동 없이도 기본 푸시 토큰 수신 및 저장만 해도 효과 있음.

 

6. 파일 업로드 기능 (input type="file")

웹에서 <input type="file"> 태그를 사용할 경우, 기본 WebView는 파일 탐색기 열기가 안 되거나, 제한적인 동작만 지원됨.
이 기능을 네이티브 코드로 확장하여 카메라 촬영, 갤러리 선택 등까지 지원하게 만들면 명백한 네이티브 연동의 증거가 됨.

 

7. 위치 권한 요청 및 연동

지도 기반 기능이 있는 웹사이트일 경우, 위치 접근을 네이티브로 처리해서 웹에 전달하는 구조를 넣으면 좋음.
이를 위해 위치 권한 요청, GPS 활성화 여부 확인, 위치정보 전달 등의 로직을 추가. Flutter에서는 geolocator 또는 location 패키지를 활용할 수 있음.

 

8. 앱 내 브라우저 분기 (외부 링크 처리)

외부 링크를 열 때 단순히 같은 WebView에서 열게 하면 사용자 경험이 떨어짐. 외부 링크는 launchUrl로 외부 브라우저에서 열도록 분기하거나, 앱 내 다른 WebView 인스턴스를 띄우는 구조를 넣으면 네이티브 구성으로 인정받을 수 있음.
특히 앱 내 팝업, 모달 창 등 UI를 활용하면 더욱 좋음.

 

9. 다크모드 지원

웹 자체가 다크모드를 지원하더라도, 앱 차원에서 시스템 설정에 따라 darkMode를 적용하고 WebView에도 전달하는 로직을 추가하면, 네이티브 환경을 고려한 구조로 인정받을 수 있음. 예를 들어 Flutter 기준 ThemeMode.system과 JavaScriptChannel로 웹에 테마 전달 가능.

 

10. 사용자 설정 저장 (SharedPreferences)

사용자가 앱 내에서 어떤 설정(예: 자동로그인, 알림 동의 등)을 선택했을 때, 이를 네이티브에 저장하고 앱 시작 시 반영하는 기능. 웹만 사용하는 앱이라면 불가능한 구조이므로, 심사 통과에 유리함.

 

+: 네트워크 상태 체크

오프라인 상태에서 앱 진입 시, “인터넷 연결이 필요합니다” 같은 네이티브 alert 또는 별도 네트워크 상태 페이지를 보여주면 앱 자체가 웹을 감싸는 껍데기가 아님을 보여줄 수 있음. Flutter에서는 connectivity_plus 패키지 사용 가능.


 

요약하자면, 기능이 많아야 통과되는 건 아님. 하지만 최소한 아래 중 2~3가지는 꼭 있어야 함:

  • 스플래시 또는 설정화면
  • 탭 분리 구조 또는 푸시 알림
  • 파일 업로드나 위치 권한처럼 명백한 네이티브 연동 기능

내가 넣었던 기능들 (Flutter + WebView 조합)

실제로 만든 앱에서는 아래와 같은 기능들을 넣었음.

푸시 알림은 서버 쪽도 작업을 해줘야 하므로, 최대한 앱 쪽에서만 작업 가능한 기능들로만 구성함.

기능명 구현 방식
스플래시 화면 flutter_native_splash로 앱 실행 시 로고 노출
위치 권한 요청 스플래시 화면에서 위치 권한 요청을 띄움
하단 내비게이션 BottomNavigationBar로 탭 구성, 각 탭마다 WebView 로딩
로딩 인디케이터 페이지 로딩 상태를 감지하여 인디케이터 보여줌
설정 페이지 Flutter ListTile 구성으로 네이티브 설정 화면 제공
└ 앱 버전 보기 package_info_plus 사용
└ 개인정보처리방침 외부 링크를 새 WebView로 띄움
└ 캐시 삭제 WebView 컨트롤러로 캐시/쿠키 clear 처리

 


 

단순한 웹뷰 앱은 더 이상 등록이 어려움. 하지만 몇 가지 핵심 네이티브 기능만 잘 구현해도 충분히 통과할 수 있음.

 

  • 앱 로딩/진입 → 스플래시로 구분
  • 화면 구조 → 탭 분리로 명확히
  • 로딩 상태 → 네이티브 인디케이터 제공
  • 설정/정보 → 앱으로서 존재 이유 명확화

가장 중요한 건 "이 앱은 왜 앱이어야 하는가?"에 대한 답을 기능으로 말해주는 것임.

웹으로 다 되는 걸 굳이 앱으로 만들었다면, 스토어는 그 이유를 묻고 있음. 그 질문에 대답할 수 있는 기능을 넣는 것이 "심사 통과"의 핵심인 듯!!

 

 

320x100

댓글