Skip to main content

Integrating Payment Window in App WebView

When you call the card/simple payment window from a WebView in your merchant app, it triggers transitions to external apps such as card company apps, simple payment apps, and authentication apps. To ensure these external apps launch properly, you need to register app schemes (URL Schemes) and package names in your merchant app, and add code to handle external app calls from the WebView. Please refer to the settings below for Android/iOS.

Why App Scheme & Package Registration is Required

Mobile operating systems restrict access to external apps that haven't been declared in advance due to security policies. To ensure the payment window called from the WebView properly transitions to card company and authentication apps, please register the list below and manage it based on change history.

App Scheme List

Issuer / InstitutionApp Scheme
ISP (BC/Kookmin)ispmobile://
KB Kookmin Cardkb-acp://, liivbank://, newliiv://, kbbank://
Shinhan Cardshinhan-sr-ansimclick://, shinhan-sr-ansimclick-lpay://, shinhan-sr-ansimclick-naverpay://, shinhan-sr-ansimclick-payco://, smshinhanansimclick://, travelwallet://
NH Nonghyup Cardnhallonepayansimclick://, npappcardansimclick://, nonghyupcardansimclick://
Lotte Cardlottesmartpay://, lotteappcard://
Samsung Cardmpocket.online.ansimclick://, vguardstart://, monimopay://, monimopayauth://
Hana Cardcloudpay://, hanawalletmembers://
Hyundai Cardhdcardappcardansimclick://, smhyundaiansimclick://
Woori Cardcom.wooricard.wcard://, newsmartpib://
Citi Cardcitimobileapp://, citicardappkr://
Simple Paymentsamsungpay://, naversearchthirdlogin://, kakaotalk://, payco://, lpayapp://, shinsegaeeasypayment://, supertoss://
Bank Transfer (KFTC)kftc-bankpay://
T-Moneytmoneypay://
Mobile PASStauthlink://, ktauthexternalcall://, upluscorporation://
Kakao Bankkakaobank://
Rocket Paycoupang://,rocketpay://

Android

You must register the following package names in your AndroidManifest.xml to allow your app to query and interact with external payment apps.

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" /> <package android:name="com.shinhan.sbanking"/> <package android:name="kr.co.samsungcard.mpocket" /> <package android:name="net.ib.android.smcard" /> <package android:name="com.kbcard.cxh.appcard" /> <package android:name="com.kbstar.liivbank" /> <package android:name="com.kbstar.kbbank" /> <package android:name="com.kbstar.reboot" /> <package android:name="nh.smart.nhallonepay" /> <package android:name="com.nh.cashcardapp" /> <package android:name="com.lcacApp" /> <package android:name="kvp.jjy.MispAndroid320" /> <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" /> <package android:name="com.wooribank.smart.npib" /> <package android:name="com.hyundaicard.appcard" /> <package android:name="com.lumensoft.touchenappfree" /> <package android:name="com.TouchEn.mVaccine.webs" /> <package android:name="kr.co.shiftworks.vguardweb" /> <package android:name="com.ahnlab.v3mobileplus" /> <package android:name="com.nhnent.payapp" /> <package android:name="com.samsung.android.spay" /> <package android:name="com.samsung.android.spaylite" /> <package android:name="com.ssg.serviceapp.android.egiftcertificate" /> <package android:name="com.lottemembers.android" /> <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" /> <package android:name="com.kt.ktauth" /> <package android:name="com.lguplus.smartotp" /> <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>

You should override the shouldOverrideUrlLoading method in your WebViewClient to handle external app schemes. This prevents the net::ERR_UNKNOWN_URL_SCHEME error.

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

Add the required App Schemes to your Info.plist and implement the navigation policy to allow App-to-App transitions.

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>

Implement the decidePolicyForNavigationAction method in WKNavigationDelegate to handle non-HTTP schemes as shown below:

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);
}