Saltar al contenido principal

iOS

En iOS el iframe se comunica con la aplicación anfitriona a través del puente webkit. Configura un WKWebView con un manejador de mensaje de script llamado bridge y decodifica la cadena JSON que publica el iframe.

Incrustar y escuchar

struct WebView: UIViewRepresentable {
@Binding var path: NavigationPath

class Coordinator: NSObject, WKNavigationDelegate, WKScriptMessageHandler {
var webView: WKWebView?
var onMessageReceived: (Any) -> Void

required init(onMessageReceived: @escaping (Any) -> Void) {
self.onMessageReceived = onMessageReceived
super.init()
}

func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
self.webView = webView
}

// Recibir mensaje de WKWebView
func userContentController(
_ userContentController: WKUserContentController,
didReceive message: WKScriptMessage
) {
print(message.body)
self.onMessageReceived(message.body)
}
}

func onMessageReceived(body: Any) -> Void {
DispatchQueue.main.async {
path.append(body as! String)
}
}

func makeCoordinator() -> Coordinator {
return Coordinator(onMessageReceived: onMessageReceived)
}

func makeUIView(context: Context) -> WKWebView {
let coordinator = makeCoordinator()
let userContentController = WKUserContentController()
userContentController.add(coordinator, name: "bridge")

let configuration = WKWebViewConfiguration()
configuration.userContentController = userContentController

let _wkwebview = WKWebView(frame: .zero, configuration: configuration)
_wkwebview.navigationDelegate = coordinator

return _wkwebview
}

func updateUIView(_ webView: WKWebView, context: Context) {
let companyIdentifier = AppConfig.companyIdentifier
let request = URLRequest(url: URL(string: "https://iframe.legit.health/?company=" + companyIdentifier)!)

webView.load(request)
}
}

El Coordinator escucha los eventos del iframe a través del manejador de mensajes bridge. Cuando el iframe publica un evento, userContentController(_:didReceive:) se dispara con la cadena JSON en message.body; decodifícala para distribuir en event.message.

Consulta la sección Callbacks para el catálogo completo.

Pasos siguientes

  • ¿Entender cada tipo de devolución de llamada? Consulta la sección Callbacks.
  • ¿Listo para recuperar el informe? Consulta la página Output: API Endpoint.
  • ¿Quieres mostrar los resultados? Consulta la página Output: User Interface.