Why Mobile Deep Linking Matters
Mobile deep linking routes users directly to specific in-app content rather than a generic home screen. According to Branch.io data, apps using deep links see up to 66% higher engagement and 2× better retention compared to those relying on standard links.
Traditional URI schemes (myapp://) still exist, but they lack verification, offer no fallback, and can be hijacked. That’s why Apple introduced Universal Links (iOS 9+) and Google introduced App Links (Android 6+)—both use standard HTTPS URLs verified against your domain.
Setting Up iOS Universal Links
Step 1: Create the Apple App Site Association File
Host a JSON file at https://yourdomain.com/.well-known/apple-app-site-association (no .json extension, served with Content-Type: application/json):
{
"applinks": {
"apps": [],
"details": [
{
"appID": "TEAMID.com.example.myapp",
"paths": ["/products/*", "/offers/*"]
}
]
}
}
Step 2: Enable Associated Domains in Xcode
In your project’s Signing & Capabilities tab, add the Associated Domains capability and enter:
applinks:yourdomain.com
Step 3: Handle Incoming Links
Implement application(_:continue:restorationHandler:) in your AppDelegate or use onOpenURL in SwiftUI to parse the URL path and navigate accordingly.
Setting Up Android App Links
Step 1: Create the Digital Asset Links File
Host a JSON file at https://yourdomain.com/.well-known/assetlinks.json:
[{
"relation": ["delegate_permission/common.handle_all_urls"],
"target": {
"namespace": "android_app",
"package_name": "com.example.myapp",
"sha256_cert_fingerprints": ["AA:BB:CC:..."]
}
}]
You can generate the SHA-256 fingerprint with:
keytool -list -v -keystore my-release-key.keystore
Step 2: Add Intent Filters in AndroidManifest.xml
<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" android:pathPrefix="/products" />
</intent-filter>
The android:autoVerify="true" attribute triggers automatic verification at install time.
Step 3: Parse the Intent
In your Activity’s onCreate or onNewIntent, retrieve the URL via intent.data and route users to the correct screen.
Quick Comparison
| Feature | iOS Universal Links | Android App Links |
|---|---|---|
| Verification file | apple-app-site-association | assetlinks.json |
| Minimum OS | iOS 9 | Android 6.0 |
| Fallback | Opens URL in Safari | Opens URL in browser |
| Disambiguation dialog | No (direct open) | No (with autoVerify) |
Best Practices
- Always serve verification files over HTTPS with a valid certificate.
- Test rigorously: use Apple’s
swcutilor the App Links Assistant in Android Studio. - Keep paths specific—avoid matching
/*on your entire domain unless every URL has in-app content. - Monitor broken links: a single server misconfiguration disables all deep links silently.
At Lueur Externe, our mobile and web architecture team regularly configures deep linking alongside server infrastructure (AWS, Nginx, Cloudflare) to ensure verification files are always accessible and correctly cached.
Conclusion
Implementing iOS Universal Links and Android App Links is no longer optional for apps that depend on web traffic. The setup is straightforward—two JSON files and a few lines of native code—but the server-side configuration and ongoing maintenance require precision.
If you want a seamless deep linking strategy backed by solid infrastructure expertise, Lueur Externe can help. From server configuration to app-side routing, our team ensures every link lands exactly where it should.