Skip to main content

API Reference

Detour

Singleton entry point:

Detour.shared

Methods

func mountAnalytics(config: DetourConfig)
func unmountAnalytics()
func resetSession(allowDeferredRetry: Bool = false)

func processLink(_ url: URL) -> DetourResult
func processLink(_ url: URL, config: DetourConfig?) async -> DetourResult
func processLink(_ rawLink: String, config: DetourConfig? = nil) async -> DetourResult

func resolveInitialLink(
config: DetourConfig,
launchOptions: [UIApplication.LaunchOptionsKey: Any]?,
completion: @escaping @Sendable (DetourResult) -> Void
)

func resolveInitialLink(
config: DetourConfig,
connectionOptions: UIScene.ConnectionOptions,
completion: @escaping @Sendable (DetourResult) -> Void
)

Behavior notes

  • resolveInitialLink is single-session guarded (processed once per app session).
  • resolveInitialLink mounts analytics automatically.
  • resetSession(allowDeferredRetry: true) resets session and first-entrance flag (useful for local testing).

DetourConfig

public struct DetourConfig: Sendable {
public let apiKey: String
public let appID: String
public let shouldUseClipboard: Bool
public let linkProcessingMode: LinkProcessingMode
}

LinkProcessingMode

public enum LinkProcessingMode: String, Sendable {
case all
case webOnly = "web-only"
case deferredOnly = "deferred-only"
}

DetourResult

public struct DetourResult: Sendable {
public let processed: Bool
public let link: DetourLink?

public var route: String?
public var linkType: LinkType?
public var pathname: String?
public var params: [String: String]
public var linkURL: URL?
}
public struct DetourLink: Sendable {
public let url: String
public let route: String
public let pathname: String
public let params: [String: String]
public let type: LinkType
}

LinkType

public enum LinkType: String, Codable, Sendable {
case deferred
case verified
case scheme
}

DetourAnalytics

DetourAnalytics.mount(config: DetourConfig)
DetourAnalytics.unmount()
DetourAnalytics.logEvent(_ eventName: DetourEventName, data: [String: Any]? = nil)
DetourAnalytics.logEvent(_ eventName: String, data: [String: Any]? = nil)
DetourAnalytics.logRetention(_ eventName: String)

DetourEventName

CategoryEvent NameRaw value
General.loginlogin
.searchsearch
.shareshare
.signUpsign_up
.tutorialBegintutorial_begin
.tutorialCompletetutorial_complete
.reEngagere_engage
.inviteinvite
.openedFromPushNotificationopened_from_push_notification
Sales.addPaymentInfoadd_payment_info
.addShippingInfoadd_shipping_info
.addToCartadd_to_cart
.removeFromCartremove_from_cart
.refundrefund
.viewItemview_item
.beginCheckoutbegin_checkout
.purchasepurchase
.adImpressionad_impression