Integrating WebView
This guide provides the list of App Schemes and Package Names required to invoke card issuer or third-party payment apps from within a WebView rather than a standard mobile browser.
By adding the appScheme parameter, users can be automatically redirected back to your merchant app from the external payment app without additional handling. Please refer to the payment request parameters for details.
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:// |
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" /> </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>
</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);
}