跳转到主要内容

WKWebView

对于 iOS 使用场景,使用 WKWebView 是推荐的方式之一。

创建交易并获取交易链接后,建议按以下方式实现:

  • 在您的常规流程(包含无卡验证)中,使用通过 API 生成的链接打开 WKWebView;
  • 您可以根据应用的需要自定义此打开方式;
  • 监控 URL 是否已变化(变为 redirectUrl),然后关闭 WKWebView。

打开 WKWebView 非常简单:

import UIKit
import WebKit
import SafariServices

var webView: WKWebView!

override func viewDidLoad() {
super.viewDidLoad()
// 加载视图后进行任何额外设置。
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 文档