Skip to content
Casino mobile search, app discovery and deep linking research

Deep linking · Guide

Digital Asset Links File: Hosting and Fields

assetlinks.json is the file that proves to Android that your website trusts your app. Serve it at /.well-known/assetlinks.json on every host, over https, as application/json, with no redirect, and list the SHA-256 fingerprint of every certificate that signs the builds people install.

In short

  • One file per host: www, the bare domain and each subdomain each need their own.
  • List the fingerprint of the key that actually signs releases. With Play App Signing that is Google's key, not only your upload key.
  • Write fingerprints in upper case.
  • Dynamic rules in relation_extensions work on Android 15 and later with Google services; malformed rules are discarded.

The fields, one by one

The file is a JSON array of statements. A minimal statement for one app looks like this; the fingerprint below is a placeholder in the right format:

[
  {
    "relation": ["delegate_permission/common.handle_all_urls"],
    "target": {
      "namespace": "android_app",
      "package_name": "com.example.sportsbook",
      "sha256_cert_fingerprints": [
        "14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"
      ]
    }
  }
]
  • relation: delegate_permission/common.handle_all_urls is the relation App Links verification looks for.
  • target.namespace: android_app for an app.
  • package_name: the application ID in your build, such as com.example.sportsbook.
  • sha256_cert_fingerprints: an array, so it can hold several fingerprints, for example the Play signing key and a key used for another release channel.

If one host serves several apps, for example a casino app and a sportsbook app under the same brand, add one statement per app to the same array.

Hosting rules

Requirements from Android's website association guide
RequirementWhat it means in practice
Pathhttps://domain.name/.well-known/assetlinks.json on each host
Content typeapplication/json
ProtocolReachable over https, even if the intent filters also list http
RedirectsNone. No 301 or 302 on the file, including bare domain to www
HostsOne file per host domain

Two server habits break this on gambling sites more than anywhere else. Geo-blocking rules that answer some requests with a redirect or a block page can catch the verifier, and a content delivery network rule that forces the bare domain to www redirects the file. Exempt /.well-known/ from both. The troubleshooting guide adds one more check: example.com., with a trailing period, should serve the same content as example.com.

Which fingerprints to list

The fingerprint must match the certificate that signed the build on the device. The troubleshooting guide puts it plainly: "If you are using Play App Signing, make sure you're using the signature that Google uses to sign each of your releases." Your upload key is not enough when Google re-signs the app. The same guide lists two quieter faults: a lower-case fingerprint, since "The signature should be in upper case," and a debug-signed build tested against a file that only holds the release fingerprint.

Copy fingerprints from the Play Console or your keystore rather than retyping them, then paste the whole file into the association file linter to catch format slips.

Dynamic rules on Android 15 and later

Android 15 added an optional relation_extensions block that narrows which paths open the app without shipping a new build. It works on Android 15 (API level 35) or later on devices with Google services; Android 14 and earlier ignore it. Place it inside each statement object, next to relation and target.

"relation_extensions": {
  "delegate_permission/common.handle_all_urls": {
    "dynamic_app_link_components": [
      {"/": "/help/*", "exclude": true},
      {"/": "/events/*"},
      {"/": "/bet/*", "?": {"market": "*"}}
    ]
  }
}
  • Matcher keys are / for the path, # for the fragment and ? for a dictionary of query parameters; exclude set to true keeps matching links out of the app.
  • Wildcards: * matches zero or more characters, ? exactly one, ?* one or more.
  • Rules run in order and the first match wins. A link that matches no rule does not open the app, so put exclusions first.
  • Rules can only cover hosts already declared in the manifest. They cannot widen it.
  • Declare one dynamic_app_link_components object per site, relation and app statement. If any field is malformed or empty, Android discards the dynamic rules and falls back to the manifest.

For a sportsbook, this lets you keep a safer gambling or help path on the web while the rest of the site opens in the app, and change that list between releases. The manifest side of the same setup is in the Android App Links setup guide.

How long changes take

Android 15 and later re-check the file in the background: "Changes can take up to seven days to propagate to all end-user devices due to the system's caching and scheduled re-verification." On Android 14 and lower, "The system does not perform periodic background re-verification," so a device's stored result does not refresh on a schedule. Plan file changes ahead of a campaign, and use the Digital Asset Links API to see what Google reads: Record each host as done in the deep link implementation checklist.

https://digitalassetlinks.googleapis.com/v1/statements:list?source.web.site=https://www.example.com&relation=delegate_permission/common.handle_all_urls

How these timings compare with Apple's content delivery network is set out in the comparison of the two association files.

Questions

Can one assetlinks.json file cover several subdomains?

No. Android's documentation says each host domain needs its own file, so www.example.com and help.example.com each serve /.well-known/assetlinks.json.

Should development builds share the production file?

Keep test hosts out of release manifests. The troubleshooting guide notes that non-verifiable links added for testing make Android 11 and lower skip verification of all App Links, and it lists a debug-signed build checked against a file that holds only the release signature as a common failure.

What happens if one dynamic rule is malformed?

Android discards the dynamic rules and falls back to the static rules in the manifest. Check the file with the association file linter before you deploy it.

Sources

  1. Android Developers, Configure website associations and dynamic rules, last updated October 23, 2026.
  2. Android Developers, Troubleshoot App Links, last updated October 23, 2026.
  3. Android Developers, Verify App Links, last updated October 23, 2026.
  4. Android Developers, Test App Links, last updated October 16, 2026.
  5. Google Developers, Digital Asset Links, linked from Android's Configure page; not fetched by us.

How we choose and date sources: data sources.

Questions about deep links on a casino or sportsbook site?

Send a correction, a source or a question about a route that breaks. A person reads every message.

Contact the editors or write to hello@casinodeeplinknotes.online