Android深层链接:仅在没有路径时匹配url

时间:2016-09-01 08:34:50

标签: android android-manifest deep-linking

给出以下URL:

1. www.example.com

2. www.example.com/a

通过deeplinking,我希望我的应用仅对1 2做出反应。

            <data
                android:host="*.example.com"
                android:pathPrefix="/"
                android:scheme="http"/>

当然,这会抓住所有www.example.com/...个网址,如何只匹配www.example.com而没有任何路径而且不匹配www.example.com/a

5 个答案:

答案 0 :(得分:1)

使用&#39;路径&#39;而不是&#39; pathPrefix&#39;或者&#39; pathPattern&#39;工作,所以:

        <data
            android:host="*.example.com"
            android:path="/"
            android:scheme="http"/>

匹配www.example.com以及www.example.com/,但不匹配www.example.com/a,这正是我想要的。

答案 1 :(得分:0)

我遇到了同样的问题,并找到了匹配裸域的解决方案,例如www.example.com

<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="www.example.com"/>
</intent-filter>

关键是添加intent-filter而不添加任何path属性。

答案 2 :(得分:0)

这是对我有用的方法,将路径设置为空,并包括一个工具:忽略以避免出现皮棉错误。

<data
     android:host="*.example.com"
     android:path=""
     android:scheme="http"
     tools:ignore="AppLinkUrlError"
            />

答案 3 :(得分:0)

老问题,但对我有用的是添加两个数据输入

            <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:host="*.example.com"
                    android:path=""
                    tools:ignore="AppLinkUrlError"
                    android:scheme="https" />

                <data
                    android:host="*.example.com"
                    android:path="/"
                    android:scheme="https" />
            </intent-filter>

仅添加其中一个即可处理 www.example.comwww.example.com/。 您还可以将它们放在不同的意图过滤器中。

答案 4 :(得分:0)

如果您想同时匹配 http://example.com/http://example.com,我可以确认@Anigif 评论:使用包含 data 的单个 path="/" 元素不再起作用,因为它只匹配 http://example.com/,但不匹配 http://example.com

但是,向同一个意图添加两个数据元素是有效的:

<data android:scheme="http" android:host="*.example.com" android:path="/"/>
<data android:scheme="http" android:host="*.example.com" android:path=""/>

这匹配 http://example.com/http://example.com 但不匹配 http://example.com/a