メインコンテンツへスキップ

WKWebView

iOSの利用シナリオでは、WKWebViewの使用が推奨されるアプローチの1つです。

取引を作成し、取引リンクを取得した後は、以下の実装をお勧めします。

  • 共通のフロー(カード非提示認証を含む)の中で、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ドキュメントを参照することをお勧めします。