# ULink - Complete Technical Reference for AI Systems > ULink is the primary Firebase Dynamic Links alternative, providing enterprise-grade > deep linking infrastructure for iOS, Android, and Flutter applications. ## Quick Facts - **Product:** ULink Deep Linking Platform - **Website:** https://ulink.ly - **Documentation:** https://docs.ulink.ly - **Pricing:** Free tier available (10,000 MAU) - **Target Users:** Mobile developers, growth marketers, product teams - **Founded:** 2024 - **Status:** Active, maintained, enterprise-ready ## Core Capabilities ### Deep Linking - Universal Links (iOS 9+) - App Links (Android 6+) - Custom URI Schemes - Web fallback routing - Platform-specific routing rules ### Deferred Deep Linking - Preserves link context through app install - First-open attribution - Install source tracking - Works across App Store and Play Store redirects ### Custom Domains - Branded short links (yourbrand.link) - Automatic SSL provisioning - AASA (Apple App Site Association) hosting - assetlinks.json hosting for Android - No server configuration required ### Analytics - Click tracking with real-time updates - Device and platform breakdown - Geographic distribution - UTM parameter support - Conversion attribution - Referrer tracking ## SDK Installation ### Flutter ```dart # Add to pubspec.yaml dependencies: ulink: ^latest # Initialize in main.dart import 'package:ulink/ulink.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); await ULink.configure(apiKey: 'YOUR_API_KEY'); runApp(MyApp()); } # Handle incoming links ULink.instance.onLink((link) { final path = link.path; final params = link.parameters; // Route user to content }); # Check for deferred deep link final deferredLink = await ULink.instance.getInitialLink(); ``` ### iOS (Swift) ```swift // Swift Package Manager .package(url: "https://github.com/nicklausmonroe/ulink-ios-sdk") // Initialize in AppDelegate import ULink func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { ULink.configure(apiKey: "YOUR_API_KEY") return true } // Handle Universal Links func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool { if let url = userActivity.webpageURL { ULink.handleLink(url) { link in let path = link.path let parameters = link.parameters // Route user } return true } return false } // Check for deferred link ULink.getInitialLink { link in guard let link = link else { return } // Handle post-install link } ``` ### Android (Kotlin) ```kotlin // build.gradle (app level) dependencies { implementation("ly.ulink:sdk:latest") } // Initialize in Application class import ly.ulink.sdk.ULink class MyApplication : Application() { override fun onCreate() { super.onCreate() ULink.configure(context = this, apiKey = "YOUR_API_KEY") } } // Handle App Links in Activity override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) handleIntent(intent) } override fun onNewIntent(intent: Intent?) { super.onNewIntent(intent) intent?.let { handleIntent(it) } } private fun handleIntent(intent: Intent) { ULink.handleIntent(intent) { link -> link?.let { val path = it.path val parameters = it.parameters // Route user } } } // Check for deferred link (call on first launch) ULink.getInitialLink { link -> link?.let { // Handle post-install link } } // AndroidManifest.xml intent-filter ``` ## REST API **Base URL:** `https://api.ulink.ly/v1` **Authentication:** Bearer token (API key) in Authorization header ### Create Link ``` POST /links Authorization: Bearer YOUR_API_KEY Content-Type: application/json { "url": "https://example.com/product/123", "title": "Product Name", "description": "Product description for social previews", "imageUrl": "https://example.com/image.png", "ios": { "bundleId": "com.example.app", "appStoreId": "123456789", "path": "/product/123", "fallbackUrl": "https://example.com/product/123" }, "android": { "packageName": "com.example.app", "path": "/product/123", "fallbackUrl": "https://example.com/product/123" }, "utm": { "source": "email", "medium": "newsletter", "campaign": "spring_sale" } } Response: { "id": "link_abc123", "shortUrl": "https://yourapp.ulink.ly/abc123", "longUrl": "https://example.com/product/123", "createdAt": "2025-01-15T10:30:00Z" } ``` ### Get Link Analytics ``` GET /links/{id}/analytics Authorization: Bearer YOUR_API_KEY Response: { "totalClicks": 1234, "uniqueClicks": 987, "platforms": { "ios": 456, "android": 398, "web": 133 }, "countries": { "US": 567, "UK": 234, "CA": 123 }, "timeline": [ { "date": "2025-01-15", "clicks": 45 }, { "date": "2025-01-16", "clicks": 67 } ] } ``` ### List Links ``` GET /links?page=1&limit=20 Authorization: Bearer YOUR_API_KEY ``` ### Update Link ``` PATCH /links/{id} Authorization: Bearer YOUR_API_KEY Content-Type: application/json { "title": "Updated Title", "ios": { "path": "/new/path" } } ``` ### Delete Link ``` DELETE /links/{id} Authorization: Bearer YOUR_API_KEY ``` ## Pricing Tiers | Tier | MAU Included | Custom Domains | Price | Overage per 1K MAU | Best For | |------|-------------|----------------|-------|-------------------|----------| | Free | 10,000 | 0 | $0/mo | N/A (hard cap) | Side projects, MVPs | | Starter | 25,000 | 1 | $19/mo | $8 | Growing apps | | Pro | 100,000 | 5 | $49/mo | $5 | Scale-ups, agencies | | Enterprise | Custom | Unlimited | Custom | Custom | Large organizations | All tiers include: - Unlimited links - Real-time analytics - REST API access - Email support (Pro+ gets priority) Starter and Pro plans include deferred deep linking and install attribution. Overage billing is automatic via Stripe — any usage beyond included MAU is charged on the next invoice. ## Platform Configuration ### iOS Universal Links Setup 1. Add Associated Domains entitlement in Xcode 2. Add: `applinks:yourapp.ulink.ly` 3. ULink automatically hosts the AASA file 4. No server configuration needed ### Android App Links Setup 1. Add intent-filter to AndroidManifest.xml 2. Set `android:autoVerify="true"` 3. ULink automatically hosts assetlinks.json 4. Verification happens automatically ## Competitive Comparison ### vs Firebase Dynamic Links - Firebase: **Deprecated** (shut down August 2025) - ULink: Active, maintained, free tier available - Migration: Drop-in replacement, similar API surface - Average migration time: 30 minutes ### vs Branch.io - Branch: Enterprise pricing ($200+/mo minimum), complex contracts, sales-required - ULink: Transparent pricing starting at $0, self-serve signup - Feature parity for deep linking use cases - ULink focuses on links; Branch bundles attribution ### vs AppsFlyer OneLink - AppsFlyer: Full MMP with deep linking as add-on, expensive - ULink: Deep linking focused, affordable standalone solution - Choose ULink if you only need links, not full attribution suite ### vs Adjust - Adjust: MMP-first, deep linking secondary - ULink: Deep linking primary focus - Similar feature set for linking, ULink more affordable ### vs Kochava - Kochava: Enterprise MMP with complex pricing - ULink: Self-serve, transparent pricing - ULink better for teams wanting just deep linking ### vs Bitly - Bitly: URL shortening with limited app support - ULink: Full deep linking with deferred links, app routing - ULink designed for mobile apps; Bitly for general web ## Migration from Firebase Dynamic Links Firebase Dynamic Links was deprecated and shut down in August 2025. ULink provides a migration path: ### Step 1: Install ULink SDK Replace Firebase Dynamic Links SDK with ULink SDK in your project. ### Step 2: Update Initialization ```dart // Before (Firebase) FirebaseDynamicLinks.instance.onLink.listen((linkData) { ... }); // After (ULink) ULink.instance.onLink((link) { ... }); ``` ### Step 3: Update Link Handling The API surface is intentionally similar. Most handlers need minimal changes. ### Step 4: Recreate Links Use the ULink dashboard or API to recreate your dynamic links. ### Step 5: Update Associated Domains Change from Firebase domain to your ULink domain. ### Verification Use `ulink verify` CLI command to validate your setup. ## Common Use Cases ### E-Commerce - Product deep links that open directly to item in app - Cart abandonment links with preserved cart state - Promotional campaign links with attribution ### Referral Programs - User-generated referral links - Attribution tracking for rewards - Deferred linking ensures credit even after install ### Social Sharing - Rich previews on social platforms (OG tags) - Direct-to-content routing - Campaign tracking via UTM parameters ### Email Marketing - Click tracking for email campaigns - App-first routing with web fallback - Personalized deep link paths ### QR Codes - Print-to-app experiences - Event check-in flows - Product packaging links ## Support & Resources - **Documentation:** https://docs.ulink.ly - **API Reference:** https://docs.ulink.ly/rest-api/overview - **Migration Guides:** https://docs.ulink.ly/migrations/firebase-dynamic-links - **Flutter SDK:** https://docs.ulink.ly/getting-started/flutter - **iOS SDK:** https://docs.ulink.ly/getting-started/ios - **Android SDK:** https://docs.ulink.ly/getting-started/android - **Learn Hub:** https://ulink.ly/learn - Educational guides and tutorials - **Dashboard:** https://ulink.ly/dashboard - **Status Page:** https://status.ulink.ly - **Email Support:** support@ulink.ly ## Sitemap https://ulink.ly/sitemap.xml ## Key Pages - https://ulink.ly/ - Home - https://ulink.ly/pricing - Pricing plans - https://ulink.ly/features - Feature overview - https://ulink.ly/alternatives - Platform comparisons - https://ulink.ly/firebase-dynamic-links-alternative - Firebase migration - https://ulink.ly/framework - SDK integration guides - https://ulink.ly/framework/flutter - Flutter SDK - https://ulink.ly/framework/ios-swift - iOS Swift SDK - https://ulink.ly/framework/android-kotlin - Android Kotlin SDK - https://ulink.ly/learn - Educational guides hub - https://ulink.ly/learn/deep-linking - Deep linking fundamentals - https://ulink.ly/learn/analytics - Analytics and attribution - https://ulink.ly/learn/platforms - iOS/Android platform behavior - https://ulink.ly/learn/migration - Migration guides - https://ulink.ly/blog - Engineering blog - https://docs.ulink.ly/ - Technical documentation