Skip to content
Docs

Mobile

Deep links and unilinks

Branded universal links for iOS and Android, store and web fallbacks, deferred deep links, QR codes and link previews.

A unilink is a short branded link, https://go.yourbrand.com/u/{code}, that opens your app when it is installed, sends the visitor to the store when it is not, and delivers the intended content after install (a deferred deep link). It replaces OneLink and Branch-style links, on your own domain.

A template (/unilink-templates, admin Deep links) defines how links behave. A tracking domain can serve one or more templates, or every domain of the tenant.

PartFields
iOSios_app_id, ios_team_id (10 characters), ios_scheme, ios_universal_links, ios_store_url, ios_fallback (store or web).
Androidandroid_app_id, android_scheme, android_app_links, android_store_url, android_sha256_fingerprints, android_intent (Chrome intent:// with a browser fallback), android_fallback.
Web and desktopweb_url, desktop_behavior (web, qr_page or custom), desktop_url.
Previewsog_title, og_description, og_image_url: shown to link-preview crawlers.
Deferreddeferred_enabled, deferred_ttl_hours (1 to 168, default 24, payload kept by click id), fingerprint_ttl_minutes (5 to 1440, default 120, payload kept by IP and OS fingerprint), default_payload.

A unilink (/unilinks) is one short code on a template, optionally tied to an offer and partner so its clicks are attributed. POST /unilinks/preview shows how a link will behave per platform, GET /unilinks/{id}/qr returns a QR code.

What the edge does

The edge serves, from the branded domain:

PathPurpose
/.well-known/apple-app-site-association and /apple-app-site-associationApple App Site Association for the templates on this host.
/.well-known/assetlinks.jsonAndroid App Links statements.
/u/{code}Resolution.

Resolution rules:

  1. Crawlers (messengers, social previews) receive an Open Graph page and no click is recorded.
  2. A human visitor with an offer and partner on the unilink runs through the normal click flow as link style unilink (rules, caps, fraud, event), then the destination is replaced by the platform route.
  3. iOS goes to the App Store (or the web fallback); Android gets an intent:// URL with a Play Store fallback that carries the install referrer dtk_<click_id>; desktop goes to the web page, a custom URL or a QR page.
  4. Links without an offer still get a click id for deferred deep linking but record no click event.
  5. When deferred linking is on, the payload (deep link value and parameters) is written to Redis under the click id and under an IP and OS fingerprint for iOS and Android.

For Universal Links and App Links to work, the app needs the associated domain (applinks:go.yourbrand.com) on iOS and the verified intent filter on Android; the AASA and assetlinks.json come from Metrixed.

On first launch the SDK asks the install endpoint and, if there is no direct match, POST /sdk/v1/deeplink. Resolution order:

  1. An explicit click id (request body, a deep link URL, or the install referrer).
  2. The click the install was attributed to.
  3. The IP and OS fingerprint (single use). A fingerprint match returns the content but returns the click id only when the app has probabilistic attribution enabled (and never for iOS devices that denied tracking unless the app allows it), so deferred content can never turn a fuzzy match into a deterministic one.

The response is {found, match_type, deep_link_value, deep_link, click_id, params, unilink}. The iOS SDK can also read a unilink from the pasteboard (linkMeEnabled, opt-in), at the cost of the system paste prompt on iOS 16 and later.

Open items to know about

  • iPadOS devices that present a desktop user agent are routed as desktop.
  • GET /sdk/v1/config does not carry Android keys yet; the Android SDK uses its own configuration for the fields it needs.