본문 바로가기

Kotlin

[j android] webview 결제 연동 -> 외부 앱 연결

728x90
반응형

webview에서 결제시 페이북, 앱카드 결제 연결이 안되는 이슈가 발생하였다. 

 

1. Manifest.xml 에 추가

<queries>
        <!--신용카드-->
        <package android:name="kr.co.samsungcard.mpocket" />  <!--삼성 앱카드, 삼성 앱카드 공동인증서-->
        <package android:name="com.shcard.smartpay" />  <!--신한 페이판-->
        <package android:name="com.shinhancard.smartshinhan" />  <!--신한(ARS/일반결제/Smart결제), 신한 공동인증서-->
        <package android:name="com.kbcard.cxh.appcard" />  <!--KBPay-->
        <package android:name="com.kbstar.liivbank" />  <!--LiiV(국민은행)-->
        <package android:name="com.kbstar.reboot" />  <!--new liib-->
        <package android:name="com.kbstar.kbbank" />  <!--new liib-->
        <package android:name="kvp.jjy.MispAndroid320" />  <!--페이북/ISP-->
        <package android:name="com.hanaskcard.paycla" />  <!--하나카드 원큐페이-->
        <package android:name="kr.co.hanamembers.hmscustomer" />  <!--하나멤버스-->
        <package android:name="com.lcacApp" />  <!--롯데 앱카드-->
        <package android:name="nh.smart.nhallonepay" />  <!--NH 올원페이, NH 올원페이 공동인증서-->
        <package android:name="net.nshc.droidx3web" />  <!--NH 카드-->
        <package android:name="kr.shiftworks.vguardweb" />  <!--NH 카드-->
        <package android:name="com.payprotocol.walletkr" />  <!--NH 카드-->
        <package android:name="kr.danal.app.damoum" />  <!--NH 카드-->
        <package android:name="com.nh.cashcardapp" />  <!--NH 카드-->
        <package android:name="kr.co.kfcc.mobilebank" />  <!--NH 카드-->
        <package android:name="com.wooricard.smartapp" />  <!--우리 WON 카드-->
        <package android:name="com.wooricard.wpay" />  <!--우리 카드-->
        <package android:name="com.wooribank.smart.npib" />  <!--우리 카드-->
        <package android:name="com.mysmilepay.app" />  <!--우리 카드-->
        <package android:name="com.hyundaicard.appcard" />  <!--현대 앱카드-->
        <package android:name="kr.co.citibank.citimobile" />  <!--씨티카드-->
        <package android:name="com.citibank.cardapp" />  <!--씨티카드-->

        <!--공인인증-->
        <package android:name="com.hanaskcard.rocomo.potal" />  <!--하나카드-->
        <package android:name="com.lumensoft.touchenappfree" />  <!--공동인증서-->

        <!--백신-->
        <package android:name="com.TouchEn.mVaccine.webs" />  <!--TouchEn mVaccine(신한)-->
        <package android:name="com.ahnlab.v3mobileplus" />  <!--V3(NH, 현대)-->
        <package android:name="kr.co.shiftworks.vguardweb" />  <!--V-Guard(삼성)-->

        <!--간편결제-->
        <package android:name="com.samsung.android.spay" />  <!--삼성페이(삼성, 농협, KB)-->
        <package android:name="com.samsung.android.spaylite" />  <!--삼성페이 미니(삼성, KB)-->
        <package android:name="com.kakao.talk" />  <!--카카오페이-->
        <package android:name="com.nhn.android.search" />  <!--네이버페이-->
        <package android:name="com.ssg.serviceapp.android.egiftcertificate" />  <!--SSGPay(현대)-->
        <package android:name="com.nhnent.payapp" />  <!--페이코(삼성, 농협, KB)-->
        <package android:name="com.lge.lgpay" />  <!--엘지페이(삼성, KB)-->
        <package android:name="com.lottemembers.android" />  <!--LPay-->
        <package android:name="com.tencent.mm" /> <!-- 위챗페이-->
        <package android:name="viva.republica.toss" /> <!-- 토스-->
        <package android:name="com.bankpay.android" />
        <package android:name="com.knb.psb" />
        <package android:name="com.kbankwith.smartbank" />

        <!--계좌이체-->
        <package android:name="com.kftc.bankpay.android" />  <!--금결원-->

        <!--본인인증-->
        <package android:name="com.sktelecom.tauth" />  <!--SKT-->
        <package android:name="com.kt.ktauth" />  <!--KT-->
        <package android:name="com.lguplus.smartotp" />  <!--LGT-->
        <package android:name="uplus.membership" />  <!--LGT-->
    </queries>

 

 

2.WebBrowserClient 설정 내 shouldOverrideUrlLoading

override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean {
     if (!url.startsWith("http://") && !url.startsWith("https://")) {
            if (url.startsWith("intent")) {
                val schemeIntent: Intent
                schemeIntent = try {
                    Intent.parseUri(url, Intent.URI_INTENT_SCHEME)
                } catch (e: URISyntaxException) {
                    e.printStackTrace()
                    return false
                }
                try {
                    activity.startActivity(schemeIntent)
                    return true
                } catch (e: ActivityNotFoundException) {
                    val pkgName = schemeIntent.getPackage()
                    if (pkgName != null) {
                        activity.startActivity(
                            Intent(
                                Intent.ACTION_VIEW,
                                Uri.parse("market://details?id=$pkgName")
                            )
                        )
                        return true
                    }
                }
            } else {
                return try {
                    activity.startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(url)))
                    true
                } catch (e: java.lang.Exception) {
                    e.printStackTrace()
                    false
                }
            }
        }else{
            view.loadUrl(url)
        }

        return true
   }

 

 

*** Android 11 (API 30) 에서의 유의사항

안드로이드 API 레벨 30에서 특정 카드사/기관으로 결제 시도시, net::ERR_CLEARTEXT_NOT_PERMITTED 오류가 발생하는 경우가 있으니, AndroidManifest.xml 파일에 usesCleartextTraffic 속성true로 설정해주셔야 합니다.

<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
		<application
			...
				android:usesCleartextTraffic="true"
			 ... >
				
		</application>
</manifest>
728x90
반응형