How Android App Links Differ from Deep Links
Standard Android deep links use custom URL schemes or unverified HTTP URIs. When tapped, Android presents the user with an 'Open with' disambiguation dialog, asking whether to open the browser or the app. Users frequently select the browser or click 'Always', permanently breaking your app opening experience.
Android App Links are verified HTTP(S) URLs that open your installed app immediately without showing a disambiguation dialog. Starting in Android 12, Google enforced strict automatic verification: if your domain fails verification, the OS will only open links in the default browser.
The Digital Asset Links Specification
Android verifies domain ownership by fetching https://yourdomain.com/.well-known/assetlinks.json using strict network requirements: HTTP 200 status, Content-Type application/json, maximum file size under 1MB, zero redirects, and valid TLS certificates trusted by Android CA store.
Here is the standard Assetlinks payload structure generated and served by Deeplio:
[
{
"relation": ["delegate_permission/common.handle_all_urls"],
"target": {
"namespace": "android_app",
"package_name": "com.yourcompany.yourapp",
"sha256_cert_fingerprints": [
"AA:F3:E9:53:DC:7B:8E:31:55:10:5B:C2:21:54:33:9A:B1:34:67:E2:01:43:55:92:10:84:77:E1:92:30:11:AB"
]
}
}
]AndroidManifest.xml Intent Filter Configuration
To trigger Android's domain verification engine, your AndroidManifest.xml must declare android:autoVerify='true' inside the target activity's intent-filter:
<activity
android:name=".MainActivity"
android:exported="true">
<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" />
<data android:host="go.yourcompany.com" />
</intent-filter>
</activity>Verifying and Troubleshooting Android Domain State
Android verifies domains during app installation and package updates. You can verify the verification status on connected devices or emulators using adb:
# Check domain verification state for your package
adb shell pm get-app-links com.yourcompany.yourapp
# Re-trigger domain verification manually
adb shell pm verify-app-links --re-verify com.yourcompany.yourappIf you use Google Play App Signing, Google replaces your upload key with their production signing key. Be sure to register the App Signing key certificate SHA-256 fingerprint from Google Play Console in Deeplio, not just your local debug keystore.
Standard Deep Links vs Verified Android App Links
Why Android 12+ requires certified domain association.
| Capability | Deeplio Edge | Alternative / Legacy |
|---|---|---|
| Domain Verification Zero redirect requirement guaranteed | Instant autoVerify compliance with Anycast CDN | Requires self-managed HTTPS web host |
| Fallback Destination Converts non-installed traffic automatically | Direct Google Play listing fallback | Manual client scripts or 404 page |
Key Implementation Checkpoints
- Include android:autoVerify='true' in your intent-filter.
- Add both development and Google Play App Signing SHA-256 fingerprints.
- Deeplio automatically hosts the valid assetlinks.json on your custom domain.
Ready to deploy branded Smart Links for your mobile app?
Automate your Apple AASA and Android Assetlinks endpoints on your own domain with fast Anycast edge routing. No client SDK required.
Frequently Asked Questions
Can assetlinks.json be served behind a redirect?
No. The Android OS verifier strictly requires an HTTP 200 response with zero redirect hops. Deeplio terminates requests directly on Cloudflare edge workers, serving the JSON immediately.
What happens if a user taps the link on desktop?
Deeplio inspects the User-Agent header at the edge. Desktop requests are routed to your designated web destination or marketing homepage, while mobile Android users launch the app or Google Play.