In May 2023, Google announced that Firebase Dynamic Links (FDL) would be deprecated with no replacement. As of today, the countdown is real: all existing FDL links will stop working on August 25, 2025: just over 100 days away.
This guide is for Flutter developers looking to migrate from Firebase Dynamic Links to other deep linking options, whether you need simple link routing or advanced features like deferred deep linking and install attribution.
What Are Dynamic Links (and Why Do They Matter)?
Dynamic links are essential for apps that care about:
- Seamless onboarding: Open to the right screen after install
- Marketing & attribution: Track installs from ads or QR codes
- Cross-platform consistency: One link that works on iOS, Android, and web
- In-app navigation: Route users to specific content via URLs
Typical Flow of a Dynamic Link
- User taps a link (e.g. from email, ad, or QR code)
- If the app is installed → it opens to the correct screen
If not → user goes to the App Store / Play Store - After install, the app opens to the linked screen (if deferred linking is supported)
Post August 25, 2025: All Firebase Dynamic Links will stop working
- Web: Shows a 404 page
- Mobile SDKs: Return 400 errors
Why is Google Deprecating FDL?
Google hasn’t given a full reason, but the ecosystem is moving toward native deep linking standards:
- 🔗 App Links (Android)
- 🍎 Universal Links (iOS)
These are more privacy-safe, OS-supported, and less reliant on a third-party intermediary.
🛠️ Your Deep Linking Options (in Flutter)
Depending on your needs, you can go native or use a third-party SDK.

Need help migrating your app? reach out: happy to help!
Option A: Native Deep Links
App Links (Android) + Universal Links (iOS)
For simple, direct in-app routing. No analytics or deferred linking.
Setup in 3 Steps:
1. Host Digital Asset Files
- Android:
URL:https://yourdomain.com/.well-known/assetlinks.json
- iOS:
URL:https://yourdomain.com/.well-known/apple-app-site-association
2. Sample File for Android
jsonCopyEdit[
{
"relation": ["delegate_permission/common.handle_all_urls"],
"target": {
"namespace": "android_app",
"package_name": "com.example.app",
"sha256_cert_fingerprints": ["YOUR_SHA256_HASH"]
}
}
]
3. Sample File for iOS
jsonCopyEdit{
"applinks": {
"apps": [],
"details": [
{
"appID": "YOUR_TEAM_ID.com.example.app",
"paths": [ "/promo/*" ]
}
]
}
}
4. Flutter Routing with go_router
dartCopyEditfinal router = GoRouter(
routes: [
GoRoute(
path: '/',
builder: (_, __) => HomeScreen(),
routes: [
GoRoute(
path: 'promo',
builder: (_, __) => PromoScreen(),
),
],
),
],
);
🚫 What You Don’t Get with Native Links:
- No deferred deep linking (new users won’t land on the right screen after install)
- No campaign tracking or attribution
- No short link generation
Option B: Use a Deep Linking SDK (for deferred linking + analytics)
Platform | Key Features |
---|---|
Branch.io | Deferred links, custom domains, short links, analytics |
AppsFlyer | Deep links + full-funnel ad attribution & campaign insights |
Adjust | Attribution, fraud detection, mobile analytics |
Kochava | Install tracking, QR support, SMS/Email linking |
Bitly | Simple branded short links + analytics |
These SDKs are your best bet if you need install tracking, deferred links, or marketing attribution.
🔁 Migrating from Firebase Dynamic Links
Step 1: Export Your FDLs
From the Firebase console, download all existing links via CSV.
Step 2: Choose the Right Path
Your App Needs… | Recommended Solution |
---|---|
Simple routing only | App Links / Universal Links |
Deferred deep linking | Branch / AppsFlyer / Adjust |
QR Codes + marketing analytics | Kochava / Bitly / AppsFlyer |
Campaign performance tracking | AppsFlyer / Branch |
Step 3: Update Your Flutter App
- Remove FDL SDKs & dependencies
- Add the new provider’s Flutter SDK
- Update link routing logic (e.g. using
getInitialLink
,go_router
, or provider-specific handlers) - Test on iOS & Android, with and without app pre-installed
Bonus: Real-World Example
Let’s say you’re running an event app:
- You want to send new users a link to a specific event
- If the app is installed → they open directly to the event
- If not → they go to the App Store, install, and still land on the right event
➡️ Use Branch.io or AppsFlyer, which support deferred deep linking, attribution, and short links.
Best Practices
- Use HTTPS and custom domains for all links
- Test fallback behavior (broken link ≠ broken UX)
- Track link performance in dashboards (especially during launch campaigns)
- Secure your asset files: they control your app’s linking permissions
📚 Resources & Links
- Firebase Dynamic Links FAQ (Official)
- Flutter Deep Linking Guide
- Branch Flutter SDK Docs
- AppsFlyer Flutter Guide
- Adjust Flutter SDK
- Kochava SDK Docs
⚠️ Final Reminder
All Firebase Dynamic Links will stop working on August 25, 2025.
Start migrating now to avoid broken user experiences, lost attribution data, and failed campaigns.

Need help migrating your app? reach out: happy to help!