Firebase Dynamic Links Alternative
Ship deep links and deferred deep links with a lightweight, backend-first platform. SDDL automatically publishes
apple-app-site-association
and assetlinks.json
from your app settings, supports branded domains,
and provides official SDKs for iOS & Android.
Why teams switch
- Branded links on your domain.
- Automatic AASA & assetlinks.json (no manual hosting).
- Official iOS/Android SDKs.
- Fast setup and clear developer experience.
What you keep
- Universal Links on iOS, App Links on Android.
- Deferred deep links across install.
- Preserved campaign parameters for routing.
SDDL vs Firebase Dynamic Links
Capability | SDDL | Firebase Dynamic Links |
---|---|---|
Branded domains | Yes | Yes |
AASA / assetlinks.json hosting | Auto-published by SDDL | Requires configuration per app/domain |
SDKs | Official iOS (Swift) & Android (Kotlin) | Official SDK |
Deferred deep links | Supported | Supported |
Developer UX | Backend-first, simple API | Part of Firebase suite |
iOS (Universal Links)
Enable Associated Domains in Xcode and add:
applinks:{YOUR_ID}.sddl.me
applinks:{your.custom.domain}
You don’t host apple-app-site-association
— SDDL publishes it automatically from your app settings.
SwiftUI (official SDDL iOS SDK)
import SwiftUI
import SDDLSDK
struct ContentView: View {
var body: some View {
Color.clear
.onOpenURL { url in
SDDLHelper.resolve(url, onSuccess: handlePayload(_:), onError: handleError(_:))
}
.onContinueUserActivity(NSUserActivityTypeBrowsingWeb) { activity in
SDDLHelper.resolve(activity.webpageURL, onSuccess: handlePayload(_:), onError: handleError(_:))
}
.onAppear {
SDDLHelper.resolve(nil, onSuccess: handlePayload(_:), onError: handleError(_:))
}
}
}
Android (App Links)
SDDL auto-publishes assetlinks.json
using your package name and SHA256 fingerprints.
// settings.gradle.kts
pluginManagement {
repositories {
gradlePluginPortal()
google()
mavenCentral()
maven("https://jitpack.io")
}
}
// app/build.gradle.kts
dependencies {
implementation("com.github.nonanerz:sddl-android-sdk:2.0.9")
}
Handle intents
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
SDDLHelper.resolve(this, intent, ::routeWith, ::handleDeepLinkError, readClipboard = false)
}
override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent)
SDDLHelper.resolve(this, intent, ::routeWith, ::handleDeepLinkError, readClipboard = false)
}
}
Migrate from FDL in 3 steps
- Connect a domain in SDDL (use
{YOUR_ID}.sddl.me
or your custom domain). - Fill App Links config (Android package + SHA256, iOS app ID). SDDL will auto-publish AASA/assetlinks.json.
- Integrate SDKs (Swift/Kotlin) and route based on the payload in app start/URL handlers.
See also: Deferred Deep Links, Universal Links (iOS).
Testing checklist
- iOS: Associated Domains verified; reinstall app after entitlement changes.
- iOS: cold start calls
SDDLHelper.resolve(nil)
to restore deferred context. - Android:
android:autoVerify="true"
set; fingerprints in SDDL match debug/release builds. - Links open the intended in-app screen on first launch and subsequent launches.
FAQ
Do I need to host AASA/assetlinks.json?
No. SDDL automatically publishes both files based on your app settings.
Is the SDK required?
SDKs are the simplest path, but you can implement a REST-only flow if you prefer.
Related guides
Continue exploring-
Deep Links — The Complete Guide
Guide -
Deferred Deep Links — How They Work
Guide -
Universal Links (iOS) — Setup & Troubleshooting
Guide -
Branch.io Alternative
Guide -
App Links (Android)
Guide -
Troubleshooting Playbook
Guide -
QA Playbook
Guide -
E-commerce Deep Links
Guide -
Deep Links for Ads
Guide -
QR Codes to App — Deferred Deep Links
Guide -
Email & SMS Deep Links
Guide -
Creator & Affiliate Deep Links
Guide -
Gaming Deep Links — Rewards, Quests
Guide -
Deferred Deep Links in React Native — Setup Guide
Guide