메인 콘텐츠로 건너뛰기

WKWebView

iOS 사용 시나리오의 경우, WKWebView를 사용하는 것이 권장되는 방법 중 하나입니다.

거래를 생성하고 거래 링크를 얻은 후, 다음과 같은 구현이 권장됩니다:

  • 비대면 카드 검증이 포함된 일반적인 흐름에서, API를 통해 생성된 링크로 WKWebView를 엽니다;
  • 앱에 필요한 대로 이 열기 동작을 커스터마이징할 수 있습니다;
  • URL이 변경되었는지(redirectUrl로) 감지한 다음 WKWebView를 닫습니다.

WKWebView를 여는 것은 매우 간단합니다:

import UIKit
import WebKit
import SafariServices

var webView: WKWebView!

override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
self.view.backgroundColor = .white
}

@IBAction func open(_ sender: Any) {
createWKWebViewFull()
}

func createWKWebViewFull() {
webView = WKWebView(frame: self.view.bounds, configuration: getWKWebViewConfiguration())
webView.navigationDelegate = self
view.addSubview(webView)
self.loadUrl()
}

func loadUrl() {
if let url = URL(string:"<URL_TO_LOAD>") {
webView.load(URLRequest(url: url))
webView.allowsBackForwardNavigationGestures = true
}
}

private func getWKWebViewConfiguration() -> WKWebViewConfiguration {
let config = WKWebViewConfiguration()
config.allowsInlineMediaPlayback = true
config.mediaTypesRequiringUserActionForPlayback = []

return config
}

WKWebView를 언제 닫을지 제어하려면 다음과 같이 할 수 있습니다:

func webView(_ webView: WKWebView, didCommit navigation: WKNavigation!) {
if let currentURL = webView.url {
print("URL changed to: \(currentURL.absoluteString)")
if currentURL.absoluteString == "<URL_TO_OBSERVER>" {
closeWebView()
}
}
}

@objc func closeWebView() {
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
self.webView.removeFromSuperview()
}
}
참고

올바르게 작동하려면 다음과 같은 몇 가지 권한이 필요합니다:

  • 카메라
  • 위치 정보

자세한 내용은 공식 WKWebView 문서를 참고하는 것을 권장합니다.