Flutter Webview 에서 카드번호 입력시 URL Scheme 문제. (롯데카드, 현대카드 등등)
안녕하세요.
Flutter에서 웹뷰(inappwebview)를 이용해서 Tosspayments를 이용하고 있습니다.
앱카드 결제는 잘 되는데, 카드번호 입력하는 로직에서 'ERR_UNKNOWN_URL_SCHEME'이 발생하고 있습니다.
요청하는 scheme은 intent로 기존에 보던 url 형태가 아니고, key-value형태로 되어있더군요..
intent://%7B"CD":"12aa26820c48f34a364e3794d4a7f9d8","TK":"zNnPqTwRSzw-AhXaYCo3Hkv9uXjYkHABlas_NNHCWeI=","LK":"-5699883892872597510583035093044399451419562846108160694233940978029750216685830704848442618363860333026351716836840593183951846473577254408396186216071977","DT":"2022-10-28-13:56","TM":"15","CH":"sps.lottecard.co.kr","CU":"https://sps.lottecard.co.kr/ges/initializePmtStt.top?ACSID=bEb9hKnOLfzrSKCaQOUEGBTHmoqzJ1QnmqVW3WukHesY8IMnvH4N!-511010803&type=X%22,%22SA%22:%22https://mpl.ahnlab.com%22,%22CV%22:%220%22%7D/#Intent;package=com.ahnlab.v3mobileplus;scheme=v3mobileplusweb
어떻게 해결하면 좋을까요....
13 Replies
⏳ 잠시만 기다려주세요! 곧 답변드리겠습니다
오류 문의일 경우 아래 정보를 미리 전달해주시면, 빠른 답변에 도움이 됩니다.
- 주문번호(orderId) :
- 문의 내용 :
(img를 함께 첨부해주시면 도움이됩니다)
* 계약관련 내용은 1544-7772로 문의주세요.
* 주말/공휴일에는 답변이 늦을 수 있어요.
앱카드는 잘된다는게 카드사 앱으로 이동은 잘 된다는 말씀이신가요?
해당 인텐트는 안랩 백신을 거쳐서 롯데카드로 진입하는 코드라서 intent 처리를 다르게 해주셔야 할거에요..
flutter에서 intent처리를 어떤 방식으로 진행해주고 계실까요?
flutter에서 처리할 방법이 없어보여서
android channel 로 호출했습니다.
urldecode를 이용해서 처리를하니. 롯데카드쪽 실행은 이제 잘되는거 같습니다.
하지만 다른 카드사의 카드번호 결제는 정상 작동되지만,
삼성카드에서 카드번호 입력시, 백신프로그램이 정상 작동되지 않고 있습니다.
_channel.invokeMethod('intent', {'url': decodedUriString});
val url: String = call.argument("url") ?: return
Log.d("[Intent] package", "url:"+url)
var intent: Intent? = null
try {
intent = Intent.parseUri(url, Intent.URI_INTENT_SCHEME)
} catch (e: URISyntaxException) {
println("error : " + e.printStackTrace())
}
if( Build.VERSION.SDK_INT < Build.VERSION_CODES.R ) {
if( activity.packageManager?.resolveActivity(intent!!, 0) == null ) {
val pkgName = intent?.
package
if( pkgName != null ) {
val uri = Uri.parse("market://search?q=pname:" + pkgName)
intent = Intent(Intent.ACTION_VIEW, uri)
activity.startActivity(intent)
}
} else {
val uri = Uri.parse(intent?.dataString)
intent = Intent(Intent.ACTION_VIEW, uri)
activity.startActivity(intent)
}
} else {
try {
activity.startActivity(intent)
} catch (e: ActivityNotFoundException) {
val pkgName = intent?.package
if( pkgName != null ) {
val uri = Uri.parse("market://search?q=pname:" + pkgName)
intent = Intent(Intent.ACTION_VIEW, uri)
activity.startActivity(intent)
}
}
}
안드로이드에서는 이런식으로 호출했어요.
URI_INTENT_SCHEME으로 인텐트를 만들고, 실행하거나, 실행이 안되면 마켓을 띄우게 해놨어요.
롯데카드는 이제 정상작동되는데, 삼성카드의 카드번호로 결제에서 문제가 있습니다.
V-Guard 백신이 켜지긴 하지만.. 바로 꺼지면서 이런 메세지가 출력됩니다.
"라이선스 키를 찾을 수 없어, V-Guard인스턴스 생성에 실패하였습니다. 앱을 종료합니다."
intent://cardname=samsung&inc=fe15ea9eb1120f68fb5d4b616086858e705fc8c8f5aceffeee18eeb776c26d2965d05aaff68c62d347cf0062b2daecbb18534fb738abf142d140600f5b0515d4b211871268e125c2ba4427d1cf60358d&acctid=220221029220315477806844808965#Intent;scheme=vguardstart;package=kr.co.shiftworks.vguardweb;end;
혹시 삼성카드 호출시에 보내주신 intent가 어떻게 변경되어 호출되는지 확인 가능하실까요?
그리고
else {
val uri = Uri.parse(intent?.dataString)
intent = Intent(Intent.ACTION_VIEW, uri)
activity.startActivity(intent)
}
이코드를 통해 처리 되는지 아니면,
else {
try {
activity.startActivity(intent)
}
이코드를 통해 처리 되는지도 확인부탁드립니다.
flutter일 경울 Uri.parse 방식의 문제로 확인 됩니다. (대문자가 소문자로 자동변환됨)
[인텐트 원본] intent://cardName=SAMSUNG ....
[Uri.parse 이후] vguardstart://cardname=samsung&inc...
같은 문제인지 로그를 한번 확인 해주시고요! 이부부분을 확인해서 진행해주시면 될 것 같습니다
(더불어 현대 카드 일반결제는 정상적으로 되시나요..?)
네 현대카드는 정상적으로 진행됩니다.
안녕하세요 혹시 대형마트 앱 개발 중이실까요?
네 쇼핑몰 관련 개발중입니다.
다른 루트로도 동일한 문의가 들어오고 있어서 확인차 여쭤봤습니다.
위에 남겨주신 내용을 보면 flutter methodchannel기능 이용해서 안드로이드 네이티브 단에서 웹뷰화면을 관리하시는 것같은데요
methodchannel로 url을 보낼 때 flutter에서 uri.parse를 해서 보내시나요?
❤️ 기술문의 경험이 어떠셨나요?!
간단히 코멘트 남겨주세요! 제품 발전에 큰 힘이 됩니다.