앱 연동 가이드

브라우저가 아닌 웹뷰(Webview)에서 카드(또는 외부결제) 결제창을 호출할 때 추가되는 앱스킴 목록과 패키지명을 지원하기 위합니다.
앱스킴(appScheme) 파라미터를 추가할 경우 별도의 처리 없이 대외기관 앱에서 상점앱으로 돌아갈 수 있습니다. 결제요청 파라미터를 참조하세요.

01Android

아래 파일 내용에 있는 카드사 앱 및 대외기관 앱 패키지를 등록하여 주시기 바랍니다.

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

02iOS

아래 앱스킴 리스트를 추가하여 주시기 바랍니다.

카드사/대외기관 앱스킴(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);
  }

03개발 시 유의사항

쿠키이슈

안드로이드와 마찬가지 이슈로 항상 허용을 권장합니다.

Objective-C
[[NSHTTPCookieStorage sharedHTTPCookieStorage]
setCookieAcceptPolicy:NSHTTPCookieAcceptPolicyAlways];