Android app links have been verified. But, still disambiguation dialog shows up

Viewed 3792

When I click on the link: https://example.com/abcd on android version 6/7/8 it shows disambiguation dialog. We have already verified domain by placing json at: https://example.com/.well-known/assetlinks.json. I've done everything as per the documentation and still the link doesn't open without disambiguation. Please help me find what I'm missing.

Code in manifest:

<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="example.com"
        android:pathPattern="/abcd"
    />
</intent-filter>
6 Answers

Late to the party but I too experienced the disambiguation always popping up. For those who haven't managed to resolve this yet (or to come), go to Logcat and search for "IntentFilterIntentOp". You should be seeing something like Verification 8 complete. Success:true. Failed hosts:. This may fail (Verifying IntentFilter. verificationId:8 scheme:"https" hosts:"example.co.za" package:"za.co.example.qa".) if you've uploaded your assetlinks.json file to one domain whilst it's not accessible on other or subdomains that you've registered in your intent-filter.

It's also worth mentioning that your App would have to have been launched at least once before in order for "IntentFilterIntentOp" to perform the necessary verification. Accessing a link via App Link Testing in Android Studio should thereafter automatically open your app without the disambiguation dialog.

update as of 2021 with Android 12:

Android changed web intent resolution policy that effects link handling, if you follow all the new requirements your app will be given a chance if not browser will handle those, more on this here: web intent resolution requirements

/////////////////////Below behavior might still apply today//////////////////////

The Caveat here is if you install the app through playstore the default "link-handling policy" of the application with registered domains like www.example.com is set to "Handle in the app", which will open the app directly subject to intent filter verification without any disambiguation dialogues.

If you install the app by means other than playstore like through adb even though you sign it with keystore the default link handling policy is set to "Always ask" which will show disambiguation dialog even though the intent-filter verification passes for your app link.

Please try to add autoVerify="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"
        android:host="example.com"
        android:pathPattern="/abcd"
    />

you can try like this, both http and https:

<activity
        android:name=".ui.MainActivity"
        android:launchMode="singleTask"
        android:screenOrientation="portrait">
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.BROWSABLE" />
            <category android:name="android.intent.category.DEFAULT" />
            <data
                android:host="www.oschina.net"
                android:scheme="http" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.BROWSABLE" />
            <category android:name="android.intent.category.DEFAULT" />
            <data
                android:host="www.oschina.net"
                android:scheme="https" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.BROWSABLE" />
            <category android:name="android.intent.category.DEFAULT" />
            <data
                android:host="my.oschina.net"
                android:scheme="http" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.BROWSABLE" />
            <category android:name="android.intent.category.DEFAULT" />
            <data
                android:host="my.oschina.net"
                android:scheme="https" />
        </intent-filter>
    </activity>

Got the same issue. Take a look at your sha256 fingerprint. If you test applinks with debug version of the app then you have to place the fingerprint for debug version. You can do it in Android Studio - Tools - App Links Assistant - Associate website.

When you run your app with Android studio, it is installed a debug APK on your device which might match the live config (which is for release APK or bundle) on your branch dashboard.

To handle de the debug (or test) mode in branch this is what I did

  1. Setup test configuration in your branch dashboard:

    • On the top left on the dashboard there is a switch to access the test mode, click on it and fill the form for the test config.
    • Next create a debug link. The field values should be the same as for a live (release) mode link. the only difference the generated test link contains a prefix yourapp.test-app.link/xxxxx
  2. Create two Android manifest files for each type of APK or bundle:

    • app/src/debug/AndroidManifest.xml <- for debug APK or bundle
    • app/src/main/AndroidManifest.xml <- for release APK or bundle
  3. Do the Branch SDK setup on both two manifest files

You should now be able to use the debug link without the disambiguation prompt showing

Related