Skip to content

iOS WebView integration

Use WKWebView to load https://app.traveln.ai/ with silent login headers. Enable cookies and JavaScript for a seamless experience.

SwiftUI + WKWebView

import SwiftUI
import WebKit

struct TravelnWebView: UIViewRepresentable {
  let email: String
  let phone: String
  let firstName: String
  let lastName: String
  let apiKey: String

  func makeUIView(context: Context) -> WKWebView {
    let config = WKWebViewConfiguration()
    config.preferences.javaScriptEnabled = true
    config.websiteDataStore = .default()

    let webView = WKWebView(frame: .zero, configuration: config)
    webView.navigationDelegate = context.coordinator

    var request = URLRequest(url: URL(string: "https://app.traveln.ai/")!)
    request.setValue("Api-Key \(apiKey)", forHTTPHeaderField: "Authorization")
    request.setValue(email, forHTTPHeaderField: "TRAVELN-EMAIL")
    request.setValue(phone, forHTTPHeaderField: "TRAVELN-PHONE")
    request.setValue(firstName, forHTTPHeaderField: "TRAVELN-FIRST-NAME")
    request.setValue(lastName, forHTTPHeaderField: "TRAVELN-LAST-NAME")
    webView.load(request)

    return webView
  }

  func updateUIView(_ uiView: WKWebView, context: Context) {}

  func makeCoordinator() -> Coordinator { Coordinator() }

  class Coordinator: NSObject, WKNavigationDelegate {
    func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction,
                 decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
      decisionHandler(.allow)
    }
  }
}

Use WKWebsiteDataStore.default() so cookies persist. If your app uses multiple WebViews, share the same data store instance.