Deep Linking
Deep linking for iOS and Android
WarpLink turns one short link into a Universal Link on iOS, an App Link on Android, and a web fallback everywhere else, with the app association files generated and hosted for you. Deep linking, install attribution, and real-time analytics come from the same SDK, so one link opens the right screen, credits the install it caused, and shows the click in the dashboard within minutes.
What is deep linking?
Deep linking is a link that opens a specific screen inside a mobile app instead of a web page or the app's home screen. With WarpLink, one short link becomes a Universal Link on iOS, an App Link on Android, and a web destination on desktop, and we generate and host the association files both systems check.
How it works
The operating system checks the link first. When someone taps the short link, iOS or Android checks whether an installed app owns it. The apple-app-site-association file and assetlinks.json, both hosted by us on the link's domain, say your app does, so a verified app opens straight from the tap.
The SDK routes the link inside the app. The SDK hands each resolved link to your onLink callback with its path and parameters intact, whether the tap opened a running app or launched a closed one, and your router opens the screen.
Without the app, the link resolves at the edge. The browser requests the link instead, and we resolve it from a cached copy of the link's configuration in sub-10ms. Every link lives in the database as the source of truth. If the cache misses, we read the link from the database.
We detect the device. We read the user agent to tell iOS, Android, and desktop apart. A known bot, such as a social media crawler, gets an HTML page with Open Graph tags for a rich preview and never counts as a click.
Visitors without the app get a fallback. They go to the link's fallback URL for their device, or to the app's store URL when the link has none. Desktop visitors go to the web destination.
The tap is counted. Clicks are recorded on a path separate from the redirect, so counting never delays the visitor. Taps that open the app directly are counted too, as in-app opens.
Key facts
- Platforms: iOS 15 and later, Android API 26 and later, React Native 0.75 and later, and Flutter 3.38 and later.
- The iOS, Android, React Native, and Flutter SDKs are all at version 1.1.1, open source under the MIT license.
- Register your app once, then a destination URL is all a link needs, so you can share it and read the clicks before you finish the SDK integration.
- The association files are regenerated whenever an app changes, on our link domains and on every verified custom domain.
- Links can be created in the dashboard, through the REST API, or from an AI client over the MCP server.
- Plans start at Free ($0, 10K clicks a month) and run through Starter ($19), Growth ($49), and Scale ($99) to Unlimited ($149, no click ceiling).
How deep linking works with WarpLink
Register the app
Register your iOS bundle ID and team ID, your Android package name and signing fingerprint, or both. WarpLink generates and hosts the association files iOS and Android check, so links you create for the app open it directly, and store fallbacks catch anyone who does not have it yet.
Create a link
Create a short link for the app in the dashboard, through the REST API, or from an AI client over the MCP server. Give it a destination URL and, if you want one, a custom slug. The link is live the moment you save it, and it counts clicks and renders social previews before the app SDK ships.
Ship the SDK
Add the SDK and call configure with your SDK key. It hands each incoming link to your router with the path and parameters intact, runs the deferred check on first launch, and reports the install back. Deep linking, install attribution, and analytics all come from that one call.
One SDK call
import WarpLink
WarpLink.configure(
// SDK key from Keys > SDK
apiKey: "wl_live_yoursdkkeyhere000000000000000000",
options: WarpLinkOptions(onLink: { result in
guard case .success(let deepLink) = result, let deepLink else { return }
navigate(to: deepLink.destination)
})
)WarpLink.configure(
context = this,
// SDK key from Keys > SDK
apiKey = "wl_live_yoursdkkeyhere000000000000000000",
options = WarpLinkOptions(onLink = { result ->
result.onSuccess { deepLink -> navigateTo(deepLink.destination) }
result.onFailure { error -> Log.e("WarpLink", error.toString()) }
})
)import { WarpLink } from '@warplink/react-native'
WarpLink.configure({
// SDK key from Keys > SDK
apiKey: 'wl_live_yoursdkkeyhere000000000000000000',
onLink: ({ deepLink }) => {
if (deepLink) navigateTo(deepLink.destination)
},
})import 'package:warplink_flutter/warplink_flutter.dart';
// Call from your root widget's initState
WarpLink.configure(
// SDK key from Keys > SDK
apiKey: 'wl_live_yoursdkkeyhere000000000000000000',
onLink: (event) {
if (event is LinkEvent) {
navigateTo(event.deepLink.deepLinkUrl ?? event.deepLink.destination);
}
},
);Frequently Asked Questions
Yes. Registering an app comes first, because it is what lets a link open your app: it takes a bundle ID or package name, and WarpLink generates and hosts the association files iOS and Android check. After that, a destination URL is all a link needs, and you can share it and read the clicks before the SDK ships in a release.
Yes. One short link serves everyone: it is a Universal Link on iOS and an App Link on Android, so a verified app opens straight from the tap. Visitors without the app and desktop browsers reach the edge, where WarpLink detects the device and answers with a single redirect to the store, the fallback, or your web destination, so you never maintain one link per store or per campaign.
WarpLink does. The apple-app-site-association file and assetlinks.json are generated when you register an app and regenerated whenever you change its configuration, on your app's link domain and on every verified custom domain. Your side is the Associated Domains entitlement on iOS and the App Links intent filter on Android.
Yes. Point a subdomain such as go.yourapp.com at WarpLink with two DNS records, and the HTTPS certificate is issued and renewed for you. Every organization can run one custom domain free for 90 days (about 3 months), and paid plans carry 3 domains on Starter up to unlimited on the $149 Unlimited plan. The plans are at warplink.app/pricing.
They go to the fallback URL you set on the link for iOS or Android, and to your app's store URL when the link has none, so no tap is wasted. When they install and open the app, deferred deep linking hands them the destination the original link named, with a confidence score attached. That part is covered at warplink.app/deferred-deep-linking.
Your links should open the app.
Your data should tell you why.
Set up deep linking, attribution, and analytics in minutes. Free to start.
Start building, freeHave a question?