Native Integration
iOS implementation
The suggested method of implementation is to create a webview with the initialisation code before implementing bridge function(s) between the webview and native code. Sample code can be found below
import UIKit
import SwiftUI
import PlaygroundSupport
import WebKit
class MyViewController : UIViewController, WKUIDelegate, WKScriptMessageHandler {
var webView: WKWebView!
var embed = """
<!DOCTYPE html>
<html>
<body>
<div id="img-arena-event-centre" style="height:400px;width:100%;"></div>
<script src="https://unpkg.com/@img-arena/front-row-seat@0.x/dist/index.umd.js"></script>
<script>
const { MessageTopics } = frontRowSeat.eventCentreUtils;
const eventCentreInstance = frontRowSeat.eventCentre({
operator: "operatorId",
sport: "golf",
targetModule: "full",
eventId: "254",
version: "latest",
targetElementSelector: "#img-arena-event-centre",
language: "en"
});
eventCentreInstance.on(MessageTopics.CONTEXT_UPDATE, function (msg) {
// send message to native controls
window.webkit.messageHandlers.contextUpdate.postMessage(msg);
});
</script>
</body>
</html>
"""
override func loadView() {
let webConfiguration = WKWebViewConfiguration()
webConfiguration.preferences.javaScriptEnabled = true
webConfiguration.userContentController.add(self, name: "contextUpdate")
webView = WKWebView(frame: .zero, configuration: webConfiguration)
webView.uiDelegate = self
let view = webView
self.view = view
}
override func viewDidLoad() {
super.viewDidLoad()
webView.loadHTMLString(embed, baseURL: nil)
}
func userContentController(_ userContentController:
WKUserContentController, didReceive message: WKScriptMessage) {
if (message.name == "contextUpdate") {
// handle update
print(message.body)
}
}
}
PlaygroundPage.current.liveView = MyViewController()
Last updated