Universal Links Troubleshooting

Find out why links aren’t opening your app

Start with the association file on your public domain, then compare its app details with the installed app. These checks cover both iOS Universal Links and Android App Links.

First check

Where is your association file hosted?

01

Lativiq-hosted (dynamic)

The public domain must resolve to Lativiq or a reverse proxy that forwards the original Host header. Managed hosting is available on the Growth plan and above.

02

Your own web server (static)

Host the generated files on the public link domain and keep them in sync when the app IDs, package name, or signing certificates change.

Quick checks

  • The link domain is the same domain configured in Lativiq and in the mobile app.
  • Both association-file URLs are tested with HTTPS and the exact /.well-known path.
  • The JSON contains the app ID or package name and signing certificate used by the installed app.

Public file and domain

Check the exact URLs your platform fetches

Replace the example host with the domain users actually tap. These commands show the HTTP status and headers as well as the response body:

curl -i https://go.yourcompany.com/.well-known/apple-app-site-association
curl -i https://go.yourcompany.com/.well-known/assetlinks.json

For the platform you’re setting up, confirm the response is 200 and contains valid JSON for the expected app. The iOS URL has no file extension. Both files must be served directly over HTTPS without a redirect.

Common status clues: 404 usually means the path or host is not routed to the file; 403 on dynamic hosting may indicate the plan doesn’t include managed hosting; a redirect or non-JSON response means the public endpoint needs attention.

Configuration values

Compare the app identifiers exactly

iOS

  • The AASA App ID must be TeamID.BundleID.
  • The Team ID and Bundle ID must match the signed app.
  • The file’s allowed URL patterns must include the link path.

Android

  • The package name must match the app’s application ID.
  • The SHA-256 fingerprint must match the certificate signing the installed app.
  • With Play App Signing, use the app signing certificate—not only the upload key.

App-side setup

Check that the installed app claims the domain

  • iOS: The app has the Associated Domains capability and an applinks:go.yourcompany.com entitlement, signed into the build installed on the device.
  • Android: The app has an HTTPS intent filter with android:autoVerify="true"; its host matches the domain in assetlinks.json.

After changing signing, entitlements, manifest entries, or hosted files, install the updated app build and repeat verification.

Platform verification

Verify on a device and test a real link

Run Verify Domain in the Lativiq configuration to check the hosted setup. On Android, inspect the device’s app-link state with:

adb shell pm get-app-links com.yourcompany.app

Then tap a matching HTTPS link from another app, such as a message. Test on a device with the app installed; entering the URL directly in a browser may not trigger app handoff.