Google shut down Firebase Dynamic Links on 25 August 2025. Links on page.link addresses no longer work, and new ones cannot be made. That means broken invite links, shared product links and QR codes for any app that relied on them. This post covers what you lost, what you need to replace, and how to do it with little code.
One thing no service can do: bring the old page.link addresses back. Google owns them. Anything already sent or printed on them has to be replaced with new links.
What Dynamic Links did
A Dynamic Link did three jobs with one URL:
- Deep link: if the app was installed, it opened the right screen.
- Deferred deep link: if the app was not installed, it sent the person to the store, and after install the app opened the same screen.
- Link analytics: it counted clicks and installs.
Plain Android App Links and iOS Universal Links only do the first job. The second one is what most people miss when they migrate.
Deep link or deferred deep link?
A deep link opens a screen in an app that is already installed. A deferred deep link also works when the app is not installed yet. Use a deferred deep link for invites, referrals, ads and QR codes, where new people tap the link. A plain deep link is enough for messages to people who already use the app.
More detail: https://deeplinks.velaapps.in/deferred-deep-link-vs-deep-link
What you need to replace it
- A link domain that Android and iOS both trust (assetlinks.json and apple-app-site-association).
- A small SDK in the app that, at first launch, asks which link the person came from.
- A dashboard to create links and see clicks and installs.
Doing it with Vela Links
I built Vela Links for this. One link works as a deep link and a deferred deep link, and every app gets a free link domain (for example yourapp.links.velaapps.in). SDKs exist for Flutter, iOS (Swift), Android (Kotlin or Java) and React Native. It does not need Firebase for links.
Besides links it gives you QR codes, link analytics (taps, scans, installs, opens) and optional in-app analytics credited to the link or campaign that brought each person. There is a free plan (1 app, 3 QR codes); the paid plans add more apps, QR codes and history. Later, if you want them, you can also send in-app messages and push notifications: https://deeplinks.velaapps.in/docs/push
- Migration guide: https://deeplinks.velaapps.in/docs/replace-firebase-dynamic-links
- Flutter: https://pub.dev/packages/vela_links
- React Native: https://www.npmjs.com/package/@velaapps/links-react-native
- Android (Maven Central,
in.velaapps:links): https://deeplinks.velaapps.in/guides/android - iOS (Swift package on GitHub): https://deeplinks.velaapps.in/guides/ios
One honest limit: on Android the match after install is exact. On iOS it is best-effort when the clipboard token is unavailable.
Migration steps
- List every kind of old link: the screen it opened, its extra data (like an id), the web page for people without the app, and its campaign tags.
- Create an app in the dashboard and copy its SDK key.
- Add the SDK, start it with your key, and pass it every incoming link.
- Save your iOS bundle id and Apple Team ID, and your Android package name, in the dashboard. Then add the associated domain (iOS) and intent filter (Android) the Setup tab shows, and press Check your setup.
- Create the new links, with a web fallback address, and replace the old ones on your site, emails and printed QR codes.
- Test on a real phone: app installed, app not installed (tap, install, open), and on a computer (goes to your web fallback).
If you hit a problem migrating, ask in the comments and I will help.
Top comments (0)