App Deep Links
Connect your own iOS/Android app to a U2L domain: links open in the app when installed, and can send everyone else to your store page.
App deep links turn every short link on your domain into a door into your mobile app. Available on the Advanced plan and above, on a verified custom domain or a U2L subdomain.
Three things can happen when someone taps a link on an app-connected domain:
| Visitor | What happens |
|---|---|
| Has your app installed | The OS opens the link directly in your app (Apple Universal Links / Android App Links) - U2L is never even contacted |
| On mobile, app not installed, link has App Store Fallback on | Redirected to your App Store / Play Store page; the Play URL carries the original link in the install referrer |
| Everyone else (desktop, fallback off) | Normal web redirect - nothing changes |
U2L publishes the two association files the operating systems verify - https://yourdomain.com/.well-known/apple-app-site-association and https://yourdomain.com/.well-known/assetlinks.json - automatically from your configuration. You never host or edit them; changes go live within about 5 minutes of saving.
Step 1 - Connect your app in the dashboard
Open Custom domains (or Subdomains) → your verified domain → Mobile app, and fill in what applies:
| Field | Where to find it |
|---|---|
| iOS Team ID | Apple Developer → Membership (10 characters, e.g. ABCDE12345) |
| iOS Bundle ID | Xcode target or App Store Connect (e.g. com.yourco.app) |
| App Store URL | Your app’s https://apps.apple.com/... page - required for the iPhone store fallback |
| Android package name | e.g. com.yourco.app |
| SHA-256 fingerprint(s) | Play Console → Setup → App signing (use the app signing certificate), or keytool -list -v -keystore your.keystore |
| Play Store URL | Optional - derived from the package name when empty |
Add the Play App Signing fingerprint, not just your upload key - Google re-signs production builds. You can enter up to 5 fingerprints (debug + upload + app signing).
Step 2 - Prepare your app
iOS - add the Associated Domains capability to your app target:
applinks:yourdomain.com
Then handle incoming links (SwiftUI example):
.onOpenURL { url in
// url.path is "/abc123" — resolve it via the U2L API or your own mapping
}
Android - add a verified intent filter for the domain:
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="https" android:host="yourdomain.com" />
</intent-filter>
Step 3 - Resolve the link inside your app
Your app receives the full URL (https://yourdomain.com/abc123). Look up what the slug points to with the API:
curl https://u2l.ai/api/v1/links/yourdomain.com/abc123 \
-H "Authorization: Bearer u2l_live_your_api_key"
The response includes destination, title, and every option set on the link - route the user inside your app from there.
Step 4 - Create app links
Create links from App Links in the dashboard sidebar (or via the API with appFallback: "store"). Pick the app domain, paste the destination web URL, done - the routing (app → store → web) is built in. Regular links on the same domain keep behaving like normal web links.
On Android the Play Store URL carries the original link:
&referrer=u2l_link%3Dyourdomain.com%2Fabc123
Read it after install with the Install Referrer library and open the content the visitor originally tapped. iOS has no referrer equivalent - the App Store opens without link context (deferred deep linking requires an in-app SDK, which U2L intentionally does not inject).
Verify it works
# Both should return JSON (404 means no app config saved for that host)
curl https://yourdomain.com/.well-known/apple-app-site-association
curl https://yourdomain.com/.well-known/assetlinks.json
- Android:
adb shell pm verify-app-links --re-verify com.yourco.app, then check withadb shell pm get-app-links com.yourco.app- the domain should showverified. - iOS: reinstall the app after the association file is live (iOS fetches it at install time through Apple’s CDN, which can cache for a few hours). Long-press a link → “Open in app” appearing confirms the association.
- Tapping a link typed directly into the browser address bar never opens the app - that is OS behavior, not a configuration problem. Test by tapping links inside Notes, Messages, or another app.
Good to know
- Association is per domain: the whole domain maps to one app, so use a dedicated domain or subdomain (e.g.
go.yourco.comoryourco.u2l.ai) for app links. - Configuring an app never changes existing links - only links with App Store Fallback switched on behave differently, and only for mobile visitors without the app.
- Store fallback composes with retargeting pixels: the pixel page fires first, then continues to the store.
- Clearing both platforms in the Mobile app dialog removes the configuration and the association files.