Skip to main contentSkip to footer

    Top Rated & Verified

    Top Clutch App Development Company Black Owned United StatesTop Clutch Java Developers France 2026Top Clutch Service Line Blind Company Black Owned 2026Top Clutch App Development Company Minority Owned 2026Top Clutch Web Developers Black Owned 2026Top Clutch App Development Company Black Owned 2026Top Clutch Flutter Developers France 2026Top Clutch Health & Wellness App Developers France 2026Top Clutch Swift Company France 2026Top Clutch Machine Learning Company France 2026Top Clutch Chatbot Company France 2026Top Clutch Artificial Intelligence Company France 2026Top Clutch App Development Company Minority Owned Los Angeles
    Back to Blog
    Engineering Guide
    September 10, 2026
    29 min read

    Deep Linking Implementation:The 2026 Guide to Universal Links, App Links, and Life After Firebase Dynamic Links

    Firebase Dynamic Links has been dead for over a year, Android's own re-verification window is a week long, and the industry's favorite deferred-linking accuracy number has no methodology behind it. Here's how the pipeline actually works, and where the failure points are.

    Deep linking architecture concept for iOS Universal Links and Android App Links in 2026 — association files, entitlements, and deferred deep linking
    Aug 25, 2025
    Firebase Dynamic Links fully shut down — every page.link/app.goo.gl URL now 404s
    Firebase Dynamic Links Deprecation FAQ, checked Sep 10, 2026
    7 days
    Max propagation time for an Android App Links (assetlinks.json) change on Android 15+
    Android Developers — Verify Android App Links, checked Sep 10, 2026
    Dec 2025
    Google Play Instant Apps discontinued; all Instant APIs stopped functioning
    Android Developers — Google Play Instant, checked Sep 10, 2026
    $28k–$70k
    Single-platform deep linking implementation, 4–9 weeks
    Frenchy Digital scoping bands, 2026

    Key Takeaways

    • Deep linking in 2026 means three distinct mechanisms — custom URL schemes, iOS Universal Links, and Android App Links — plus deferred deep linking for pre-install routing. Universal Links and App Links, verified through apple-app-site-association and assetlinks.json respectively, are the correct default for anything tapped from outside your app; custom schemes should be reserved for narrow cases like OAuth callbacks.
    • Firebase Dynamic Links shut down completely on August 25, 2025, after a deprecation announced in August 2023. Every FDL-built link now 404s with no fallback — any team still routing marketing or notification links through it needs to migrate to native Universal Links/App Links or a dedicated vendor immediately, not eventually.
    • Android 15 introduced periodic background re-verification for App Links, a real improvement — but Google's own documentation states an assetlinks.json change can still take up to seven days to reach all devices. Plan domain or App ID changes around that lag.
    • Deferred deep linking lost its most reliable mechanism when Apple's App Tracking Transparency made IDFA access opt-in; what remains is probabilistic signal matching operating inside Apple's May-2024 Privacy Manifest fingerprinting restrictions — a meaningfully less precise substitute, not an equivalent replacement.
    • iOS 17's Link Tracking Protection strips known tracking parameters from links in Safari, Messages and Mail by default in Private Browsing (and optionally elsewhere), silently removing attribution parameters your vendor may depend on while leaving your app's actual deep-link destination intact.
    • Deep link parameters are user-controllable input, not an authorization signal. OWASP's MASVS explicitly covers this class of risk, and the real-world failure pattern is an OAuth or magic-link callback landing in the wrong app because a custom scheme collision or a silently failed App Links verification let another app claim the redirect.
    • No independently audited deferred-deep-link match-rate benchmark exists across vendors and traffic conditions — we refuse to repeat any single percentage as fact. Frenchy Digital cost bands: discovery $9k–$22k; single-platform build $28k–$70k; cross-platform unified routing $70k–$180k; enterprise/regulated build $180k–$420k+.

    What 'Deep Linking' Actually Means

    Deep linking is the mechanism that lets a link — in a text message, an email, a push notification, a QR code, a social post — open your app directly to a specific piece of content, instead of dropping the user on a generic home screen or, worse, a browser tab. Most teams say "we need deep linking" as if it's one feature; it's actually four related but distinct mechanisms, and conflating them is where a lot of production bugs start.

    MechanismWhat It Looks LikeHow It's VerifiedStrengthWeakness
    Custom URL schememyapp://path?param=valueNone built-in — first-come, first-registered at the OS levelNo server dependency, works offlineAny app can register the same scheme; not a safe target for auth callbacks without added checks
    iOS Universal Linkhttps://yourapp.com/path (standard HTTPS URL)Signed apple-app-site-association file + Associated Domains entitlement, matched on Team ID + Bundle IDFalls back gracefully to your website if the app isn't installed; cryptographically tied to your verified domainVerification is cached client-side; a hosting misconfiguration (redirect, wrong content type) can silently break it
    Android App Linkhttps://yourapp.com/path (standard HTTPS URL)assetlinks.json (Digital Asset Links) + autoVerify="true" intent filterSame graceful web fallback; verified per-domain via Google's Digital Asset Links protocolVerification failures fall back to a disambiguation dialog on older Android; Android 15+ re-verifies periodically but changes can take up to 7 days to propagate
    Deferred deep linkAny of the above, resolved after a fresh installNo native OS mechanism — requires a vendor SDK or custom server-side matching logicRoutes a brand-new user straight to relevant content instead of a generic home screenPost-ATT, relies on probabilistic matching with real accuracy limits — see the deferred deep linking section below
    The rule that governs the rest of this guide: Universal Links (iOS) and App Links (Android) — both HTTPS-based, both cryptographically verified against a domain you control — should be the default for anything a user might encounter outside your app. Custom URL schemes are a narrower, legacy tool with a real but shrinking set of legitimate uses, covered in their own section below.

    If you're still deciding on a cross-platform framework before any of this becomes relevant, our custom mobile app development guide and cross-platform development guide cover the platform-native versus cross-platform tradeoff more broadly — React Native and Flutter both have workable Universal Links/App Links wrappers, but as with in-app purchases, you'll still end up reading each platform's own documentation for anything past the basic case.

    Custom URL Schemes: The Legacy Path, and Where It's Still Correct

    A custom URL scheme — myapp://profile/42 — is the oldest deep-linking mechanism on both platforms, and it works differently from Universal Links and App Links in one important way: there is no domain-ownership verification step at all. Any app can register any scheme it wants; the OS has no built-in way to guarantee your app is the legitimate handler for myapp://, and if a second app registers the identical scheme, which one actually handles a given link is not fully within your control.

    That weakness is exactly why custom schemes should not be the primary mechanism for anything a user receives from outside your app in 2026 — a marketing link, a shared post, a push notification payload — where Universal Links or App Links give you the same functional result with actual domain-level verification behind it. What custom schemes still do correctly: OAuth and third-party SDK redirect callbacks that some providers still implement this way, certain share-extension and cross-app-communication patterns, and any purely internal, never-externally-distributed link your own app generates and consumes without ever leaving the device.

    The security implications of continuing to use a custom scheme for something more sensitive than internal navigation — specifically an OAuth callback carrying an authorization token — are covered in detail in the security section below; the short version is that a scheme collision there is not a hypothetical bug, it's a documented account-takeover pattern.

    What Firebase Dynamic Links' Shutdown Actually Broke

    Firebase Dynamic Links (FDL) was, for years, the default answer to "how do I make a short link that opens my app if installed and falls back to a store listing if not." Google announced its deprecation in August 2023, moved the Firebase console to read-only for it in May 2024, and shut it down completely on August 25, 2025. There was no extended grace period after that date and no forwarding service — every link built on FDL's infrastructure, including custom domains routed through it, now returns a plain 404.

    This is worth treating as a live audit item, not a closed historical fact: any app whose marketing emails, print QR codes, SMS templates, or push-notification payload builders were configured against an FDL short domain more than a year ago may still be silently generating dead links today, especially in any system nobody has touched since before the shutdown. A quick grep across your codebase and CMS for an old page.link or app.goo.gl domain is a cheap, high-value check.

    The lesson generalizes past this one service: a "free" infrastructure dependency from a major platform vendor is not exempt from being discontinued on that vendor's own schedule, and deep linking specifically has a history of this — Google's separate discontinuation of Play Instant Apps, covered later in this guide, is a second example inside the same eighteen-month window. Native Universal Links and Android App Links don't carry this specific risk in the same way, since they're core platform capabilities rather than a discrete product Google or Apple could sunset independently — but any third-party vendor layered on top of them is still a vendor, with its own continuity risk.

    Deferred Deep Linking After App Tracking Transparency

    Deferred deep linking solves a specific gap Universal Links and App Links don't cover on their own: routing a brand-new user, who didn't have your app installed at the moment they tapped a link, to the specific content that link pointed to once they finish installing — rather than a generic first-launch home screen. Before 2021, this was commonly solved by passing the device's advertising identifier (IDFA) through the click-to-install flow and matching it server-side once the app opened for the first time — a deterministic, reliable match.

    Apple's App Tracking Transparency (ATT) framework made IDFA access opt-in, and the large majority of users decline the prompt — which means deferred deep linking on iOS today mostly runs on probabilistic matching instead: correlating signals like click timestamp proximity, IP address, and device/OS characteristics between the original tap and the subsequent app open, with no single identifier guaranteeing correctness the way IDFA did.

    Apple's Privacy Manifest requirements, enforced since May 2024, explicitly constrain the device signals apps and SDKs may use for this kind of matching, and Apple's broader platform rules generally prohibit combining signals specifically to re-identify a device without consent. "Probabilistic matching is a common industry technique" and "the specific implementation a given vendor uses today is fully compliant with Apple's current restrictions" are different claims — verify a vendor's current signal set and compliance documentation directly rather than assuming the category as a whole has settled this.

    On the number every vendor wants to give you: we searched specifically for an independently audited deferred-deep-link match-rate benchmark and found none. What circulates instead is self-reported vendor marketing content with no disclosed methodology, no stated traffic conditions, and no way to know whether a given percentage reflects a clean single-device-per-household scenario or the much noisier reality of shared Wi-Fi, VPNs, and iCloud Private Relay degrading IP-based signal quality. We refuse to print any of those numbers here as fact — measure your own match rate against your own install funnel instead.

    iOS 17 Link Tracking Protection and the Attribution Squeeze

    Since iOS 17, Safari strips known tracking parameters from links automatically in Private Browsing — and can be enabled for regular browsing — using Apple's own maintained list of tracking-parameter patterns. The same stripping applies to links opened from Messages and Mail regardless of that setting, which matters directly for deep linking because push notifications, SMS campaigns and email are exactly the channels most deep links travel through.

    The mechanism leaves your app's actual destination path intact — a link still opens the right screen — but it can silently remove the click-ID or campaign-tracking parameter your attribution vendor was relying on to tie that specific tap to a specific ad or campaign, before your server or SDK ever receives it. Combined with the IDFA restrictions covered above, this is a second, independent reason deferred-deep-link and attribution matching has shifted toward less parameter-dependent, more probabilistic methods over the past few years — not a preference, a forced adaptation to two separate platform privacy changes landing within a few years of each other.

    On the ad-attribution side specifically, Apple's own SKAdNetwork remains operational at version 4.0 (released October 2022), while AdAttributionKit — Apple's newer, longer-term privacy-preserving successor framework — received significant updates at WWDC 2025 and is the direction Apple is steering new attribution integrations toward, without an announced hard cutover date for SKAdNetwork as of when we checked. If your deep-linking and attribution stack touches paid acquisition at all, that migration path is worth scoping alongside the deep-linking work itself, not as a separate project six months later.

    Deep Link Security: Where OWASP Meets Intent Filters

    Deep link and intent handling maps directly onto categories in OWASP's Mobile Application Security Verification Standard (MASVS) — specifically the controls covering insecure authentication flows and security decisions made on untrusted input. The pattern underneath most real incidents is simple to state and easy to miss in review: a deep link's URL and parameters are input a user (or an attacker) controls, not a trusted internal signal, and code that treats them otherwise is the actual vulnerability.

    • Scheme hijacking: Two apps register the identical custom URL scheme; the OS has no ownership check, so which app actually receives a given link isn't fully guaranteed by your app alone.
    • Unverified Universal Link / App Link fallback: A missing, wildcarded, or redirect-hosted AASA/assetlinks.json file causes verification to fail silently, and the platform falls back to less secure resolution — a disambiguation dialog on Android, or an ordinary (unverified) web link on iOS.
    • OAuth or magic-link callback hijacking: An authorization code or token returns through a deep link that a sibling app can also claim — via a scheme collision or a failed App Links verification — handing that token to the wrong app entirely.
    • Unvalidated deep-link parameters used for authorization: A user ID, discount code, or feature flag embedded in a deep link is trusted directly instead of re-validated server-side, letting a forwarded or forged link grant access it shouldn't.
    The concrete fix pattern, stated plainly: prefer Universal Links and App Links over custom schemes for anything security-sensitive, since domain verification gives the OS an actual ownership check a custom scheme doesn't have. For OAuth and similar callbacks specifically, use the platform's verified-domain mechanism rather than a custom scheme wherever the provider supports it. And treat every deep link's parameters as untrusted input at the point your app processes them — a deep link should tell your app where to navigate, and your server-side logic, not the link itself, should decide what the user is allowed to see once they get there.

    The OAuth case is worth one more layer of detail because it's where deep-link security failures turn into account takeovers rather than annoyances. The standard mitigation, independent of which link mechanism carries the callback, is to generate a random state parameter before starting the authorization flow, store it locally, and reject any callback whose statedoesn't match — that alone defeats a large share of redirect-hijacking attempts, since an attacker's app can receive the callback but won't have the value your app generated. Exchanging an authorization code for a token server-side, rather than trusting a token handed directly in the callback URL, closes the remaining gap: even if a malicious app briefly intercepts the callback, a code alone is not usable without your server's client secret to complete the exchange.

    If your broader mobile security posture hasn't had a structured review recently, our mobile app security guide covers the wider OWASP Mobile Top 10 surface this deep-linking-specific section is one slice of.

    Reference Architecture and the Order to Build It In

    The order matters because each step depends on the one before it, or fails invisibly without it — the same pattern that governs push notification and in-app-purchase infrastructure applies here, with deep linking's specific failure modes swapped in.

    StepWhatFailure Mode If SkippedWhy This Order
    1Domain and entitlement setup — AASA + Associated Domains (iOS); assetlinks.json + autoVerify (Android). Hosting-only; no client code yet.Nothing downstream can verify without this in place firstBoth files must exactly match the App ID / package + SHA-256 fingerprint your client will ship — get this right before writing a single line of routing logic.
    2Client-side link handling — NSUserActivity / scene(_:continue:) on iOS; intent filters + onNewIntent on Android. Parses the incoming URL into a route.The OS opens your app but nothing happens — the classic 'deep link opens a blank screen' bugDepends on step 1 being verified, or the OS never routes the link to your app at all.
    3Route validation and authorization check, server-side or against local session state — never trust the URL's parameters directly.A forged or replayed link parameter is treated as authoritative — the security gap covered later in this guideMust exist before step 4, since granting access to content is downstream of confirming the user is allowed to see it.
    4In-app navigation to the resolved destination — must handle both cold start and already-running app cases.User lands on the home screen instead of the linked content — the single most common deep-linking complaint in app-store reviewsThe step most tutorials treat as the whole feature; in practice it's the last and easiest step once 1–3 are solid.
    5Deferred deep link matching (if needed) via vendor SDK or custom pipeline — requires install-time SDK initialization.A new user who tapped a specific product link lands on a generic home screen after installing — a real conversion-rate cost for anything link-drivenLayered on top of 1–4, not a replacement for them; deferred matching only covers the pre-install gap.
    6Notification and marketing-system integration — every system that generates links (push payloads, email templates, SMS) points at the current routing, not a legacy shortener.A stale system (an old FDL-based template, a hardcoded shortener) quietly sends dead links for months before anyone noticesLast because it depends on the routing logic above already being correct and stable to point at.

    A note on ownership: association-file hosting, domain verification state, and any legacy shortener migration all need a named owner and a recurring check, not a one-time task closed at launch. A deep-linking setup that worked correctly at launch degrades quietly as infrastructure shifts underneath it — a CDN configuration change that breaks the AASA fallback, a marketing tool that reintroduces a dead shortener domain into a new campaign template — and by the time click-through data shows a drop, the underlying cause has often been live for weeks.

    Build vs. Buy: Branch, AppsFlyer, Adjust, and What They Don't Change

    This is not a ranked top list, for the same reason a purchase-infrastructure vendor comparison isn't one: native Universal Links and App Links are mandatory platform layers every vendor below sits on top of, so the useful question is what a given vendor actually replaces for you, not which one scores highest on a benchmark nobody can independently verify.

    Layer / VendorCategoryWhat You're Actually BuyingPublic Security PostureCorporate Status (checked Sep 10, 2026)
    Native Universal Links / App LinksMandatory platform layerThe only OS-level path to link-based app opening; every vendor below sits on top of this, not instead of itApple's / Google's own infrastructure; you manage AASA and assetlinks.json hosting and entitlementsApple/Google platform capability, not a company — not applicable
    BranchDeep linking + attribution platformDeferred deep linking, cross-channel attribution, and link analytics on top of native Universal Links/App LinksPublishes its own security and privacy documentation; verify current certifications directly for a regulated use casePrivate, independent; ~$4B valuation as of its last verified major round (Feb 2022); no evidence found of acquisition as of when we checked
    AppsFlyerMobile measurement partner (MMP) + deep linkingAttribution infrastructure spanning deep linking, SKAdNetwork/AdAttributionKit reporting, and fraud protectionPublishes its own compliance and security documentation; verify current certifications directlyPrivate, independent; raised a $400M debt round in August 2026, per company disclosures
    AdjustMobile measurement partner (MMP) + deep linkingSimilar attribution and deep-linking layer to AppsFlyer, now integrated with AppLovin's broader ad-tech stackOperates under AppLovin's corporate security posture since the acquisition; verify current certifications directlyNot independent — acquired by AppLovin for $1B, deal completed April 2021; operates as a distinct brand within AppLovin
    Methodology.Every corporate-status claim above reflects the named company's own disclosures or a primary press release/legal announcement, checked September 10, 2026, with the source cited. We did not include any vendor-published match-rate, conversion, or attribution-accuracy figure in this comparison — those are addressed, and refused, in the deferred deep linking section above.

    Building this yourself is defensible when your primary need is straightforward content routing — a notification opens the right product page, a shared link opens the right post — without heavy cross-channel ad-attribution requirements. A vendor earns its fee once ad-spend attribution, a maintained and Apple-compliant deferred-matching pipeline, or cross-campaign link analytics become genuinely necessary; none of them changes what Apple's or Google's platform rules allow, or removes your own obligation to validate deep link parameters server-side rather than trusting them at face value.

    What a Broken Deep Link Actually Costs: A Worked Scenario

    The following is an illustrative worked scenario, not a real client engagement or a reported outcome — the arithmetic uses realistic, stated assumptions to make the cost of a silent deep-linking failure concrete.

    Consider a subscription app sending 200,000 push notifications a month that each deep-link to a specific piece of content — a new episode, a personalized recommendation, a renewal offer. Industry-typical push open rates vary widely by app category and audience, so rather than assume a specific rate, assume this app measures its own baseline at 8% opens, or 16,000 taps a month, and that historically 90% of those taps land the user on the correct in-app screen (some fraction always fails due to edge cases like a cold-start race condition).

    ScenarioCorrect-landing rateSuccessful deep-link opens per monthMonthly gap vs. baseline
    Baseline (working AASA + assetlinks.json)90% of 16,000 taps14,400
    After an undetected AASA hosting redirect breaks Universal LinksFalls back to Safari for iOS taps (roughly half the base); Android unaffected≈ 10,800 (assuming a 50/50 iOS/Android split)≈ 3,600 fewer users land in-app
    After the redirect is fixed and reinstall-driven cache clearsReturns to 90% over 1–2 weeks as cached verification refreshes14,400 (recovering)Full recovery is not instant — cached client-side verification and, on Android 15+, the up-to-7-day re-verification window both delay it

    The honest reading of that table is not that a broken deep link is a catastrophe on its own — most of those 3,600 users still open the app, just to the wrong screen, and many will navigate manually. The point is that this class of failure is silent by design: nothing throws an error, no crash report fires, and the only visible signal is a click-through or conversion metric drifting down for reasons that look, from a dashboard, indistinguishable from normal noise. The discipline this scenario is meant to illustrate is testing the actual link on a real device after every hosting or CDN change that touches your domain's root or .well-known path — not just reviewing the configuration file by eye.

    Red Flags in Vendor and Agency Selection

    ClaimReality
    “We'll just use Firebase Dynamic Links, it's free”FDL shut down completely on August 25, 2025 with no successor service from Google. A vendor or developer proposing it in a 2026 scope has not kept current with a shutdown that's over a year old.
    A quoted deferred-deep-link "match rate" with no stated traffic conditionsProbabilistic matching accuracy depends heavily on traffic volume, network conditions and threshold tuning; a single headline percentage with no denominator or methodology describes that vendor's aggregate book of business, not your app.
    No mention of what happens when apple-app-site-association or assetlinks.json verification failsBoth platforms fall back to less secure behavior (a disambiguation dialog, or in some cases a custom-scheme-style resolution) when verification fails silently — a team that hasn't tested and handled that failure mode hasn't actually shipped this feature in production before.
    "Deep links are safe by default because they're just app navigation"Deep link parameters are user-controllable input. Treating a link's query string as an implicit authorization signal — especially for an OAuth or magic-link callback — is a documented account-takeover pattern, not a hypothetical.
    A proposal that never mentions the Android 15 re-verification propagation delayA domain or App ID change can take up to seven days to fully propagate on Android 15+ per Google's own documentation. A launch or migration plan that doesn't account for that lag risks a broken-links window during a high-visibility rollout.

    If you're evaluating proposals for a broader app rebuild that happens to include deep linking as one piece, our mobile app RFP template guide covers how to write scope language specific enough that competing agencies' "deep linking supported" claims are actually comparable, rather than each vendor claiming the feature at very different levels of rigor.

    What This Costs, and Its Limits

    EngagementRangeTimelineTypical Scope
    Discovery + link-architecture audit$9k–$22k2–4 weeksURL scheme inventory, AASA/assetlinks.json review, notification payload audit, legacy FDL link discovery
    Single-platform implementation$28k–$70k4–9 weeksOne platform (iOS Universal Links or Android App Links) built correctly: entitlements, verification testing, graceful fallback
    Cross-platform build with deferred linking$70k–$180k9–16 weeksiOS + Android + web routing, deferred deep linking, attribution vendor integration or custom matching pipeline
    Enterprise / regulated build$180k–$420k+14–24 weeksMulti-domain verification, audit logging, documented security review against OWASP MASVS controls

    One scoping note specific to this domain: the discovery phase for deep-linking work should always include a live-link audit — actually tapping a representative sample of links from your current marketing emails, push templates and any printed QR codes on a real device with the app installed, rather than reviewing configuration files alone. This is the fastest way to surface a dead Firebase Dynamic Links domain, a redirect quietly breaking your AASA fallback, or an assetlinks.json mismatch nobody has noticed because nobody has tested the actual link path recently.

    Limitations: what we could not verify.We were unable to directly retrieve the full rendered body of several of Apple's and Google's own developer documentation pages through our research tooling, since those pages render their content client-side; the technical details in this guide are corroborated across multiple independent sources that had direct access to that documentation (see sources), but a reader implementing against exact current API signatures should confirm directly against developer.apple.com and developer.android.com. We could not find a clear, current statement on whether Meta's own App Links open specification (applinks.org / developers.facebook.com/docs/applinks) is still actively maintained as of 2026, so we have deliberately not made a claim about its status in this guide. And as stated throughout, we deliberately did not print a deferred-deep-link match-rate percentage as fact, because no independently audited figure exists for this category as of the date we checked.

    None of this replaces your own testing against your specific domain, app configuration and traffic mix — deep linking touches hosting, native app entitlements, and (if you use one) a third-party vendor's own infrastructure simultaneously, and a guide like this one can only describe the current state of three platforms' rules as of the date it was checked, not guarantee they haven't shifted by the time you read it.

    Get Your Deep Link Architecture and Attribution Exposure Audited

    Book a free 60-minute discovery call with Frenchy Digital, a senior-led Black-owned Los Angeles agency. We review your link infrastructure and attribution setup across platforms and send a written, fixed-price phased proposal within 5 business days.

    1517 S Bentley Ave Unit 204, Los Angeles CA 90025

    Frequently Asked Questions

    Sources & References

    Chris Machetto - CEO & Founder of Frenchy Digital

    Chris Machetto

    CEO & Founder of Frenchy Digital, a senior-led Black-owned Los Angeles agency building custom mobile apps and the routing and attribution infrastructure behind them.