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

  1. Connect a domain in SDDL (use {YOUR_ID}.sddl.me or your custom domain).
  2. Fill App Links config (Android package + SHA256, iOS app ID). SDDL will auto-publish AASA/assetlinks.json.
  3. 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

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