Deep Links and Deferred Deep Links for Mobile Games in 2026: How They Work on Android and iOS, What Replaced Firebase Dynamic Links, Where Games Use Them, and a QA Checklist

Deep links and deferred deep links for mobile games in 2026: Android Install Referrer vs iOS limits, life after Firebase Dynamic Links, use cases, and a QA matrix.
Nov 13, 2026
Deep Links and Deferred Deep Links for Mobile Games in 2026: How They Work on Android and iOS, What Replaced Firebase Dynamic Links, Where Games Use Them, and a QA Checklist

Someone taps the link in a creator's video description, installs your game, and opens it for the first time. Do they land on the limited-edition skin the video promised, or on the same first tutorial screen as every other new player? Deep links and deferred deep links decide that. A deep link sends someone who already has the app to a specific screen inside it. A deferred deep link takes someone who doesn't have the app yet through the store and the install, then carries them to that screen on first launch.

There are three reasons to revisit this in 2026. First, Firebase Dynamic Links, which many studios used for free, shut down on August 25, 2025, and old links now return HTTP 404. Second, the replacement Google recommends, App Links and Universal Links, only handles apps that are already installed, so deferred deep linking has to be solved separately. Third, on iOS, pasteboard access notices and Apple's ban on fingerprinting leave far fewer ways than on Android to connect a pre-install click with the first post-install launch. Based on Android Developers, Apple Developer, and Firebase documentation as of November 2026, this article covers how each OS works, where games use links, and the test matrix to run before launch.

Deep linking often gets mixed up with attribution, which counts who gets credit for an install. The two share the same link but solve different problems. We covered the attribution side in Why Every Dashboard Shows a Different Install Count: A Game Marketer's Guide to Mobile Attribution in 2026. This article covers routing: where the person who clicked actually ends up.

A deep link is any link that points to a specific screen inside an app. App Links (Android) and Universal Links (iOS) verify that you own a website so that an ordinary https address opens the app directly. A deferred deep link carries the same destination to someone who doesn't have the app yet, so it still applies on their first launch after install.

Type

Format

App installed

App not installed

Notes (per official docs)

Custom URL scheme

mygame://event/halloween

Opens the app

Nothing happens, or an error

Apple "strongly recommends" Universal Links instead. If several apps register the same scheme, which one opens is undefined

Android deep link (generic intent)

Scheme or web address

Opens the app, but a disambiguation dialog may appear

Browser, or nothing

Available on all Android versions

Android App Links

https://game.example.com/event

Opens the app without the dialog once verified

Web page opens

Android 6 and later, on devices with Google services. Domain verified through assetlinks.json

Universal Links (iOS)

https://game.example.com/event

Opens the app

Web page opens in the default browser

Two-way association through the apple-app-site-association (AASA) file and the Associated Domains entitlement

Deferred deep link

One of the above plus click data stored

Behaves like a normal deep link

Store, install, then destination restored on first launch

Not a built-in OS feature. Android uses the Play Install Referrer; iOS relies on limited methods

As the table shows, App Links and Universal Links only open a web page for someone without the app. Sending them to the store and restoring the original destination after install is not something the OS does for you. Link services like Firebase Dynamic Links used to fill that gap. Today an MMP (mobile measurement partner), a dedicated deep linking vendor, or an in-house build does that job.

From a game design point of view, one more distinction matters. A link carries a destination ("which screen") and parameters ("in what context"). If someone arriving with creator A's code and someone arriving from a lapsed-player push should get different rewards on the same event screen, parameter design matters as much as destination design. Apple warns that both Universal Links and custom schemes are a potential attack vector, and says to validate every URL parameter and never let a link alone delete data or access sensitive information. That is also why a reward should never be confirmed by a link parameter alone. The safe pattern is for the server to verify the code and its usage history before granting a reward, and for the link to decide only which screen opens.

How Does Deferred Deep Linking Work on Android?

On Android, deferred deep linking normally works through the referrer value Google Play stores at install time. The app reads it on first launch through the Play Install Referrer API, and the value stays available for 90 days after install.

Here is how it works. When an ad or link page sends a user to the Google Play store URL, it carries campaign or destination data in the referrer parameter. When the user installs and opens the app for the first time, the app connects to the Play Store app through the Play Install Referrer library and gets the referrer URL, the referrer click timestamp, the install begin timestamp, the app version at first install, and more. Android documentation describes the API as a way to "securely" retrieve referral content from Google Play, and says devices with Play Store app version 8.3.73 or later have it automatically. The referrer information is available for 90 days and won't change unless the app is reinstalled, so Google recommends calling the API only once, on the first run after install.

