Deep-linking intent does not work

前端 未结 12 1065
旧时难觅i
旧时难觅i 2020-12-07 14:29

I followed the insttructions on https://developer.android.com/training/app-indexing/deep-linking.html, but when I want to trigger the intent through adb with:

相关标签:
12条回答
  • 2020-12-07 15:21

    EDIT:

    Ok first make sure that your package is reachable by adb:

    adb shell am start -n com.example.simon.test/.activities.MainActivity
    

    Then to accept multiple data tags you need different intent filters (that's the way it worked for me unlike all the other examples I've seen on the net). E.g.:

    <intent-filter>
        ...
        <data android:scheme="http"
              android:host="example.com"/>
    </intent-filter>
    <intent-filter>
        ...
        <data android:scheme="http"
              android:host="example.com"
              android:pathPrefix="/gizmos"/>
    </intent-filter>
    

    NOTE that in the above example the pathPrefix starts with a forward slash !

    I am not sure why Google's Docs are so misleading or maybe that was for some different version of adb, but the above changes worked perfectly for me. This helped: Source


    This is how I made the Chrome browser route specific links to my app:

    <activity
        android:name=".activities.DeepLinkActivity"
        android:label="@string/app_name">
        <!-- Accept chrome links -->
        <intent-filter>
            <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"
                  android:host="example.com"
                android:pathPrefix="/"/>
        </intent-filter>
        <!-- Accept adb data flag -->
        <intent-filter>
            <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"
                  android:host="example.com"/>
        </intent-filter>
    </activity>
    

    NOTE The 1st filter works on Google Chrome while the 2nd one works on the ADB.

    NOTE2 The app choice menu won't be shown if the link is entered into the browser's address bar. It has to be a <a href="http://example.com"></a> link in side some page.

    In my opinion everything here is rather blurry and really not how I expected it all to work. But that's how it works on my device. Hope this helps (and works) for you too.

    0 讨论(0)
  • 2020-12-07 15:21

    In my case I have a port 8075 in the URL I removed it and it worked

    0 讨论(0)
  • 2020-12-07 15:23

    Thanks Simas for your response i would like to add some clarification:

    • after testing your activity with this command:

      adb shell am start -n com.example.simon.test/.activities.MainActivity

    • You will need to test your deeplinks ,after adding the intent filter to your AndroidManifest.xml file (lines are below):

      ... ...

    so this is the adb command with which you can test :

    adb shell am start -W -a android.intent.action.VIEW -d "http://example.com/gizmos" com.example.packageid
    

    and

    adb shell am start -W -a android.intent.action.VIEW -d "http://example.com" com.example.pakageid
    
    0 讨论(0)
  • 2020-12-07 15:24

    Use adb shell am start -W -a android.intent.action.VIEW -d "http://example.com/gizmos" com.myapp.android

    it will work.

    0 讨论(0)
  • 2020-12-07 15:29

    First, read @user3249477's answer on this page.

    I just wanted to add that instead of what he wrote, you can condense it by using pathPattern:

    <activity
        android:name=".activities.DeepLinkActivity"
        android:label="@string/app_name">
        <intent-filter>
            <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"
                  android:host="example.com"
                android:pathPattern=".*"/>
        </intent-filter>
    </activity>
    

    The ".*" matches both the empty string and "/", so both cases are covered. If you end up trying to handle multiple scheme's and host's this becomes especially important, so you don't have to spam a powerset of {http, https} X {"", "/"} X {"foo", "bar", etc.}

    0 讨论(0)
  • 2020-12-07 15:29

    if you have not permission issue , it is probably related to API level

    0 讨论(0)
提交回复
热议问题