How to Implement Flutter Dynamic Links Without Firebase (Complete Guide — 2025)
Dynamic links are crucial for providing a smooth user experience in mobile apps. They allow you to direct users to specific screens, even…
How to Implement Flutter Dynamic Links Without Firebase (Complete Guide — 2025)
Dynamic links are crucial for providing a smooth user experience in mobile apps. They allow you to direct users to specific screens, even after the app is installed. While Firebase Dynamic Links is commonly used, many developers seek alternatives due to concerns around vendor lock-in, complexity, or data privacy.
In this article, we’ll guide you step-by-step on how to implement dynamic links in Flutter without using Firebase. We’ll use URL schemes, universal links, and some useful packages to achieve this functionality with full control.
Not a member? Click here to read free — and if you enjoy it, consider subscribing🔔 or ☕ buying me a coffee to support my writing!

Why Avoid Firebase for Dynamic Links?
There are several reasons why developers choose not to use Firebase:
- Desire for full control over link structure and hosting
- Concerns about data privacy or regulations (GDPR, HIPAA, etc.)
- Need for a lightweight or backend-agnostic solution
- Preference for self-hosted or custom backend setups
Fortunately, Flutter allows you to implement deep linking without Firebase using built-in tools and packages.
Method 1: Using Custom URL Schemes (For iOS and Android)
This approach works well when you control the app and want to trigger specific routes using links like myapp://profile/123.
Step 1: Define the URL scheme
For iOS:
In ios/Runner/Info.plist, add:
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLSchemes</key>
<array>
<string>myapp</string>
</array>
</dict>
</array>
For Android:
In android/app/src/main/AndroidManifest.xml, add inside the <activity> tag:
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="myapp" />
</intent-filter>
Step 2: Handle incoming links in Flutter
Use the uni_links or receive_sharing_intent package to listen for incoming URLs.
Install with:
flutter pub add uni_links
In your Dart code:
import 'package:uni_links/uni_links.dart';
void initDeepLinking() {
getInitialUri().then((uri) {
if (uri != null) {
handleUri(uri);
}
});
uriLinkStream.listen((Uri? uri) {
if (uri != null) {
handleUri(uri);
}
});
}
void handleUri(Uri uri) {
final path = uri.path;
if (path == '/profile/123') {
// Navigate to profile screen
}
}
Call initDeepLinking() in your initState() method.
Method 2: Using Universal Links (iOS) and App Links (Android)
This method enables links like https://yourdomain.com/product/99 to open your app.
Step 1: Set up a web domain
You must own a domain and set up verification files:
- iOS (Universal Links): Upload
apple-app-site-associationto[https://yourdomain.com/.well-known/](https://yourdomain.com/.well-known/) - Android (App Links): Upload
assetlinks.jsonto[https://yourdomain.com/.well-known/](https://yourdomain.com/.well-known/)
Step 2: Configure the app
For iOS:
Update Info.plist with:
<key>AssociatedDomains</key>
<array>
<string>applinks:yourdomain.com</string>
</array>
For Android:
In AndroidManifest.xml, under the main activity, add:
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="https"
android:host="yourdomain.com"
android:pathPrefix="/" />
</intent-filter>
Step 3: Handle links in Flutter
Again, use the uni_links package as in Method 1.
Universal and App Links work similarly but offer more trust and flexibility in web-to-app flows. They’re ideal for production apps shared across social media, ads, and emails.
Testing Your Dynamic Links
- Use a custom URI like
myapp://product/99and tap on it from a browser or test message. - For web-based links, send yourself a test email or click a URL from a browser to test Universal/App Links.
- Ensure app is installed, and link configurations are correct on both platforms.
Benefits of This Approach
- No vendor lock-in (Firebase-free)
- Fully customizable link structure
- Easier GDPR compliance and user data control
- Works even offline or with self-hosted backend
메타데이터
- post_id
- 1c0aeea16cd7
- slug
- how-to-implement-flutter-dynamic-links-without-firebase-complete-guide-2025-1c0aeea16cd7
- url
- https://medium.com/easy-flutter/how-to-implement-flutter-dynamic-links-without-firebase-complete-guide-2025-1c0aeea16cd7
- canonical_url
- https://medium.com/easy-flutter/how-to-implement-flutter-dynamic-links-without-firebase-complete-guide-2025-1c0aeea16cd7
- author_url
- https://medium.com/@pragneshpalsana
- status
- ok
- fetched_at
- 2026-08-17 12:50:20