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
- Create an app in SDDL and connect your domain.
- Provide Android package + SHA256 and iOS app ID — SDDL will publish AASA/assetlinks.json.
- 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
- Universal/App Links verify on device; no capability warnings in Xcode.
- Cold start calls
SDDLHelper.resolve(nil)
(iOS) orSDDLHelper.resolve(this, intent)
(Android). - Links route to the correct in-app destination on first launch and later sessions.
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-
Deep Links — The Complete Guide
Guide -
Deferred Deep Links — How They Work
Guide -
Universal Links (iOS) — Setup & Troubleshooting
Guide -
Firebase Dynamic Links 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