iOS 10에서도 WKWebView를 사용하여 자체 점검을 시작하려고 합니다.

입문


초보자들이 가장 좋아하는 곳 중 하나로 꼽히는 웹뷰에 대한 이야기입니다.
iOS10이 WKWebView를 사용하여 자동 검사 요청을 할 때 httpBody가nil인 오류가 있는 것 같습니다.
오류에 대해 iOS10과 iOS11 또는 더 높은 버전에서 검증된 이 문장 은 이해하기 쉽다.
해결 방법은 참고했다이 문장.

전제 조건


XCode 10.2.1
Swift4
DeploymentTarget: iOS10

솔루션


이번은'시작'참고 보도에서 소개한'URLSessionDataTask에서 얻은 데이터를 WKWebView에 전달하는 다음과 같은 방법'으로 대응했다.
우선 URLSession에 요청을 보내는 처리를 추가합니다.
이번에는 데이터를 json 형식으로 보냅니다.
do-catch에서 요청 내용을 URLSessionDataTask에 전달하여 요청을 시작합니다.
ViewController.swift
    @IBOutlet weak var webViewContainer: UIView!
    private let url = "http://xxx.xxx.x.x"

    override func viewDidLoad() {
        super.viewDidLoad()

        let config = URLSessionConfiguration.default
        let session = URLSession(configuration: config, delegate: self, delegateQueue: nil)

        var request = URLRequest(url: URL(string: url)!)
        request.httpMethod = "POST"
        request.addValue("application/json", forHTTPHeaderField: "Content-Type")

        let params: [String: String] = [
            "hoge": "hoge",
            "huga": "huga"
        ]

        do {
            request.httpBody = try JSONSerialization.data(withJSONObject: params, options: .prettyPrinted)
            let task = session.dataTask(with: request as URLRequest)
            task.resume()
        } catch {
            print(error.localizedDescription)
        }
    }
URLSessionDataDelegate에서 URLSession에서 수신한 데이터를 WebView에 전달하는 과정을 실현합니다.UI 업데이트 처리이므로 마스터 스레드에서 수행해야 합니다.DispatchQueue를 사용하여 주 스레드에 WebView를 로드합니다.
ViewController.swift
extension ViewController: URLSessionDataDelegate {

    func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive data: Data) {

        DispatchQueue.main.async(execute: {
            let webView = WKWebView(frame: self.webViewContainer.bounds)
            self.webViewContainer.addSubview(webView)
            webView.load(data, mimeType: "text/html", characterEncodingName: "UTF-8", baseURL: URL(string: self.url)!)
        })
    }
}
웹 측면의 소스입니다.
이번에는 로컬에서 XAMPP 를 사용하여 테스트합니다.
test.php
<?php
    $json = file_get_contents('php://input');
    echo $json;

결과


다음과 같이 매개변수가 표시됩니다.

총결산


iOS13이 발표되었지만 iOS10을 지원할 때 이 방법을 사용할 수 있습니다.다만 저는 iOS 경험이 없어서 이 설치 방법이 정확한지 모르겠습니다. 더 좋은 방법이 있다면 알고 싶습니다.

참고 자료


iOS(swift) Gawa 앱을 만드는 데 힘들었던 사연입니다.
iOS WKWebView의 3가지 걸림돌 및 해결 방법
스위치로 json을 켜서 php로 자동 검사합니다

좋은 웹페이지 즐겨찾기