Android App Links
Android App Links let your app open directly from web URLs — no disambiguation dialog asking which app to use. When configured correctly, tapping a link opens your app instantly.
What you'll learn
- How Android App Links differ from deep links
- Configuring your Digital Asset Links file
- Verifying your app links configuration
Deep links vs. App Links
Android has multiple ways to handle links:
Standard deep links (URL schemes)
yourapp://product/123
- Custom scheme, not a real website
- Shows "Open with..." dialog if multiple apps register
- Can be hijacked by malicious apps
Android App Links
https://yoursite.com/product/123
- Standard HTTPS URLs
- Opens your app directly, no dialog
- Verified ownership prevents hijacking
Android App Links are verified deep links. Google confirms you own the domain, so Android trusts your app to handle those URLs without asking the user.
How verification works
- App declares intent — Your app's manifest lists URLs it handles
- assetlinks.json hosted — Your domain serves a Digital Asset Links file
- Google verifies — At install time, Android checks the file matches your app
- Links work seamlessly — Verified links open your app directly
The Digital Asset Links file
The DAL file proves you own the domain. It lives at:
https://yourdomain.com/.well-known/assetlinks.json
Example assetlinks.json:
[{
"relation": ["delegate_permission/common.handle_all_urls"],
"target": {
"namespace": "android_app",
"package_name": "com.yourcompany.app",
"sha256_cert_fingerprints": [
"AA:BB:CC:DD:EE:FF:00:11:22:33:44:55:66:77:88:99:AA:BB:CC:DD:EE:FF:00:11:22:33:44:55:66:77:88:99"
]
}
}]
Key fields
| Field | Description |
|---|---|
package_name | Your app's package name |
sha256_cert_fingerprints | SHA-256 fingerprint of your signing certificate |
You need different fingerprints for debug and release builds. For production, use your upload key or app signing key fingerprint from Google Play Console.
ULink handles assetlinks.json for you
When you configure your Android app in ULink:
- Enter your Package Name and SHA-256 fingerprint
- ULink automatically generates and serves the DAL file
- Your custom domain (or
ulink.to) is ready for App Links
Getting your SHA-256 fingerprint
From debug keystore
keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android
From release keystore
keytool -list -v -keystore your-release-key.keystore -alias your-alias
From Google Play Console
Go to Release → Setup → App signing → App signing key certificate → SHA-256
App-side configuration
1. Update AndroidManifest.xml
Add intent filters to your main Activity:
<activity android:name=".MainActivity">
<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="/" />
</intent-filter>
</activity>
The android:autoVerify="true" attribute triggers the verification process.
2. Handle incoming links
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val uri = intent?.data
if (uri != null) {
handleDeepLink(uri)
}
}
override fun onNewIntent(intent: Intent?) {
super.onNewIntent(intent)
intent?.data?.let { handleDeepLink(it) }
}
intent.data URI in your Activity. Parse path segments and query parameters to determine the destination.Testing App Links
Verify the assetlinks.json
curl https://yourdomain.com/.well-known/assetlinks.json
Use Google's verification tool
Visit: https://developers.google.com/digital-asset-links/tools/generator
Enter your domain and package name to check if verification will succeed.
Test with adb
adb shell am start -a android.intent.action.VIEW \
-c android.intent.category.BROWSABLE \
-d "https://yourdomain.com/test"
Check verification status
adb shell pm get-app-links com.yourcompany.app
Look for verified status for your domain.
Troubleshooting
"Open with..." dialog still appears
- Verification may not have completed — uninstall and reinstall the app
- Check that
android:autoVerify="true"is set - Ensure assetlinks.json is served over HTTPS with no redirects
Verification fails
- SHA-256 fingerprint mismatch — double-check the fingerprint
- assetlinks.json not accessible — verify the URL returns 200
- Multiple fingerprints needed — add both debug and release fingerprints
Works on some devices, not others
- Some OEMs modify default browser behavior
- Older Android versions (pre-6.0) don't support App Links
- Check that the user hasn't disabled the app as a default handler
Users can disable app link handling in Settings → Apps → Your App → Open by default. If users report links not working, have them check this setting.
Quick recap
- Android App Links provide verified, seamless deep linking
- ULink automatically generates and serves your assetlinks.json
- Add
autoVerify="true"to your intent filter - Include SHA-256 fingerprints for both debug and release builds
- Test with adb and Google's verification tool