Barco
Barco2y ago

swiftui

swiftUI 에서 결제 위젯을 붙이려고 합니다. webView.loadHTMLString(service.htmlString, baseURL: URL(string: "https://tosspayments.com")) github에는 위젯이 아니라 결제 웹이 붙는형식으로 보입니다. 개인적으로 struct TossPaymentsWebView: UIViewRepresentable{
private let service: PaymentWidget? let payAmount : Int?
init(payAmount: Int? = nil) { self.payAmount = payAmount service = PaymentWidget(clientKey: SecureKeys.TossTestClientKey.rawValue, customerKey: "cskey") }
func makeUIView(context: Context) -> WKWebView { if let payAmount = payAmount{ if let webView = service?.renderPaymentMethods(amount: PaymentMethodWidget.Amount(value: Double(payAmount))){ return webView }else{ return WKWebView() } }else{ return WKWebView() }
}
func updateUIView(_ uiView: WKWebView, context: Context) {
}
} 이런식으로 결제 위젯까지는 뛰웠는데. requestPayment(info: DefaultWidgetPaymentInfo(orderId: "123", orderName: "test"), on: controller)에서 uiviewcontroller를 올리는데 문제가 생겼습니다. swiftui 에서 결제 위젯을 올리는 방법, 혹은 webView.loadHTMLString(service.htmlString, baseURL: URL(string: "https://tosspayments.com")) 페이지에서 결제 위젯처럼 간편결제리스트가 바로 보이게 할수있나요??
44 Replies
토스페이먼츠 BOT
⏳ 잠시만 기다려주세요! 곧 답변드리겠습니다
오류 문의일 경우 아래 정보를 미리 전달해주시면, 빠른 답변에 도움이 됩니다.
- 주문번호(orderId) : - 문의 내용 :
(img를 함께 첨부해주시면 도움이됩니다)
* 계약관련 내용은 1544-7772로 문의주세요. * 주말/공휴일에는 답변이 늦을 수 있어요.
이실장
이실장2y ago
UIKit 을 써서 실행해주시겠어요? 아 지금 example을 실행하시는게 아니라 sdk를 직접 연동하시는 군요? 위젯에 간편결제 리스트가 안떠서 그런가요? MID알려주시면 확인해드리겠습니다.
Barco
BarcoOP2y ago
MID가 상점아이디가 맞나요?
이실장
이실장2y ago
Barco
BarcoOP2y ago
bikinexbk7 입니다
이실장
이실장2y ago
음 위젯이 위와 같이 보이시지 않나요?
No description
Barco
BarcoOP2y ago
uikit을 사용하면 위젯이 렌더까지만 되고 그 이후에 버튼클릭이벤트를 따가가기가 어렵네요
No description
이실장
이실장2y ago
아 BTN은 원래 직접 만들어주셔야합니다. 이후 BTN에 requestPayments Method이벤트를 실행해주시면 되요
Barco
BarcoOP2y ago
예를들면
이실장
이실장2y ago
결제위젯 iOS SDK | 토스페이먼츠 개발자센터
결제위젯 iOS SDK를 추가하고 메서드를 사용하는 방법을 알아봅니다.
Barco
BarcoOP2y ago
kakaopay버튼을 눌렀을때 어떤이벤트가 발생해서 제가 알아볼수있나요?
이실장
이실장2y ago
고객이 각각 버튼 클릭했을 때 이벤트는 현재 드리지 않고 있습니다. requestPayment를 실행하면 현재 선택된 값으로 위젯이 알아서 이후 작업을 진행해줍니다.
Barco
BarcoOP2y ago
var body: some View { VStack { TossPaymentsWebView(payAmount: payAmount)//웨젯을 부르는 화면..

Button { //func requestPayment(info: DefaultWidgetPaymentInfo, on rootViewController: UIViewController) } label: { Text("요기서 실행") } }
} 이런식으로 swiftui 에서 버튼을 올릴수도있는건가요? 아니면 버튼도 uikit에서 올리는건가요?
이실장
이실장2y ago
버튼을 올린다는게 무슨뜻이죠? 버튼을 생성한다는 말씀이신가요?
Barco
BarcoOP2y ago
네네 생성입니다
이실장
이실장2y ago
버튼은 어디든 직접 생성해주면 됩니다.
Barco
BarcoOP2y ago
네 감사합니다 그러면 /func requestPayment(info: DefaultWidgetPaymentInfo, on rootViewController: UIViewController) 에서 uiviewcontroller는 무엇을 의미하는지요
Kimoon Lee
Kimoon Lee2y ago
여길 참고하세요.
Kimoon Lee
Kimoon Lee2y ago
결제위젯 iOS SDK | 토스페이먼츠 개발자센터
결제위젯 iOS SDK를 추가하고 메서드를 사용하는 방법을 알아봅니다.
유부장
유부장2y ago
uiviewcontroller 클래스가 무엇인지 질문하시는 걸까요? https://developer.apple.com/documentation/uikit/uiviewcontroller
Apple Developer Documentation
UIViewController | Apple Developer Documentation
An object that manages a view hierarchy for your UIKit app.
Barco
BarcoOP2y ago
아뇨...제 궁금증은.. uiviewrepresentable에서 uiviewcontroller를 정의하기가 애매해서 여쭤본겁니다.
이실장
이실장2y ago
네네 어느 부분에서 이슈가 있으신지는 이해했습니다.
Barco
BarcoOP2y ago
^^
이실장
이실장2y ago
이부분은 저희 ios sdk개발자 분과 확인 후 답변드릴게요
Barco
BarcoOP2y ago
네 감사합니다.
이실장
이실장2y ago
우선 iOS에서 swiftUI를 많이 사용하실텐데, 현재까지 해당 질문은 없었어서 구현하시는데는 전혀 문제가 없을 것 같기는해요 방법에 대해서는 확인해서 안내드리겠습니다. 금요일은 전사 단축근무라 답변이 늦어질 수 있습니다. 일반적으론 Representable이용해서 사용하는 것으로 아는데, 혹시 해결되면 공유도 부탁드리고 저희도 확인되는대로 전달드릴게요
Barco
BarcoOP2y ago
그렇군요.... 알겠습니다.
No description
Barco
BarcoOP2y ago
제가 알고있기는 view가 viewcontroller의 계층구조아래인데... rootview를 set하는 코드가 있길래..여쭤보고싶은겁니다.
이실장
이실장2y ago
일단 가장 쉽게 해결할 수 있는 방법은 rootViewController 를 uiviewpresentable 을 잊고 Window 에 있는 최상단의 UIVC를 사용하시면 될 것 같습니다. swiftUI쪽은 추후 좀더 쉽게 연동하실 수 있도록 고도화될 예정이에요
Barco
BarcoOP2y ago
rootViewController 를 uiviewpresentable 을 잊고 Window 에 있는 최상단의 UIVC를 사용하시면 될 것 같습니다 이게 무슨말씀인지 잘 모르겠습니다..^^;; var body: some View { VStack { //결제전 위젯 뷰 TossPayView(service: vm.widget, payAmount: payAmount)

//버튼을 클릭하면 결제창으로 넘어감. Button { if let info = vm.PaymentInfo ,let widget = vm.widget{ print("info:(info)") widget.requestPayment(info: info, on:UIViewController()) } } label: { Text("CLICK") } } .onAppear{//PaymentWidget셋팅 vm.payAmount = payAmount vm.initSet() } } //버튼을 클릭하면 결제창으로 넘어감<< 이부분에서 uiviewcontroller를 현재처럼 새 클래스를 만들면 에러없이 빌드는 되지만
Barco
BarcoOP2y ago
이렇게 금방 꺼지네요
Barco
BarcoOP2y ago
제가 필요한게 uiview를 써도 되는데 위젯처럼 toss결제 페이지를 호출했을때 웹 과는 다르게 간편결제 버튼이 먼저나오면 되거든요. 혹시 이거 참조할만한 web이 있나요?
Kimoon Lee
Kimoon Lee2y ago
위젯처럼 toss결제 페이지를 호출했을때 웹 과는 다르게 간편결제 버튼이 먼저나오면 되거든요.
이게 정확히 어떤걸 말씀하시는 걸까요?
이실장
이실장2y ago
@saiebi rootViewController 를 내부적으로 사용하지 않고 있었네요. 이부분은 수정 예정이니 임시로 아무 viewController 나 만들어서 넣어서 사용해도 무방합니다.
Barco
BarcoOP2y ago
이게 간편결제 화면이고요,, 아래첨부가 web호출화면입니다.
No description
No description
Kimoon Lee
Kimoon Lee2y ago
web 호출화면을 카카오페이 계약하신 실제 라이브 키로 띄워보시면 카카오페이 표시 될겁니다. 우측화면에 카카오페이가 표시 되면 되는 건가요?
Barco
BarcoOP2y ago
웹 호출화면은 토스페이, 페이북만 표시되어있어서. 감사합니다 swiftui에서 viewcontroller를 단독사용하기는 제가 알기로는 어려워서 네 간편결제 버튼들이 나열되면되는겁니다 그것때문에 widget을 계속시도하고있는겁니다.
Kimoon Lee
Kimoon Lee2y ago
현재 테스트 환경에서 카카오 페이가 지원되지 않는 상황이라 테스트키를 이용하면 표시가 안되는 것이고 실제 계약을 하셨다면 라이브키 사용하시면 보이게 될겁니다.
Barco
BarcoOP2y ago
No description
Barco
BarcoOP2y ago
네 라이브로 돌리니까 카카오페이까지 표시되네요. 혹시 간편결제가 지금화면에 표시되는게 전부인지 아니면 다른 간편결제(naverpay등..)을 더 추가할 메뉴얼이있는지 알고싶습니다.
Kimoon Lee
Kimoon Lee2y ago
현재 보이시는 것에 삼성페이, 네이버 페이 추가가 가능하고, 이건 1544-7772 로 전화해서 신규 신청해주시면 됩니다.
Barco
BarcoOP2y ago
네 감사합니다 그럼 위젯말고 웹페이지에서 결제로 작업하겠습니다 도움주셔서 고맙습니다.
Kimoon Lee
Kimoon Lee2y ago
네 감사합니다.
토스페이먼츠 BOT
❤️ 기술문의 경험이 어떠셨나요?!
간단히 코멘트 남겨주세요! 제품 발전에 큰 힘이 됩니다.

Did you find this page helpful?