如何使用PathPattern来创建Android DeepLink Apps?

时间:2018-09-21 03:19:23

标签: android deep-linking permalinks

我已阅读有关在Android Studio 3.0中创建深度链接并使用应用程序链接服务的文档。它非常简单且易于理解,但是当我的URL没有前缀路径时,我一点问题都没有。例子:

  

https://example.com/ / amp

没有前缀,它是直接的url模式。 当我使用正则表达式

  

^ [a-z0-9] +(?:-[a-z0-9] +)* $

它不起作用,错误显示为

  

该网址未映射到任何活动

当我只使用星号时,例如:

  

https://example.com/ * / amp

显示错误。我陷入了这一步,我检查了很多有关Deeplink的教程,并且始终使用pathPrefix而不是pathPattern。

请有人帮我。非常感谢你

1 个答案:

答案 0 :(得分:2)

这是android深层链接中的一个常见缺点,它仅支持*.正则字符。在Adnroid docscan be observed in source code中提到过。

来自文档

  

有关这三种模式的更多信息,请参见   PATTERN_LITERAL,PATERN_PREFIX和   PATTERN_SIMPLE_GLOB在PatternMatcher类中。

PATTERN_SIMPLE_GLOB用于正则表达式,它说仅匹配

  

/ **        *模式类型:给定的模式用        *简单的glob语法,用于与要测试的字符串进行匹配。        *使用这种语法,您可以使用'*'字符来匹配零或        *之前更多次出现该角色。如果        * '.'之前的字符将与任何字符匹配。性格        * '\'可以用作转义符。这实际上仅提供“ *”        *普通正则表达式的通配符部分。        * /

     

public static final int PATTERN_SIMPLE_GLOB = 2;

因此仅允许*.\。其他模式文字+,?等的用法;将导致失败。

您可以使用工作选项,也可以使用

https://example.com/./....*

....*至少3个字符,然后.*表示0个或更多字符

<activity
    android:name="packagename.ActivityName" >
    <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"
              android:pathPattern="/./....*" />
        <!-- note that the leading "/" is required for pathPrefix-->
    </intent-filter>
</activity>