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