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
resolveInitialLinkis single-session guarded (processed once per app session).resolveInitialLinkmounts 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?
}
DetourLink
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
| Category | Event Name | Raw value |
|---|---|---|
| General | .login | login |
.search | search | |
.share | share | |
.signUp | sign_up | |
.tutorialBegin | tutorial_begin | |
.tutorialComplete | tutorial_complete | |
.reEngage | re_engage | |
.invite | invite | |
.openedFromPushNotification | opened_from_push_notification | |
| Sales | .addPaymentInfo | add_payment_info |
.addShippingInfo | add_shipping_info | |
.addToCart | add_to_cart | |
.removeFromCart | remove_from_cart | |
.refund | refund | |
.viewItem | view_item | |
.beginCheckout | begin_checkout | |
.purchase | purchase | |
.adImpression | ad_impression |