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 / Institution | App Scheme |
|---|---|
| ISP (BC/Kookmin) | ispmobile:// |
| KB Kookmin Card | kb-acp://, liivbank://, newliiv://, kbbank:// |
| Shinhan Card | shinhan-sr-ansimclick://, shinhan-sr-ansimclick-lpay://, shinhan-sr-ansimclick-naverpay://, shinhan-sr-ansimclick-payco://, smshinhanansimclick://, travelwallet:// |
| NH Nonghyup Card | nhallonepayansimclick://, npappcardansimclick://, nonghyupcardansimclick:// |
| Lotte Card | lottesmartpay://, lotteappcard:// |
| Samsung Card | mpocket.online.ansimclick://, vguardstart://, monimopay://, monimopayauth:// |
| Hana Card | cloudpay://, hanawalletmembers:// |
| Hyundai Card | hdcardappcardansimclick://, smhyundaiansimclick:// |
| Woori Card | com.wooricard.wcard://, newsmartpib:// |
| Citi Card | citimobileapp://, citicardappkr:// |
| Simple Payment | samsungpay://, naversearchthirdlogin://, kakaotalk://, payco://, lpayapp://, shinsegaeeasypayment://, supertoss:// |
| Bank Transfer (KFTC) | kftc-bankpay:// |
| T-Money | tmoneypay:// |
| Mobile PASS | tauthlink://, ktauthexternalcall://, upluscorporation:// |
| Kakao Bank | kakaobank:// |
| Rocket Pay | coupang://,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.
<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.
@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.
<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:
- (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);
}