Android深层链接省略了某些网址

时间:2017-01-02 06:32:07

标签: android android-manifest deep-linking

我已经成功实现了与我的应用程序的深层链接,但我遇到了问题。

<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添加了我需要捕获的所有网址,并使用android:path: "/"来捕获我的主页的网址,即{{3} }

 <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/">

2 个答案:

答案 0 :(得分:8)

Android deep linking mechanism未提供明确排除某些网址的方法:您可以either明确包含android:path的路径,包含与android:pathPrefix前缀匹配的路径或匹配带有android:pathPattern的通配符,您可以使用*.*

在您的情况下,您必须使用"/"并拥有每个链接到您的应用(包括您的主页)打开的网站,或者让每个深层链接共享一个共同点前缀。

您还可以查看airbnb的DeepLinkDispatch图书馆,其似乎是allow excluding specific URLs

答案 1 :(得分:4)

如果我正确理解您的问题,您希望从特定网址列表中排除特定网址。你尝试过的是一个很好的方法。

android:pathPattern并不像你所说的那样理解复杂的正则表达式模式。

我认为解决问题的唯一方法是更改​​要省略的网址。更改主机或该网址的一部分,或将名称example.com更改为example2.com/hello/redirect/