App Links open the browser, autoVerify missing

App Links need android autoVerify true and a complete intent filter. Fix missing autoVerify, BROWSABLE or https so Android 12 stops opening the browser.

SymptomOn Android 12 and later, links to your domain open the browser even though assetlinks.json is correct.
Likely causeThe intent filter lacks android autoVerify true, the BROWSABLE category, or the http and https data schemes.
FixAdd autoVerify, VIEW, DEFAULT, BROWSABLE and http plus https data elements to the filter, reinstall and re-verify.

Short answer: Android only verifies App Links for intent filters with android:autoVerify="true". The filter also needs the VIEW action, DEFAULT and BROWSABLE categories, and <data> for http and https with your host. On Android 12 and later, an unverified app does not get web links at all; they go to the browser.

What is happening

autoVerify: the android:autoVerify="true" attribute on an intent filter that tells Android to check assetlinks.json for the filter's hosts at install time.

Google says "The android:autoVerify="true" attribute is required for App Links." Verification runs on install on Android 6.0 and later when at least one filter has it. Without it, your file is never checked.

Android 12 made this stricter. Google's behaviour change notes say a generic web intent "resolves to an activity in your app only if your app is approved for the specific domain", otherwise it "resolves to the user's default browser app instead".

Why does this happen?

Filters copied from custom scheme deep link examples often lack the attribute, the category or the https data. Each piece matters:

  • No autoVerify: Android never tries to verify the hosts.
  • No BROWSABLE: Google says "Without it, clicking a link in a browser cannot resolve to your app."
  • Missing scheme: the filter needs both http and https. Google's sample manifest warns: "Do not include other schemes, as this will prevent verification."
  • Merged data elements: Google notes that multiple <data> elements in one filter are merged into every combination, so mixing hosts or schemes in one filter can claim more than you meant.

How to confirm it

  1. Open AndroidManifest.xml and find the filter for your web links.
  2. Check for android:autoVerify="true", android.intent.action.VIEW, DEFAULT and BROWSABLE.
  3. On a device, run adb shell pm get-app-links com.example.app. A domain missing from the output, or with a state other than verified, points to the filter or the file.
  4. Use Android Studio's App Links Assistant (Tools > App Links Assistant) to validate the configuration.

How to fix it

  1. Add android:autoVerify="true" to the filter.
  2. Include the VIEW action and both DEFAULT and BROWSABLE categories.
  3. Add <data> for http and https with your host. Keep custom schemes in a separate filter.
  4. Use separate filters for distinct scheme and host combinations.
  5. Reinstall the app, wait at least 20 seconds, then run adb shell pm set-app-links --package com.example.app 0 all, adb shell pm verify-app-links --re-verify com.example.app, and adb shell pm get-app-links com.example.app.
<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="http" />
    <data android:scheme="https" />
    <data android:host="example.com" />
</intent-filter>

Make sure the file side is right with curl -I https://example.com/.well-known/assetlinks.json and Google's Statement List tester. The Android App Links setup guide walks through both halves, and one host fails covers apps with several domains.

FAQ

Common questions

Is autoVerify required for App Links?

Yes. Google states the attribute is required for App Links, and without it Android does not check your assetlinks.json at install.

Why did links stop opening my app after Android 12?

From Android 12, web intents only go to an app approved for that domain. Apps that relied on the chooser without verification now see links go to the browser.

Can I put my custom scheme in the same filter?

Google's sample manifest says not to include other schemes, as this will prevent verification. Put custom schemes in their own filter.

My app targets a lower SDK. Does Android 12 verification still apply?

Google says the updated verification applies automatically when the app targets Android 12 or higher. Apps targeting lower versions can enable it for testing with `adb shell am compat enable 175408749 com.example.app`.

What are UTM parameters?

UTM parameters are tags added to the end of a link, such as utm_source and utm_campaign, that tell analytics tools where a visit came from. They let you see which campaign, channel and ad brought each visitor.

Which UTM parameters are required?

Use utm_source, utm_medium and utm_campaign on every campaign link. utm_term and utm_content are optional and help you compare keywords or ad variants.