Varun Ramani
Varun Ramani

Reputation: 1569

Android Deep Linking with multiple query parameters

I'm trying to deep link my app and have implemented the following in my AndroidManifest.xml to open the proper activity.

<activity
    android:name=".ui.activities.MyActivity"
    android:label="@string/title_activity"
    android:screenOrientation="portrait">
    <!-- ATTENTION: This intent was auto-generated. Follow instructions at
    https://g.co/AppIndexing/AndroidStudio to publish your Android app deep links. -->
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />

        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <!-- ATTENTION: This data URL was auto-generated. We recommend that you use the HTTP scheme.
        TODO: Change the host or pathPrefix as necessary. -->
        <data
            android:host="myHost"
            android:scheme="myCustomScheme" />
    </intent-filter>
</activity>

And I'm testing the activity from adb using

adb shell am start -W -a android.intent.action.VIEW -d "myCustomScheme://myHost?key=category_parent_id&value=92&title=test" com.myApp.android

The Activity is opening but the URI which is passed to the activity in the intent is only

myCustomScheme://myHost?key=category_parent_id

Its skipping everything after '&'

I did look up here on SO but didn't find anything with multiple query parameters.

Upvotes: 106

Views: 58324

Answers (4)

Khizar Hayat
Khizar Hayat

Reputation: 3805

Just add \ before & sign when testing with adb.

Copy this:

adb shell am start -W -a android.intent.action.VIEW -d "myCustomScheme://myHost?key=category_parent_id\&value=92\&title=test" com.myApp.android

Upvotes: 260

Tom&#225;s Mehdi
Tom&#225;s Mehdi

Reputation: 81

For osx / mac users with android studio

Load adb

export PATH="/Users/your_user/Library/Android/sdk/platform-tools":$PATH

Check that the app is recognized

adb shell am start -n com.package/.activities_package_name.MainActivity

Test deeplink

adb shell 'am start -W -a android.intent.action.VIEW -d "myCustomScheme://myHost?key=category_parent_id\&value=92\&title=test" com.myApp.android'

Don't forget the ' '

Upvotes: 4

Yueh-Ming Chien
Yueh-Ming Chien

Reputation: 149

Just encode your url parameters and it will work. It might be google's parsing bug.

Before:

adb shell am start -W -a android.intent.action.VIEW -d "myCustomScheme://myHost?key=category_parent_id&value=92&title=test" com.myApp.android

After:

adb shell am start -W -a android.intent.action.VIEW -d "myCustomScheme://myHost?key%3Dcategory_parent_id%26value%3D92%26title%3Dtest" com.myApp.android

Upvotes: 2

Simon Marquis
Simon Marquis

Reputation: 7516

You can wrap the shell command with simple quotes (to avoid modifying the uri content):

adb shell 'am start -d "myCustomScheme://myHost?key=category_parent_id&value=92&title=test"'

Upvotes: 62

Related Questions