我已成功实现了对我的应用程序的深层链接,但我遇到了问题。
<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:host="*.example.com"
android:scheme="https"/>
</intent-filter>
此意图过滤器处理所有链接,但我不想捕获某个URL,即
https://www.example.com/hello/redirect/
到目前为止我尝试了什么:
我尝试输入我想要手动捕获的所有网址
<data
android:host="*example.com"
android:scheme="https"
android:pathPrefix="/m/">
<data
android:host="*example.com"
android:scheme="https"
android:pathPrefix="/c/">
<data
android:host="*example.com"
android:scheme="https"
android:pathPrefix="/p/">
...
但后来我的主页网址https://www.example.com
不起作用。
如果我使用
android:pathPrefix="/"
然后这将开始再次捕获所有URL,包括我想省略的URL。
我也尝试过使用android:pathPattern
,但它无法理解像^((?!redirect).)*$
这样复杂的正则表达式,当我在字符串中尝试它时,它可以正常工作。
有谁知道如何省略某些网址?
更新:
正如@PLNech here所建议的,我添加了所有需要使用android:pathPrefix
捕获的URL并使用android:path: "/"
来捕获我的主页的URL,即https://www.example.com/
<data
android:host="*.example.com"
android:scheme="https"
android:path="/"/>
<data
android:host="*example.com"
android:scheme="https"
android:pathPrefix="/m/">
<data
android:host="*example.com"
android:scheme="https"
android:pathPrefix="/c/">
<data
android:host="*example.com"
android:scheme="https"
android:pathPrefix="/p/">
Android deep linking mechanism没有提供明确排除某些URL的方法:你可以使用either明确地包含android:path
路径,包括与android:pathPrefix
匹配前缀的路径,或者使用android:pathPattern
匹配通配符,你可以使用*
或.*
。
在您的情况下,您将不得不使用"/"
并使用您的应用程序(包括您的主页)打开您网站的每个链接,或者让每个深层链接共享一个共同的前缀。
你也可以看看airbnb的DeepLinkDispatch图书馆,它似乎是allow excluding specific URLs。
如果我正确理解您的问题,您希望从特定的URL列表中排除特定的URL。你尝试过的是一个很好的方法。
正如你所说,android:pathPattern
并不了解复杂的正则表达式。
我认为解决问题的唯一方法是更改要省略的URL。更改主机或该URL的一部分,或将名称example.com
更改为,例如,example2.com/hello/redirect/
。