Item

Per Android documentation

What it means for game ops

Data source

Google Play Store app (Play Install Referrer API)

A value passed directly by the store, not a probabilistic guess

What you get

Referrer URL, click time, install begin time, version at first install, instant experience flag

Put the destination and campaign code in the referrer URL and use it for first-launch routing

Availability

90 days, unchanged until reinstall

Read once on first launch and store it on your server

Prerequisites

Install through Google Play, a Play Console account

Not available for other Android stores or direct APK installs

For installed users, App Links got stricter with Android 12. Starting in Android 12 (API level 31), a generic web intent opens your app only if your app is approved for that domain. Otherwise it opens in the user's default browser. You get approval either by verifying the domain with App Links or by having the user associate the app with the domain in system settings. The verification file, assetlinks.json, must sit at https://domain/.well-known/assetlinks.json, be served as application/json over HTTPS with no 301 or 302 redirects, and be published on every domain your links use.

The most common failure point for studios is the signing certificate fingerprint. Google's documentation warns that if you use Play App Signing, the fingerprint you generate locally with keytool usually won't match the one on users' devices, and points you to the app signing page in Play Console for the correct Digital Asset Links JSON snippet. If links open fine in development builds but fall back to the browser only in the store build, this is the first thing to check.

Two more changes are worth knowing in 2026. Dynamic App Links, introduced with Android 15, let you define path, query, and fragment rules on the server side inside assetlinks.json, and use exclude so certain URLs open in the browser instead of the app. Server rules can't widen the scope declared in the app manifest, so Google recommends declaring broad scope in the manifest (scheme and domain) and refining paths with server rules. Propagation speed differs, though. Devices on Android 15 and later re-verify periodically in the background, and changes can take up to seven days to reach all devices. Android 14 and lower don't re-verify periodically and usually pick up changes only when the app is installed or updated. Editing assetlinks.json the day before an event goes live is risky.

The Deep links page in Play Console (Grow users > Deep links) is also useful. It validates the domains and intent filters declared in each app version's manifest and shows what failed, and it lets you create patches that add web links or turn off specific paths without releasing a new app version. Patches are not kept in future app versions, though, so the change has to go into the manifest in your next release.

One more point on opening the app from a web page. Chrome's intent:// URLs can name a fallback with the S.browser_fallback_url parameter for users without the app. But Chrome won't launch an external app when a JavaScript timer tries to open it without a user gesture, or when the intent is redirected from a URL typed into the address bar. That is one reason a landing page that "automatically hands off to the app" looks stuck in some environments. A design that waits for one user action, such as a button tap, is more reliable.

Why Is Deferred Deep Linking Harder on iOS?

iOS has no official channel equivalent to the Play Install Referrer through which the store hands click data to the app. The methods that filled that gap, device-signal matching and the clipboard, are constrained by Apple policy and by OS notices and permission prompts.

Start with Universal Links for installed users. According to Apple, Universal Links are standard http and https URLs, so one URL works for both the website and the app, and if the app isn't installed, the website opens in the default browser. When someone installs the app, the system checks the AASA file on your web server to verify the association. Since macOS 11 and iOS 14, that request goes to an Apple-managed CDN rather than directly to your server. Apple's CDN requests your domain's AASA file within 24 hours, and devices check for updates roughly once a week after install. Each subdomain needs its own entry and its own AASA file, served over https with a valid certificate and no redirects.

Apple also documents when a Universal Link won't open the app. If a user browsing your site in Safari taps a Universal Link on the same domain, the system keeps it in Safari, respecting the user's likely intent to stay in the browser. A link to a different domain opens the app. That is why an "Open in app" button on an event landing page fails when the landing page and the deep link share a domain. AASA components rules apply in order, the first match wins, and exclude keeps specific paths out of the app.

For deferred deep linking, the options narrow.

Method

How it works

Constraints as of November 2026 (per Apple)

Device-signal matching (fingerprinting)

Compare IP, device model, OS version and similar signals at click time and first launch to infer the same person

Apple prohibits deriving data from a device's, browser's, or network's properties to uniquely identify it. Apps using SDKs that do this, attribution services included, may be rejected. Apple's answer is "No," with no exception for ATT consent

Pasteboard (clipboard)

The landing page copies a destination code to the clipboard; the app reads it on first launch

Since iOS 14, reading another app's pasteboard content without user intent triggers a notice. Since iOS 16, programmatic pasting raises an approval prompt. UIPasteControl (a paste button) works without a prompt

User-entered code

The player types a creator or invite code on the first screen

