---
title: WKWebView
description: 如何在 iOS 上使用 WKWebView 实现无卡验证捕获体验：打开视图、控制何时关闭以及所需权限。
canonical: https://developer.unico.io/zh-CN/dual-api/developers/regional-solutions/card-not-present-verification/integration/controlling-the-experience/mobile/ios/wkwebview
locale: zh-CN
generated_by: markdown-export
---

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

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

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

打开 WKWebView 非常简单：

```swift
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，可按以下方式操作：

```swift
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()
    }
}
```

:::note
需要一些权限才能正常运行，例如：
- 摄像头
- 地理位置
:::

如需了解更多信息，我们建议阅读官方 [WKWebView 文档](https://developer.apple.com/documentation/webkit/wkwebview)。