Aller au contenu principal

iOS

Sur iOS, l'iframe communique avec l'application hôte via le pont webkit. Configurez une WKWebView avec un gestionnaire de message de script nommé bridge et décodez la chaîne JSON que l'iframe envoie.

Intégrer et écouter

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
}

// Receive message from 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)
}
}

Le Coordinator écoute les événements de l'iframe via le gestionnaire de message bridge. Quand l'iframe envoie un événement, userContentController(_:didReceive:) se déclenche avec la chaîne JSON dans message.body ; décodez-la pour dépêcher sur event.message.

Voir la section Rappels pour le catalogue complet.

Étapes suivantes

  • Comprendre chaque type de rappel ? Voir la section Rappels.
  • Prêt à récupérer le rapport ? Voir la page Sortie → Point de terminaison API.
  • Vouloir afficher les résultats ? Voir la page Sortie → Interface utilisateur.