No policy constraint, but some players drop off at the input step

Server matching after login

Link an account on the web, then sign in with the same account in the app

Narrow coverage, since many players start as guests

Smart App Banner, custom product page deep links

A web banner drives installs; on iOS 18 and later, each custom product page can carry its own deep link

Lets you split first-launch destinations by page, but does not carry per-click parameters

The takeaway is not "there is no 100% accurate method on iOS" but "few methods are both accurate and policy-compliant." Many link vendors advertise iOS match rates, but their measurement methods differ, so the numbers are hard to compare, and we don't cite them here. In practice, it is safer to plan on the assumption that deferred deep links will sometimes fail on iOS. For a creator reward, for example, apply it automatically when the link is restored, and when it isn't, let the player enter the code or use a paste button on the first screen. A paste button is an explicit user action, so it doesn't trigger the iOS 16 approval prompt.

ATT matters here too. In its deep linking FAQ, Apple says that if a third-party service your app uses passes unique identifiers or creates a shared identity of the user between apps from different companies for ad targeting, ad measurement, or sharing with a data broker, you must use ATT. If the same SDK handles link routing and ad measurement, check with your privacy lead what it sends and where. For measuring re-engagement ads, Apple's AdAttributionKit, available from iOS 17.4, supports re-engagement conversions, so you can design links and measurement separately.

Firebase Dynamic Links shut down on August 25, 2025. Google's guidance was to move to another deep linking provider if you need the full feature set, or to App Links and Universal Links if you only need to open installed apps.

According to the Firebase FAQ, after the shutdown, links on custom domains and page.link subdomains return HTTP 404, no new links can be created, and the Short Links and Link Stats APIs return 400 or 403 errors. URL prefix domains were deleted automatically after the shutdown date, and domain and link metadata is purged under Google's data retention policy. On the app side, First Open Attribution calls return a 400 error: an empty object on iOS and a success response with empty data on Android. If an old app version decides routing from that response, it may be silently sending everyone to the default screen without any error.

What you need

Path Firebase gives

What it doesn't replace

Good fit for

Opening installed apps only

App Links + Universal Links (Firebase Hosting can host assetlinks.json and AASA)

Store routing by device, deferred deep linking, click analytics, short links

Live games whose links mostly target existing players: push, email, community posts

Full feature set (store routing, deferred deep links, analytics)

Another deep linking provider. Firebase lists AppsFlyer, Branch, Singular, Kochava, Airbridge, Bitly and others, and notes Google has not vetted them

Matching methods, pricing, and data policies vary by vendor

Games with heavy new-user inflow from UA, creator, and invite links

In-house build

(Not an official path) Android Install Referrer + your own link server + code entry or paste on iOS

iOS deferred accuracy, link management tooling

Studios with a high Android share and engineering capacity

No replacement needed

Export link metadata, delete URL prefixes, remove the SDK

Not applicable

Apps that never really used deep links

Firebase's migration guide to App Links and Universal Links states in a table that this path does not send users to the right store for their device, does not continue the user's journey after download, install, and first open, does not provide link click analytics, and does not create short links. It mentions iOS Smart App Banners as a partial alternative for store routing and deferred linking. In other words, "we moved to App Links and Universal Links" means links for existing players are solved, not deferred deep linking for new players.

Checking whether the migration is really done is simple: search ad creatives, creator briefs, community posts, support macros, and URLs hardcoded in old app versions for page.link or your old FDL custom domain. If your game handled email-link sign-in or password resets through Firebase Auth, Firebase says you must upgrade to the latest Auth SDK and that older app versions without the new solution will lose those features, so check your account recovery flow as well.

In games, the value of a link is that it shows the promised thing on the first screen. The main use cases are routing ad and creator traffic, re-engaging lapsed players, invite links, web shop links, and pre-registration.

Use case

What the link carries

Install state

Key design point

Ad and creator traffic

A specific mode, character, or reward code; creator ID

Mostly not installed, so deferred

Connect the first launch to the screen the ad or video promised. Don't skip the tutorial; route right after it

Lapsed-player re-engagement

Event screen, comeback reward, new season

Installed (some uninstalled and reinstalling)

Open the event screen directly if installed; after a reinstall, land on the same screen. Google's App campaigns for engagement require deep links

Invites and referrals

Inviter ID, guild or party code

Invitee usually not installed

Link the invitee to the inviter automatically on first launch (same guild, friend added). Grant rewards after server verification

Web shop

Product ID, return-to-app URL after payment

Installed

Exclude web shop paths so the app doesn't intercept them, but let the post-payment return link open the app

