Skip to main content

Module 7 — Deferred deep links

A deferred deep link is one tapped before the app was installed: the user clicks a Paylisher link, lands on the App Store, installs, and on first launch the SDK recovers the original destination via install attribution.


Enable and check

Enable it on the config and check once after setup():

config.deferredDeepLinkConfig = PaylisherDeferredDeepLinkConfig()
.withEnabled(true)
.withAttributionWindow(24 * 60 * 60 * 1000) // 24h (industry standard), in ms
.withIDFA(true) // best match accuracy (requires ATT consent)

PaylisherSDK.shared.setup(config)

PaylisherSDK.shared.checkDeferredDeepLink(
onSuccess: { deepLink in DeepLinkRouter.shared.navigate(deepLink) }, // match → route it
onNoMatch: { /* organic install — nothing to do */ },
onError: { error in print("Deferred check failed: \(error)") }
)

A matched deferred link is a normal PaylisherDeepLink — pass it to the same router you use for direct links.


Configuration — PaylisherDeferredDeepLinkConfig

Build it with the fluent with… methods, or use a factory preset.

MethodDefaultDescription
.withEnabled(_:)falseTurns deferred checking on.
.withAttributionWindow(_:)86_400_000 (24h)Click→install window in milliseconds.
.withIDFA(_:)trueInclude IDFA in the match fingerprint (needs ATT consent).
.withAutoHandle(_:)trueAuto-route the matched link (otherwise only your onSuccess fires).
.withDebugLogging(_:)falseVerbose deferred logs.
.withAPIHost(_:)Paylisher defaultOverride the deferred endpoint (only if you're told to).

Presets: PaylisherDeferredDeepLinkConfig.forProduction() (24h, IDFA, no debug) · .forTesting() (short window, debug on).


How matching works

  1. On first launch, the SDK builds a privacy-preserving device fingerprint and asks the Paylisher-hosted attribution backend whether a recent click matches.
  2. On a match within the attribution window, the original destination is returned and routed.
  3. The match is meaningful once, on the first launch after install — later launches are organic.

The deferred backend is hosted and managed by Paylisher — you don't configure an endpoint. Enabling IDFA (with App Tracking Transparency consent) improves match accuracy.

On iOS 13 deferred works too. ATT (the tracking prompt) is iOS 14.5+, so the SDK simply skips it on iOS 13 — it reads the advertising id directly when available, otherwise falls back to a non-IDFA fingerprint (IDFV, device model, locale, …). Nothing crashes and no prompt appears; you only need NSUserTrackingUsageDescription in Info.plist for the prompt 14.5+ devices show.

Next: Module 8 — Attribution & source