The Firebase Dynamic Links replacement: a migration guide
Firebase Dynamic Links has shut down. Here's what you lost, what to replace it with, and how to migrate without breaking the links already out in the wild.
If you shipped a mobile app in the last decade, you probably used Firebase Dynamic Links. And if you're reading this, you've hit the wall: FDL has been shut down, those links no longer resolve, and the deferred deep linking and attribution you quietly depended on went with them. This is the practical guide to replacing it. (For a side-by-side feature comparison, see our Firebase Dynamic Links alternative page.)
What happened to Firebase Dynamic Links
Google deprecated FDL and then turned it off. The official line was that iOS Universal Links and Android App Links had matured enough to handle direct deep linking on their own — which is true, as far as it goes. The problem is that FDL was never just deep linking. The parts teams leaned on hardest were the parts the OS still doesn't give you for free.
What you actually lose
- Deferred deep linking — context surviving the install gap, so a fresh install lands on the right screen. The OS does not do this for you.
- Cross-platform smart routing — one link resolving to iOS, Android, or web by device.
- Click analytics and the hosted short-link domain (your page.link / app.goo.gl URLs).
- The behind-the-scenes hosting of apple-app-site-association and assetlinks.json that FDL handled silently.
Mapping FDL concepts to LinkTrail
The good news is that the replacement is close to one-to-one — LinkTrail was built for exactly the surface FDL left behind.
- FDL dynamic link → LinkTrail smart link (same idea: one URL, device-aware routing).
- page.link / *.app.goo.gl domain → your own custom link domain, branded and verified.
- FDL deferred deep linking → LinkTrail deferred deep linking, with a richer first-open payload.
- FDL link analytics → attribution with match type plus real-time webhooks into your own warehouse.
- Manually managed association files → managed AASA and assetlinks.json, regenerated when you add a bundle ID.
The migration, step by step
- 1Inventory your existing FDL links and the paths they pointed to — exports, email templates, printed QR codes, store listings.
- 2Stand up a LinkTrail link domain (ideally the custom domain you already used with FDL, so existing branded links can be repointed).
- 3Recreate your link rules: set the smart-routing destinations and the deep link paths.
- 4Swap the SDK — replace the FDL handler with the LinkTrail deep-link handler (the quickstart covers both platforms).
- 5Repoint DNS / set redirects so old short links resolve to the new resolver.
- 6Verify Universal Links and App Links open the app on a clean install before you cut over traffic.
Swapping the SDK
// Before — Firebase Dynamic Links
FirebaseDynamicLinks.dynamicLinks().handleUniversalLink(url) { link, _ in
if let deep = link?.url { router.navigate(to: deep.path) }
}
// After — LinkTrail
LinkTrail.shared?.onLink { link, source in
router.navigate(to: link.path, data: link.customData)
}Don't break the links already in the wild
You cannot edit a link that's printed on a box or sitting in a three-year-old email. If you used a custom domain with FDL, repoint that domain at the new resolver and map old paths to new with a catch-all — existing URLs keep working, now served by LinkTrail. If you only ever used the default page.link domain, those URLs are gone; focus on updating every surface you still control and accept the long tail.
Verify before you trust
curl -sI https://yourapp.linktrail.io/.well-known/apple-app-site-association | grep -i content-type
# Expect: content-type: application/json
adb shell pm verify-app-links --re-verify com.example.app“Firebase Dynamic Links didn't die because deep linking got easy. It died because Google stopped doing the hard 20% — which is exactly the 20% you still need.”