Skip to main content

📱 웹뷰 (Webview)

웹뷰(Webview) 란, 안드로이드나 iOS 등 모바일 네이티브 앱(Native App) 안에서 웹 페이지(HTML/CSS/JS)를 보여주기 위해 내장된 브라우저 컴포넌트입니다.

쇼핑몰 앱에서 PG사의 결제창을 띄울 때 가장 많이 사용되는 기술이며, 결제 연동 시 외부 결제 앱(ISP, 앱카드, 백신 등)을 호출하기 위한 별도의 처리가 필수적입니다.


🔗 외부 앱 호출 메커니즘 (App Scheme)

PC 웹과 달리, 모바일 결제는 인증을 위해 다른 앱(ISP, 신한판, 토스 등)을 실행해야 하는 경우가 많습니다. 이때 웹뷰는 스스로 다른 앱을 켤 수 없으므로, 네이티브 앱(껍데기) 에게 "이 앱 좀 켜줘"라고 요청해야 합니다.


🛠️ OS별 필수 구현 사항

결제창에서 "결제하기"를 눌렀는데 아무 반응이 없거나 백지 화면이 뜬다면, 아래 설정이 누락된 것입니다.

1. Android (WebViewClient)

안드로이드는 intent:// 스킴을 인식하여 앱을 실행하거나, 앱이 없으면 플레이스토어로 이동시키는 로직을 shouldOverrideUrlLoading 메서드에 구현해야 합니다.

// WebViewClient 설정
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.startsWith("intent:")) {
try {
// 인텐트 파싱 및 앱 실행
Intent intent = Intent.parseUri(url, Intent.URI_INTENT_SCHEME);
startActivity(intent);
return true;
} catch (Exception e) {
// 앱이 설치 안 된 경우 마켓으로 이동 로직 필요
}
}
// 기타 마켓 URL 처리 등...
return false;
}

2. iOS (WKNavigationDelegate)

iOS는 info.plist에 허용할 URL Scheme(LSApplicationQueriesSchemes)을 등록하고, decidePolicyFor 메서드에서 외부 앱을 엽니다.

// WKNavigationDelegate 설정
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
guard let url = navigationAction.request.url else {
decisionHandler(.cancel)
return
}

// http, https가 아닌 경우 (ispmobile://, kakaotalk:// 등)
if url.scheme != "http" && url.scheme != "https" {
if UIApplication.shared.canOpenURL(url) {
UIApplication.shared.open(url) // 앱 실행
decisionHandler(.cancel)
return
}
}
decisionHandler(.allow)
}
🚨 iOS 필수 체크 (Info.plist)

iOS 보안 정책상, 호출하려는 카드사 앱의 스킴(예: ispmobile, kb-acp, mpocket.online.ansimclick 등)이 Info.plist 파일의 LSApplicationQueriesSchemes 리스트에 등록되어 있지 않으면 앱이 실행되지 않습니다.


⚖️ 스토어 심사 및 정책 가이드

웹뷰로 앱을 개발할 때, Apple App StoreGoogle Play Store의 심사 지침을 위반하여 앱 등록이 거절(Reject)되는 경우가 많습니다. 아래 사항을 반드시 확인하세요.

1. 결제 수단 정책 (PG vs In-App)

KICC와 같은 **PG(웹 결제)**를 붙여도 되는 상품과, 반드시 **인앱결제(IAP)**를 써야 하는 상품은 엄격히 구분됩니다.

구분설명허용 결제 수단
실물 상품배달 음식, 의류, 쇼핑몰 상품, 오프라인 서비스(호출, 예약) 등 앱 외부에서 소비되는 재화✅ PG 결제 가능
(신용카드, 간편결제 등)
디지털 상품게임 아이템, 웹툰/소설 열람권, 이모티콘, 음원 스트리밍, 클라우드 용량 등 앱 내부에서 소비되는 재화🚫 PG 결제 절대 불가
(애플/구글 인앱결제 필수)
심사 거절 사유

디지털 콘텐츠(예: 유료 동영상 강의)를 판매하면서 PG사 결제창을 연동할 경우, "3.1.1 In-App Purchase" 위반으로 심사가 거절됩니다.

2. 최소 기능 요구사항 (Guideline 4.2)

단순히 모바일 웹사이트를 웹뷰로 감싸기만 한 앱(Wrapper App)은 애플 앱스토어 심사에서 거절됩니다.

  • Apple Guideline 4.2: "앱은 웹사이트 이상의 기능, 콘텐츠, UI를 제공해야 합니다."
  • 해결책:
    • 네이티브 기능 연동: 푸시 알림(Push Notification), 카메라/GPS 연동, 생체 인증 로그인 등 웹에서 할 수 없는 기능을 추가하세요.
    • 네이티브 UI 혼합: 전체를 웹뷰로 채우기보다, 하단 탭바(Tab Bar)나 네비게이션 바는 네이티브로 구현하는 것이 좋습니다.

🔗 공식 정책 확인하기

각 스토어의 공식 가이드라인 원문을 통해 최신 정책을 확인하시기 바랍니다.