Pre-registration

Pre-registration source and campaign data

Before launch, installed on launch day

Weeks pass between click and install, so don't base rewards on link data; use the store's pre-registration rewards and account-based delivery

The most common mistake with ad and creator traffic is setting the destination too deep. Dropping a new player straight into PvP with no tutorial makes the first experience worse. The link's job is to remember the promise and keep it at the right moment, so guiding the player to the reward or mode when the tutorial ends, or on first lobby entry, usually works. Giving each creator a different destination and reward keeps what the creator says on video consistent with what happens in the game.

The effect is even clearer in re-engagement. If you send a lapsed player a push or ad that says "claim your new season reward" and the app opens on the home screen where they have to hunt for it, the promise turns into one more tap. Google's App campaigns for engagement (ACe) include deep links in their entry requirements. Re-engagement messaging and reward design are covered in Winning Back Lapsed Mobile Game Players: A Re-engagement Framework That Works.

Invite links are where a failed deferred deep link costs the most. If a player installs from a friend's invite and isn't connected to that friend on first launch, the invitee becomes just another solo new player, the inviter gets no reward, and the next invite never gets sent. When you calculate an invite feature's K-factor, measured invites come from deep link and referral data, so a low link restoration rate also makes the viral effect look smaller than it is. For calculating invite metrics, see Viral Coefficient and Organic Uplift in Mobile Games: How to Calculate Them, What Realistic Values Look Like, and the Traps in Building Them Into eCPI.

Web shops have the opposite problem. If the web shop and event pages share a domain and you register the whole domain for App Links and Universal Links, tapping a web shop link opens the app and the player never reaches checkout. The baseline is to use AASA exclude rules and Android 15+ Dynamic App Links exclude rules to keep web shop paths out of app handling, and let only the "back to game" link after payment open the app. The broader web shop traffic problem is covered in Mobile Game Web Shops: A $17 Billion Channel Whose Real Problem Is Traffic.

Pre-registration is where you can expect the least from links. Weeks or months pass between a pre-registration click and the launch-day install, and the install often happens through a store notification or auto-install. Rather than assuming click-time link data survives to the first launch on launch day, it is more realistic to deliver pre-registration rewards through the store's pre-registration reward features or by account, and use links to tell apart the sources of traffic to the pre-registration page. How the two stores differ on pre-registration is covered in How App Store Pre-Orders and Google Play Pre-Registration Differ for a Mobile Game Launch: Setup, Launch Day, Rewards, and a 12-Week Plan.

Most deep link failures come not from code but from domain verification files, signing certificates, same-domain rules, in-app browsers, and the order of operations at first launch.

Symptom

Common cause

How to check

On Android, links open in the browser instead of the app

assetlinks.json fingerprint doesn't match the Play App Signing key, a redirect, wrong content-type, a missing host

Check per-domain verified status with adb shell pm get-app-links; check failed items on the Play Console Deep links page

Works in dev builds, not in the store build

Only the local keytool fingerprint was registered

Replace it with the JSON snippet from the Play Console app signing page

You fixed assetlinks.json or AASA but nothing changed

Device and CDN caching

Android 15+: up to seven days; Android 14 and lower: at install or update. Apple's CDN requests within 24 hours; devices check about once a week

"Open in app" on an iOS landing page stays in Safari

Landing page and deep link share a domain

Use a dedicated deep link domain or subdomain (each subdomain needs its own AASA)

Landing page stalls instead of handing off

Chrome blocks JavaScript app launches without a user gesture

Launch the app from an "Open game" button tap

Tapping inside a social app doesn't open the game

The social or messaging app's in-app webview handles the link itself

Test on real devices per in-app browser; add "open in browser" guidance and a direct store button

Destination disappears on first launch after install

The first screen is decided before referrer or link data arrives; no retry when the referrer call fails

Defer first-launch routing until the link data responds (or times out), and store the result on the server

Rewards granted twice, or on someone else's code

Rewards confirmed by link parameters alone

Grant only after the server verifies code, account, and usage history

Only old app versions land on the default screen

A leftover Firebase Dynamic Links SDK receives empty responses

Raise the minimum supported version, or provide a fallback path for old versions

The in-app webview row matters most for creator marketing. When someone taps a link inside a video platform, social network, or messaging app, the page often opens in that app's built-in browser. How each built-in browser handles Universal Links and intents varies by app and version, and there are no published official rules. That means this area can't be confirmed from documentation. The only option is to pick the apps that send you the most traffic and test them on real devices regularly. The most universal fix is to put both a "Get it on the store" button and an "Open app" button on the landing page, and make both work on a user tap.

