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 →