Operating System Integration
This page explains how iOS and Android treat deep links (universal/app links, URL schemes) and how ULink bridges the two systems. Implementation steps now live under Getting Started.
iOS deep linking model
- Universal Links: HTTPS URLs tied to your bundle ID via the Apple App Site Association (AASA) file. Tapping the link launches the app if the domain is associated; otherwise Safari opens.
- Custom URL schemes:
myapp://routes that act as fallbacks when the domain is unverified or during testing.
ULink workflow
- You connect a shared.ly or custom domain inside the dashboard.
- ULink serves the AASA file for that domain and resolves incoming HTTPS traffic.
- The iOS SDK listens for both universal links and URL scheme opens, turning them into
ULinkResolvedDataevents with parameters, metadata, and analytics context.
Android deep linking model
- Android App Links: Intent filters plus a Digital Asset Links JSON file that proves your domain is owned by the app.
- Custom schemes:
myapp://or other URIs handled by<intent-filter>entries.
ULink workflow
- Point your
<intent-filter>host to the shared/custom domain configured in ULink. - ULink hosts the Digital Asset Links JSON so Android trusts the app-domain association.
- The Android SDK captures implicit intents, prevents duplicate handling, and emits resolved deep link data via Kotlin flows (and through the Flutter bridge when used).
Unified vs. Dynamic links
- Unified links: per-platform URLs with store/web fallbacks. No app integration is required.
- Dynamic links: include structured payloads for in-app navigation. The SDK ensures installation/session context is present so analytics stay accurate.
Next steps
Choose your platform-specific setup guide under Getting Started to:
- Install the SDK (iOS, Android, or Flutter)
- Configure project settings and domains
- Create and test your first link
- Verify analytics and troubleshoot issues
Those guides contain all installation and initialization instructions that previously lived here.