First-launch ordering is also easy to miss. A game's first launch packs in resource downloads, terms acceptance, account creation, and the tutorial, so a long time passes between receiving the link data and using it. The structure that breaks least is to fetch the link data right after launch, store it locally and on the server, and do the actual routing by reading the stored value when the tutorial ends.

Pre-Launch QA Checklist: What to Test, in Which Combinations?

Deep link QA has to cover combinations of three axes: OS, whether the app is installed, and where the link is tapped. We recommend running at least the matrix below before every campaign and after every app update or domain change.

OS

Install state

Entry environment

Expected result

Pass criterion (example)

Android

Installed

Chrome, default messaging app, email app

Destination screen in the app, no disambiguation dialog

All domains verified in pm get-app-links

Android

Installed

In-app browsers of major social, video, and messaging apps

App opens, or opens after tapping "Open app"

Result logged per app; fallback button works on failure

Android

Not installed

Chrome, in-app browsers

Play Store, install, destination restored on first launch

Destination and campaign values arrive intact in the referrer URL

Android

Installed but not yet opened, link tapped again

Chrome

Only the latest destination applies, no duplicate reward

One entry in the server reward log

iOS

Installed

Safari (page on a different domain), Messages, Mail

Destination screen in the app

Staying in Safari from a same-domain page is expected

iOS

Installed

In-app browsers of major social, video, and messaging apps

App opens, or opens after a button tap

Result logged per app

iOS

Not installed

Safari, in-app browsers

App Store, install, destination restored on first launch, or the code-entry/paste fallback

Player still reaches the reward when restoration fails

Both

Uninstalled, then reinstalled

Re-engagement ad or push link

Comeback event screen on first launch after reinstall

New-player tutorial and returning-player flow branch correctly

Both

Web shop link

App installed

Web shop opens in the browser, not the app; post-payment return link opens the app

Exclude rules work

Both

Malformed parameters

Tampered URL

App falls back safely to the default screen, no reward

Zero crashes, zero wrongly granted rewards

There are operational checks beyond the matrix. Track every campaign's link destination, parameters, owner, and expiry date in one sheet, so links from ended events don't land on empty screens. On each app update, confirm that the manifest intent filters and AASA and assetlinks.json changed together, and recheck the new version's results on the Play Console Deep links page. Include test devices on both Android 14 and lower and Android 15 and later to catch the difference in how assetlinks.json updates propagate. Finally, record link clicks, installs, and successful first-launch destination restores separately, so you can spot immediately which OS, environment, or campaign is losing restorations. When you need to tell whether a link or a creative is hurting performance, that number is the first one you need.

Traffic from ad media needs the same checks. Playio is an Android-based community of 5 million gamers who love games, and it connects games with gamers whose tastes match, using genre preferences, play history, and in-game behavior data. Pricing is CPI by default, and CPE based on in-game actions such as tutorial completion, reaching a level, or hitting a playtime goal is also supported. In campaigns that target in-game actions, results depend on whether installed players get from first launch to the target action without friction, so we recommend checking the Android installed and not-installed paths together before the campaign starts.

You can find more details here. (https://playioadsen.oopy.io/bizdeck)

Key Takeaways

A deep link opens a specific screen in an installed app. A deferred deep link carries the same destination to someone without the app, through the store and the install, to their first launch. As of November 2026, on Android the Install Referrer passed by Google Play (kept for 90 days after install, called once on first launch) is the default path for deferred deep links. Since Android 12, web links open in the browser unless App Links are verified, and since Android 15, server rules in assetlinks.json can adjust paths, though changes can take up to seven days to propagate. iOS has no equivalent of a store referrer, Apple prohibits device-signal identification, and clipboard reads trigger a notice since iOS 14 and an approval prompt since iOS 16. You therefore need a fallback flow where players can still reach the promised reward through code entry or a paste button when a deferred deep link fails. Firebase Dynamic Links shut down on August 25, 2025, and the App Links and Universal Links path Google recommended handles only installed apps, so deferred deep linking for new players has to come from another vendor or an in-house build. Games use links for ad and creator traffic, re-engagement, invites, web shops, and pre-registration, and each use case needs different choices on destination timing, server-side reward verification, and exclude rules. Most failures come from verification files, signing fingerprints, same-domain rules, in-app browsers, and first-launch ordering. The surest way to manage them is to run the OS × install state × entry environment matrix before every campaign and app update, and to record destination restores as their own metric.

For inquiries about Playio's advertising solutions, reach out at: [email protected]

Share article