모바일 웹뷰연동하기관련
안녕하세요
현재 xpay -> 토스페이모듈 교체작업중
https://docs.tosspayments.com/guides/webview
앱에서 앱카드 실행시 위의 가이드에 따르면
안드로이드 개발중
shouldOverrideUrlLoading <-- 해당 오버라이딩에 콜백이 온다라고 하는데 실행이안되서
앱개발자로그를 확인해보니 pageStart 쪽으로 콜백이 온다고합니다 혹시 확인이가능할까요 현재 개발기로 테스트중입니다.
웹뷰(WebView) 연동하기 | 토스페이먼츠 개발자센터
브라우저가 아닌 모바일 웹뷰로 결제창을 띄울 때 카드사별 결제수단을 인증하려면 외부 앱(3rd-party 앱)을 연동해야 합니다. 연동에 필요한 외부 앱 스킴(App URL Scheme)목록과 추가 로직을 살펴보세요.
31 Replies
⏳ 잠시만 기다려주세요! 곧 답변드리겠습니다
오류 문의일 경우 아래 정보를 미리 전달해주시면, 빠른 답변에 도움이 됩니다.
- 주문번호(orderId) :
- 문의 내용 :
(img를 함께 첨부해주시면 도움이됩니다)
* 계약관련 내용은 1544-7772로 문의주세요.
* 주말/공휴일에는 답변이 늦을 수 있어요.
xpay에서 js sdk쪽으로 변동 중이란 말씀이신가요?
그리고 웹뷰위에 웹서버 띄워서 앱 구성중인가요?
xpay 모듈을 걷어내고 rest 방식으로 개발중이고 웹뷰위에서 결제진행중입니다
결제창모듈 이용중입니다
ㅇㅓ떤 단계에서 에러가 발생하나요
tossPayments.requestPayment <-- 사용중입니다
토스페이먼츠까지 정상으로 뜨고 앱카드 실행버튼 클릭시
앱쪽에서 콜백은 정상으로 받으나 의도한 결과는
가이드는 override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean <--
해당 로직에서 받는다 라고되어있는데
콜백값이 pageStart 쪽으로 넘어온다고합니다
pageStart는 어떤 쪽 말씀이실까요
해당앱카드는 설치가 되어있나요?
아 네네 그부분은 제가 앱개발자분께 로그를 받아서
네네 삼성카드
삼성앱카드 설치했습니다
로그를 받아서 이미지로 로그 전송해드리겠습니다
우선 웹뷰에서 외부앱 띄우는 부분에서 문제가 발생하는 것으로 보이는데요
해당 부분은 저희 쪽에서 제공해드리는 모듈이 아니라 정확한 확인이 어렵습니다.
그러면 제가 우선 로그를받아서 말씀드릴게요
콜백받는 부분을 앞서 제가 말씀드린 pageStart 로 변경을하면 정상동작이 되는건 확인했습니다
제가 말씀드린 pageStart <-- 이부분은 정확히 확인해서
재전달 드리도록하겠습니다
앱쪽에서 전달받은 로그 전달드립니다
토스 가이드를 확인 해보면 앱 카드 버튼을 누른 경우
shouldOverrideUrlLoading 함수를 통해 "intent://?xid=4447318#Intent;scheme=mpocket.online.ansimclick;package=kr.co.samsungcard.mpocket;end;" url이 들어와야 합니다.
그런데 실제 동작을 해보면 shouldOverrideUrlLoading 함수가 아닌 onPageStarted 함수를 통해 intent url이 들어오고 있습니다.
그래서 back을 하게 되면 intent 페이지가 남는 현상이 발생 합니다.
위와같이 전달받았습니다
혹시 확인가능할까여?
귀사 앱에서 동작하는 부분이기 때문에 정확한 가이드가 어렵습니다.
지금 실제 앱위에다가 사용하고 계신거죠?
네네
개발자분께 샘플앱에다가 저희 docs샘플코드만 붙여보고, 이후 원인 찾아가는 쪽으로 확인해보셔야 할 것 같아요
저희쪽 모듈이나 저희와 통신하며 문제같은 경우는 원인 확인이 가능하나.
지금 웹뷰 및 callback받는 부분이라 확인이 어렵네요
안녕하세요.
앱의 웹뷰에서 토스페이 삼성 앱카드로 결제 할때 url schem 정보가 webview로 전달 되는데요.
웹뷰의 shouldOverrideUrlLoading 함수로 schem 정보가 들어오는게 맞나요?아니면 onPageStarted 함수로 들어오는게 맞나요?
아 인사 먼저 드렸어야 하는데 저는 앱 개발자 최광수 라고 합니다.
shouldOverrideUrlLoading으로 intent가 들어오고 이걸 스킴으로 바꿔서 앱을 여시는 방식입니다.
저희 문서에 있는 shouldOverrideUrlLoading 코드를 그대로 붙여서 사용해 보셨나요?
넵 그런데 위에 전달 드린 로그를 보면 shouldOverrideUrlLoading 함수로 스킴이 들어오지 않고 onPageStarted함수로 스킴 정보가 들어오고 있습니다.
어떤 언어 쓰시나요?
코틀린 언어 쓰고 있습니다.
(저희 예제 파일에 있는 내용 일부입니다)
기존 코드 주석처리 하고 이거 그대로 써보시겠어요?
네 알겠습니다.
❤️ 기술문의 경험이 어떠셨나요?!
간단히 코멘트 남겨주세요! 제품 발전에 큰 힘이 됩니다.
@TargetApi(Build.VERSION_CODES.N)
override fun shouldOverrideUrlLoading(view: WebView, request: WebResourceRequest): Boolean {
Log.e("cks4451", "shouldOverrideUrlLoading2 url={${view.url}")
view.url?.let {
if (!URLUtil.isNetworkUrl(view.url) && !URLUtil.isJavaScriptUrl(view.url)) {
val uri = try {
Uri.parse(view.url)
} catch (e: Exception) {
return false
}
return when (uri.scheme) {
"intent" -> {
startSchemeIntent(it)
}
else -> {
return try {
startActivity(Intent(Intent.ACTION_VIEW, uri))
true
} catch (e: java.lang.Exception) {
false
}
}
}
} else {
return false
}
} ?: return false
위 로그 보시면 아시겠지만 shouldOverrideUrlLoading으로는 shem 정보가 들어오지 않고 onPageStarted로 sheme 정보가 들어오고 있습니다.
기존것 주석처리 후 전달드린 코드로 테스트 부탁 드렸는데,
shouldOverrideUrlLoading 에서 전달받는 값 명시하는 부분에 view 하고 request 인 것으로 보이는데
shouldOverrideUrlLoading(view: WebView, url: String) 이렇게 수정해서 하셔도 마찬가지라는 말씀이실지 확인 부탁 드립니다.
url 을 view 에서 view.url 로 보고 계시는데
shouldOverrideUrlLoading 에서 url 바로 받아서 url 로 로깅해도 마찬가지 인지를 확인 해주시면 좋을것 같습니다.
shouldOverrideUrlLoading(view: WebView, url: String) 함수는 java에서 deprecated 되어서 처리 안했는데 확인 필요 할까요?필요하시다면 테스트 진행 해드리겠습니다.
API level 24 에서 request 로 대체 되었군요
말씀 하신것처럼 혹시 모르니 url 로 처리 한번 해보시겠어요?
request 부분은 추가 확인 해보겠습니다.
https://developer.android.com/reference/android/webkit/WebResourceRequest
Uri 가 존재 하는 것으로 보이는데요
이것으로 처리하면 어떻게 보이시는지도 확인 부탁 드립니다.
Android Developers
WebResourceRequest | Android Developers