앱 웹뷰(WebView)에서 결제창 연동하기
상점 앱의 웹뷰(WebView)에서 카드·간편결제 결제창을 호출하면 카드사 앱, 간편결제 앱, 인증 앱 등 외부 앱으로 전환이 발생합니다. 이때 외부 앱이 정상적으로 실행되도록 상점 앱에 앱 스킴(URL Scheme)과 패키지명을 등록하고, 웹뷰에서 외부 앱 호출을 처리하는 코드를 추가해야 합니다. Android/iOS별 설정 방법은 아래를 참고하세요.
앱 스킴·패키지 등록이 필요한 이유
모바일 OS는 보안 정책상 사전에 선언되지 않은 외부 앱으로의 접근을 제한합니다. 웹뷰에서 호출한 결제창이 카드사·인증 앱으로 정상 전환되도록 아래 목록을 등록하고, 변경 이력을 기준으로 관리해 주세요.
변경 이력
| 일자 | 요약 |
|---|---|
| 2025.10.15 | 기존 연동 가이드 리뉴얼 |
앱스킴 목록
| 카드사/대외기관 | 앱스킴 |
|---|---|
| ISP(BC/국민) | ispmobile:// |
| KB국민카드 | kb-acp://, liivbank://, newliiv://, kbbank:// |
| 신한카드 | shinhan-sr-ansimclick://, shinhan-sr-ansimclick-lpay://, shinhan-sr-ansimclick-naverpay://, shinhan-sr-ansimclick-payco://, smshinhanansimclick://, travelwallet:// |
| NH농협카드 | nhallonepayansimclick://, npappcardansimclick://, nonghyupcardansimclick:// |
| 롯데카드 | lottesmartpay://, lotteappcard:// |
| 삼성카드 | mpocket.online.ansimclick://, vguardstart://, monimopay://, monimopayauth:// |
| 하나카드 | cloudpay://, hanawalletmembers:// |
| 현대카드 | hdcardappcardansimclick://, smhyundaiansimclick:// |
| 우리카드 | com.wooricard.wcard://, newsmartpib:// |
| 씨티카드 | citimobileapp://, citicardappkr:// |
| 간편결제 | samsungpay://, naversearchthirdlogin://, kakaotalk://, payco://, lpayapp://, shinsegaeeasypayment://, supertoss:// |
| 계좌이체(금결원) | kftc-bankpay:// |
| 티머니 | tmoneypay:// |
| 모바일PASS | tauthlink://, ktauthexternalcall://, upluscorporation:// |
| 카카오뱅크 | kakaobank:// |
| 로켓페이 | coupang://,rocketpay:// |
Android
아래 파일 내용에 있는 카드사 앱 및 대외기관 앱 패키지를 등록하여 주시기 바랍니다.
AndroidManifest.xml
<queries>
<package android:name="com.shcard.smartpay" /> <!-- 신한페이판 -->
<package android:name="com.shinhancard.smartshinhan" /> <!-- 신한페이판-공동인증서 -->
<package android:name="com.mobiletoong.travelwallet" /> <!—신한카드 트래블월렛 -->
<package android:name="com.shinhan.smartcaremgr" /> <!—신한 슈퍼 sol -->
<package android:name="com.shinhan.sbanking"/> <!--신한SOL뱅크-->
<package android:name="kr.co.samsungcard.mpocket" /> <!-- 삼성앱카드 -->
<package android:name="net.ib.android.smcard" /> <!-- 삼성카드 모니모 -->
<package android:name="com.kbcard.cxh.appcard" /> <!-- KB Pay -->
<package android:name="com.kbstar.liivbank" /> <!-- Liiv(KB국민은행) -->
<package android:name="com.kbstar.kbbank" /> <!-- Liiv(KB국민은행) -->
<package android:name="com.kbstar.reboot" /> <!-- Liiv Next(KB국민은행) -->
<package android:name="nh.smart.nhallonepay" /> <!-- NH올원페이 -->
<package android:name="com.nh.cashcardapp" /> <!-- NH농협은행(앱캐시) -->
<package android:name="com.lcacApp" /> <!-- 롯데카드 -->
<package android:name="kvp.jjy.MispAndroid320" /> <!-- ISP/페이북 -->
<package android:name="com.hanaskcard.paycla" /> <!-- 하나카드 -->
<package android:name="kr.co.hanamembers.hmscustomer" /> <!-- 하나맴버스 -->
<package android:name="com.hanaskcard.rocomo.potal" /> <!-- 하나카드 - 공동인증서-->
<package android:name="kr.co.citibank.citimobile" /> <!-- 씨티카드 -->
<package android:name="com.wooricard.smartapp" /> <!-- 우리WON카드 -->
<package android:name="com.wooribank.smart.npib" /> <!-- 우리WON뱅킹 -->
<package android:name="com.hyundaicard.appcard" /> <!-- 현대카드 -->
<package android:name="com.lumensoft.touchenappfree" /> <!-- 공동인증서 -->
<package android:name="com.TouchEn.mVaccine.webs" /> <!-- TouchEn mVaccine(신한) -->
<package android:name="kr.co.shiftworks.vguardweb" /> <!-- V-Guard(삼성) -->
<package android:name="com.ahnlab.v3mobileplus" /> <!-- V3(NH,현대) -->
<package android:name="com.nhnent.payapp" /> <!-- PAYCO -->
<package android:name="com.samsung.android.spay" /> <!-- 삼성페이 -->
<package android:name="com.samsung.android.spaylite" /> <!-- 삼성페이 미니 -->
<package android:name="com.ssg.serviceapp.android.egiftcertificate" /> <!-- SSG페이 -->
<package android:name="com.lottemembers.android" /> <!-- Lpay -->
<package android:name="com.nhn.android.search" /> <!-- 네이버페이 -->
<package android:name="com.kakao.talk" /> <!-- 카카오페이 -->
<package android:name="com.kftc.bankpay.android" /> <!-- 뱅크페이 -->
<package android:name="viva.republica.toss" /> <!-- 토스페이 -->
<package android:name="com.sktelecom.tauth" /> <!-- PASS(SKT) -->
<package android:name="com.kt.ktauth" /> <!-- PASS(KT) -->
<package android:name="com.lguplus.smartotp" /> <!-- PASS(LGT) -->
<package android:name="com.kakaobank.channel"/> <!--카카오뱅크-->
<package android:name="com.lgt.tmoney" /> <!—- 모바일티머니 -->
<package android:name="com.coupang.mobile" /> <!-- 로켓페이 -->
<package android:name="com.coupangpay.rocketpay" /> <!—- 로켓페이 -->
</queries>
WebViewClient의 shouldOverrideUrlLoading 함수에 오버라이딩 로직을 추가해 주셔야 외부 앱을 호출하거나 마켓으로 연결 시 net::ERR_UNKNOWN_URL_SCHEME 에러가 발생하지 않습니다.
Java
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (!URLUtil.isNetworkUrl(url) && !URLUtil.isJavaScriptUrl(url)) {
final Uri uri;
try {
uri = Uri.parse(url);
} catch (Exception e) {
return false;
}
if ("intent".equals(uri.getScheme())) {
return startSchemeIntent(url);
} else {
try {
startActivity(new Intent(Intent.ACTION_VIEW, uri));
return true;
} catch (Exception e) {
return false;
}
}
}
return false;
}
iOS
Info.plist에 있는 앱스킴을 추가하고, 앱 실행을 위한 코드를 추가해 주시기 바랍니다.
Info.plist
<key>LSApplicationQueriesSchemes</key>
<array>
<string>ispmobile</string>
<string>kb-acp</string>
<string>liivbank</string>
<string>newliiv</string>
<string>kbbank</string>
<string>shinhan-sr-ansimclick</string>
<string>shinhan-sr-ansimclick-lpay</string>
<string>shinhan-sr-ansimclick-naverpay</string>
<string>shinhan-sr-ansimclick-payco</string>
<string>smshinhanansimclick</string>
<string>travelwallet</string>
<string>nhallonepayansimclick</string>
<string>npappcardansimclick</string>
<string>nonghyupcardansimclick</string>
<string>lottesmartpay</string>
<string>lotteappcard</string>
<string>mpocket.online.ansimclick</string>
<string>cloudpay</string>
<string>hanawalletmembers</string>
<string>hdcardappcardansimclick</string>
<string>smhyundaiansimclick</string>
<string>com.wooricard.wcard</string>
<string>newsmartpib</string>
<string>citimobileapp</string>
<string>citicardappkr</string>
<string>samsungpay</string>
<string>naversearchthirdlogin</string>
<string>kakaotalk</string>
<string>payco</string>
<string>lpayapp</string>
<string>shinsegaeeasypayment</string>
<string>supertoss</string>
<string>kftc-bankpay</string>
<string>tmoney</string>
<string>appfree</string>
<string>mvaccinestart</string>
<string>vguardstart</string>
<string>v3mobileplusweb</string>
<string>tauthlink</string>
<string>ktauthexternalcall</string>
<string>upluscorporation</string>
<string>monimopay</string>
<string>monimopayauth</string>
<string>kakaobank</string>
<string>tmoneypay</string>
<string>coupang</string>
<string>rocketpay</string>
</array>
XCode에 앱스킴을 추가 후 앱간 호출을 하기 위해 아래와 같이 코드를 추가합니다.
Objective-C
- (void)webView:(WKWebView *)webView
decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction
decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler {
NSURL* url = navigationAction.request.URL;
if (url != nil && ![url.scheme isEqual:@"http"] && ![url.scheme isEqual:@"https"]) {
[[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil];
decisionHandler(WKNavigationActionPolicyCancel);
return;
}
decisionHandler(WKNavigationActionPolicyAllow);
}