For MarketersFor DevelopersFor Product
7 min read

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
Key Concept

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

  1. App declares intent — Your app's manifest lists URLs it handles
  2. assetlinks.json hosted — Your domain serves a Digital Asset Links file
  3. Google verifies — At install time, Android checks the file matches your app
  4. 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

FieldDescription
package_nameYour app's package name
sha256_cert_fingerprintsSHA-256 fingerprint of your signing certificate
Gotcha

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:

  1. Enter your Package Name and SHA-256 fingerprint
  2. ULink automatically generates and serves the DAL file
  3. 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) }
}
Kotlin: Use the 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
Gotcha

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