브라우저가 아닌 웹뷰(Webview)에서 카드(또는 외부결제) 결제창을 호출할 때 추가되는 앱스킴 목록과 패키지명을 지원하기 위합니다.
앱스킴(appScheme) 파라미터를 추가할 경우 별도의 처리 없이 대외기관 앱에서 상점앱으로 돌아갈 수 있습니다. 결제요청 파라미터를 참조하세요.
아래 파일 내용에 있는 카드사 앱 및 대외기관 앱 패키지를 등록하여 주시기 바랍니다.
// AndroidManifest.xml
// 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=”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.lge.lgpay” /> <!-- 엘지페이 -->
<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.lgt.tmoney” /> <!—모바일티머니 -->
<package android:name=”com.sktelecom.tauth” /> <!-- PASS(SKT) -->
<package android:name=”com.kt.ktauth” /> <!-- PASS(KT) -->
<package android:name=”com.lguplus.smartotp” /> <!-- PASS(LGT) -->
</queries>
AndroidManifest 파일에 필요한 패키지를 추가하고, 앱 실행을 위한 코드를 추가해 주시기 바랍니다.
WebviewCleint의 shouldOverdideUrlLoading 함수에 오버라이딩 로직을 추가해 주셔야 외부 앱을 호출하거나 마켓으로 연결 시 nert::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;
}
private boolean startSchemeIntent(String url) {
final Intent schemeIntent;
try {
schemeIntent = Intent.parseUri(url, Intent.URI_INTENT_SCHEME);
} catch (URISyntaxException e) {
return false;
}
try {
startActivity(schemeIntent);
return true;
} catch (ActivityNotFoundException e) {
final String packageName = schemeIntent.getPackage();
if (!TextUtils.isEmpty(packageName)) {
startActivity(new Intent(Intent.ACTION_VIEW,
Uri.parse("market://details?id=" + packageName)));
return true;
}
}
return false;
}
개발 시 유의사항
쿠키 이슈
Android 5.0 부터 발생 WebView Security 부분이 강화되면서 Third party cookie 설정에 따라 WebView에서 Block 처리됩니다.
CookieSyncManager를 사용하지 않는 WebView의 경우 아래 가이드는 적용하지 않습니다.
JAVA
@Override
public void onCreate(Bundle savedInstanceState) {
...
// 시작시 쿠키 동기화 매니저 생성
CookieSyncManager.createInstance(this);
}
@Override
protected void onResume() {
...
// 앱에 focus가 돌아올 경우 동기화
CookieSyncManager.getInstance().startSync();
}
@Override
protected void onPause() {
...
// 앱이 focus를 잃은 경우 동기화 중지
CookieSyncManager.getInstance().stopSync();
}
아래 앱스킴 리스트를 추가하여 주시기 바랍니다.
카드사/대외기관 | 앱스킴(appScheme) |
---|---|
ISP(BC/국민) | ispmobile:// |
KB국민카드 | kb-acp://, liivbank://, newliiv://, kbbank:// |
신한카드 | sshinhan-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://, smhyndaiansimclick:// |
우리카드 | com.wooricard.wcard://, newsmartpib:// |
씨티카드 | citimobileapp://, citicardappkr:// |
간편결제 | samsungpay://, naversearchthirdlogin://, kakaotalk://, payco://, lpayapp://, shinsegaeeaypayment://, supertoss:// |
계좌이체(금결원) | kftc-bankpay;:// |
티머니 | Tmoneypay:// |
모바일PASS | tauthlink://, ktauthexternalcall://, upluscorpoation:// |
//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>smhyndaiansimclick</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>shinsegaeeaypayment</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>upluscorpoation</string>
<string>monimopay</string>
<string>monimopayauth</string>
</array>
XCode에 Info.plist에 있는 앱스킴을 추가하고, 앱 실행을 위한 코드를 추가해 주시기 바랍니다.
webView
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);
}
쿠키이슈
안드로이드와 마찬가지 이슈로 항상 허용을 권장합니다.
Objective-C
[[NSHTTPCookieStorage sharedHTTPCookieStorage]
setCookieAcceptPolicy:NSHTTPCookieAcceptPolicyAlways];
…