47 lines
1.9 KiB
Swift
Executable File
47 lines
1.9 KiB
Swift
Executable File
//
|
|
// CustomeSchemeHandler.swift
|
|
// flutter_inappwebview
|
|
//
|
|
// Created by Lorenzo Pichilli on 25/10/2019.
|
|
//
|
|
|
|
import Flutter
|
|
import Foundation
|
|
import WebKit
|
|
|
|
@available(iOS 11.0, *)
|
|
class CustomeSchemeHandler : NSObject, WKURLSchemeHandler {
|
|
var schemeHandlers: [Int:WKURLSchemeTask] = [:]
|
|
|
|
func webView(_ webView: WKWebView, start urlSchemeTask: WKURLSchemeTask) {
|
|
schemeHandlers[urlSchemeTask.hash] = urlSchemeTask
|
|
let inAppWebView = webView as! InAppWebView
|
|
if let url = urlSchemeTask.request.url, let scheme = url.scheme {
|
|
inAppWebView.onLoadResourceCustomScheme(scheme: scheme, url: url.absoluteString, result: {(result) -> Void in
|
|
if result is FlutterError {
|
|
print((result as! FlutterError).message ?? "")
|
|
}
|
|
else if (result as? NSObject) == FlutterMethodNotImplemented {}
|
|
else {
|
|
let json: [String: Any]
|
|
if let r = result {
|
|
json = r as! [String: Any]
|
|
let urlResponse = URLResponse(url: url, mimeType: (json["content-type"] as! String), expectedContentLength: -1, textEncodingName: (json["content-encoding"] as! String))
|
|
let data = json["data"] as! FlutterStandardTypedData
|
|
if (self.schemeHandlers[urlSchemeTask.hash] != nil) {
|
|
urlSchemeTask.didReceive(urlResponse)
|
|
urlSchemeTask.didReceive(data.data)
|
|
urlSchemeTask.didFinish()
|
|
self.schemeHandlers.removeValue(forKey: urlSchemeTask.hash)
|
|
}
|
|
}
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func webView(_ webView: WKWebView, stop urlSchemeTask: WKURLSchemeTask) {
|
|
schemeHandlers.removeValue(forKey: urlSchemeTask.hash)
|
|
}
|
|
}
|