Branch.io Alternative

Build deep links and deferred deep links with your brand and domain. SDDL automatically publishes apple-app-site-association and assetlinks.json, supports custom domains, and ships official SDKs for iOS & Android.

Highlights

  • Your brand on every link (custom domains).
  • Automatic AASA & assetlinks.json (no manual hosting).
  • Official SDKs (Swift/Kotlin) + REST option.
  • Fast time-to-integrate and clear developer flow.

Comparable capabilities

  • Universal Links (iOS) and App Links (Android).
  • Deferred deep links (restore context after install).
  • Campaign parameters for routing to the right screen.

SDDL vs Branch.io (at a glance)

Capability SDDL Branch.io
Branded domains Supported Supported
AASA / assetlinks.json hosting Auto-published by SDDL Managed within platform
Deferred deep links Supported Supported
SDKs Official iOS & Android Official SDK

iOS (Universal Links)

Enable Associated Domains in Xcode and add:

applinks:{YOUR_ID}.sddl.me
applinks:{your.custom.domain}

AASA is auto-published by SDDL from your app settings.

SwiftUI example

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 based on 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)
  }
}

Migration steps

  1. Create an app in SDDL and connect your domain.
  2. Provide Android package + SHA256 and iOS app ID — SDDL will publish AASA/assetlinks.json.
  3. Install the SDDL SDKs and route using the resolved payload on app start/URL handlers.

Learn more: Deep Links — basics, Deferred Deep Links — guide.

Testing checklist

FAQ

Do I need to host AASA or assetlinks.json?

No. SDDL automatically publishes both files from your app settings.

Can I skip SDKs?

Yes, a REST-only flow is possible, but official SDKs are the simplest way to restore context reliably.

Related guides

Continue exploring