JAYBB
JAYBB3mo ago

iOS 웹앱에서 결제 위젯 카드사 선택시 미동작 문의입니다.

현재 리액트 웹을 아이폰에서 웹뷰로 패키징해서 서비스 개발중입니다. 결제 위젯에서 카드사를 선택 후 각 카드사별 결제를 시도할 때 더 이상 진행이 되지 않습니다. 에뮬레이터 화면은 에러 발생화면 첨부를 위한 예시이고 실제 아이폰 기기에서도 작동을 하지 않습니다. 에러 화면은 두 번째 화면 진입시 발생하는 로그입니다. 안드로이드 기기나 크롬, 사파리 등에서는 정상적으로 작동하는데 어느 부분에서 발생하는 문제인지 알 수 있을까요
No description
No description
No description
16 Replies
토스페이먼츠 BOT
⏳ 잠시만 기다려주세요! 곧 답변드리겠습니다
오류 문의일 경우 아래 정보를 미리 전달해주시면, 빠른 답변에 도움이 됩니다.
- 주문번호(orderId) : - 문의 내용 :
(img를 함께 첨부해주시면 도움이됩니다)
* 계약관련 내용은 1544-7772로 문의주세요. * 주말/공휴일에는 답변이 늦을 수 있어요.
Kimoon Lee
Kimoon Lee3mo ago
웹뷰(WebView) 연동하기 | 토스페이먼츠 개발자센터
모바일 웹뷰 결제는 앱투앱(App to App) 이동이 필요한데요. 결제기관의 앱스킴 목록과 OS별 이동 방법을 알아보세요.
Kimoon Lee
Kimoon Lee3mo ago
두번째 화면에서 버튼을 클릭해도 동작을 안하시는 걸까요? 웹뷰 가이드 참고부탁드립니다.
JAYBB
JAYBBOP3mo ago
@냥과장 현재 info.plist에는 아래와 같이 추가되어있고
<key>LSApplicationQueriesSchemes</key>
<array>
<string>supertoss</string>
<string>kb-acp</string>
<string>liivbank</string>
<string>newliiv</string>
<string>kbbank</string>
<string>nhappcardansimclick</string>
<string>nhallonepayansimclick</string>
<string>nonghyupcardansimclick</string>
<string>lottesmartpay</string>
<string>lotteappcard</string>
<string>mpocket.online.ansimclick</string>
<string>ansimclickscard</string>
<string>tswansimclick</string>
<string>ansimclickipcollect</string>
<string>vguardstart</string>
<string>samsungpay</string>
<string>scardcertiapp</string>
<string>shinhan-sr-ansimclick</string>
<string>smshinhanansimclick</string>
<string>com.wooricard.wcard</string>
<string>newsmartpib</string>
<string>citispay</string>
<string>citicardappkr</string>
<string>citimobileapp</string>
<string>cloudpay</string>
<string>hanawalletmembers</string>
<string>hdcardappcardansimclick</string>
<string>smhyundaiansimclick</string>
<string>shinsegaeeasypayment</string>
<string>payco</string>
<string>lpayapp</string>
<string>ispmobile</string>
<string>tauthlink</string>
<string>ktauthexternalcall</string>
<string>upluscorporation</string>
<string>kftc-bankpay</string>
<string>kakaotalk</string>
<string>wooripay</string>
<string>lmslpay</string>
<string>naversearchthirdlogin</string>
<string>hanaskcardmobileportal</string>
<string>kb-bankpay</string>
<string>kakaobank</string>
</array>
<key>LSApplicationQueriesSchemes</key>
<array>
<string>supertoss</string>
<string>kb-acp</string>
<string>liivbank</string>
<string>newliiv</string>
<string>kbbank</string>
<string>nhappcardansimclick</string>
<string>nhallonepayansimclick</string>
<string>nonghyupcardansimclick</string>
<string>lottesmartpay</string>
<string>lotteappcard</string>
<string>mpocket.online.ansimclick</string>
<string>ansimclickscard</string>
<string>tswansimclick</string>
<string>ansimclickipcollect</string>
<string>vguardstart</string>
<string>samsungpay</string>
<string>scardcertiapp</string>
<string>shinhan-sr-ansimclick</string>
<string>smshinhanansimclick</string>
<string>com.wooricard.wcard</string>
<string>newsmartpib</string>
<string>citispay</string>
<string>citicardappkr</string>
<string>citimobileapp</string>
<string>cloudpay</string>
<string>hanawalletmembers</string>
<string>hdcardappcardansimclick</string>
<string>smhyundaiansimclick</string>
<string>shinsegaeeasypayment</string>
<string>payco</string>
<string>lpayapp</string>
<string>ispmobile</string>
<string>tauthlink</string>
<string>ktauthexternalcall</string>
<string>upluscorporation</string>
<string>kftc-bankpay</string>
<string>kakaotalk</string>
<string>wooripay</string>
<string>lmslpay</string>
<string>naversearchthirdlogin</string>
<string>hanaskcardmobileportal</string>
<string>kb-bankpay</string>
<string>kakaobank</string>
</array>
이실장
이실장3mo ago
카드사 앱으로 이동이 안되는거죠?>? 국민카드만 그러나요? 아니면 다 그러나요>?
JAYBB
JAYBBOP3mo ago
WKNavigationDelegate는 이렇게 작성되어 있습니다.
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {

guard let url = navigationAction.request.url,
let scheme = url.scheme else {
decisionHandler(.cancel)
return
}

print("url is \(url)")
print("scheme is \(scheme.lowercased())")

if(scheme.lowercased() != "http" && scheme.lowercased() != "https") {
if UIApplication.shared.canOpenURL(url){
UIApplication.shared.open(url, options: [:], completionHandler: nil)

decisionHandler(.cancel)
return
}
} else {
decisionHandler(.allow)
}
}
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {

guard let url = navigationAction.request.url,
let scheme = url.scheme else {
decisionHandler(.cancel)
return
}

print("url is \(url)")
print("scheme is \(scheme.lowercased())")

if(scheme.lowercased() != "http" && scheme.lowercased() != "https") {
if UIApplication.shared.canOpenURL(url){
UIApplication.shared.open(url, options: [:], completionHandler: nil)

decisionHandler(.cancel)
return
}
} else {
decisionHandler(.allow)
}
}
@이실장 네 카드사 앱으로 이동할 때 무반응이고 토스뱅크는 정상적으로 이동합니다.
이실장
이실장3mo ago
모든 카드사가 그러신거고 지금 코드로 봤을 땐 ios쪽 코드군요? 웹뷰 열때 canOpenUrl () 쓰시나요?
JAYBB
JAYBBOP3mo ago
canOpenUrl은 위 코드에만 사용하고 있습니다
이실장
이실장3mo ago
if UIApplication.shared.canOpenURL(url){ 감싼거 빼고 그냥 오픈한번 해보시겠어요
JAYBB
JAYBBOP3mo ago
canOpenURL없이 가이드 문서 그대로 변경해보았는데 동일합니다.
func webView(
_ webView: WKWebView,
decidePolicyFor navigationAction: WKNavigationAction,
decisionHandler: @escaping (WKNavigationActionPolicy) -> Void
) {
if let url = navigationAction.request.url,
url.scheme != "http" && url.scheme != "https" {
UIApplication.shared.open(url, options: [:], completionHandler:{ (success) in
if !(success){
/*앱이 설치되어 있지 않을 때*/
}
})
decisionHandler(.cancel)
} else {
decisionHandler(.allow)
}
}
func webView(
_ webView: WKWebView,
decidePolicyFor navigationAction: WKNavigationAction,
decisionHandler: @escaping (WKNavigationActionPolicy) -> Void
) {
if let url = navigationAction.request.url,
url.scheme != "http" && url.scheme != "https" {
UIApplication.shared.open(url, options: [:], completionHandler:{ (success) in
if !(success){
/*앱이 설치되어 있지 않을 때*/
}
})
decisionHandler(.cancel)
} else {
decisionHandler(.allow)
}
}
실행하려고 하는 카드사 앱은 설치되어있는 상태입니다
이실장
이실장3mo ago
국민카드외에도 동일한가요? 가이드대로도 안되면 에러메세지로 디버깅해보셔야할 것 같아요 상황은 외부 앱을 못여는 상황이어서요
JAYBB
JAYBBOP3mo ago
@이실장 https://drive.google.com/file/d/13LQhrr8zfxqKPlILmDEaKZrwz3VgiQYJ/view 이 ios 웹뷰 샘플 프로젝트로 실행해보니 로그에는 아래 에러가 발생합니다.
2025-03-04 14:30:27.373619+0900 TossPaymentsSample[10564:4820594] [default] Failed to open URL kb-acp://pay?srCode=0217073&tcodeSeq=1238966328: Error Domain=NSOSStatusErrorDomain Code=-10814 "(null)" UserInfo={_LSLine=244, _LSFunction=-[_LSDOpenClient openURL:fileHandle:options:completionHandler:]}
2025-03-04 14:30:27.373619+0900 TossPaymentsSample[10564:4820594] [default] Failed to open URL kb-acp://pay?srCode=0217073&tcodeSeq=1238966328: Error Domain=NSOSStatusErrorDomain Code=-10814 "(null)" UserInfo={_LSLine=244, _LSFunction=-[_LSDOpenClient openURL:fileHandle:options:completionHandler:]}
유부장
유부장3mo ago
KBPay 앱은 설치되어 있는 상태 인가요?
Kimoon Lee
Kimoon Lee3mo ago
이 ios 웹뷰 샘플 프로젝트로 실행 을 실 기기에서 하신거 맞죠?>
JAYBB
JAYBBOP3mo ago
아 kbPay가 아니라 kb스타뱅킹 앱을깔아서 못찾은 것 같습니다. 해당 샘플 참고해서 오류 한번 찾아보도록 하겠습니다
토스페이먼츠 BOT
❤️ 기술문의 경험이 어떠셨나요?!
간단히 코멘트 남겨주세요! 제품 발전에 큰 힘이 됩니다.

Did you find this page helpful?