Android上的深层链接无法正常工作。

8
我正在按照Android开发文档中的创建应用程序内容的深度链接指南,为Android应用程序中的Activity创建深度链接。
在新的应用程序项目中,我已经按照该教程中的精确指示指定了Activity。
<activity
android:name="com.example.android.GizmosActivity"
android:label="@string/title_gizmos" >
<intent-filter android:label="@string/filter_view_http_gizmos">
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />
    <!-- Accepts URIs that begin with "http://www.example.com/gizmos” -->
    <data android:scheme="http"
          android:host="www.example.com"
          android:pathPrefix="/gizmos" />
    <!-- note that the leading "/" is required for pathPrefix-->
</intent-filter>
<intent-filter android:label="@string/filter_view_example_gizmos">
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />
    <!-- Accepts URIs that begin with "example://gizmos” -->
    <data android:scheme="example"
          android:host="gizmos" />
</intent-filter>
</activity>

当我使用adb shell am start -W -a android.intent.action.VIEW -d "example://gizmos" com.example.android测试时,它可以正常工作。手机上的操作系统会启动该应用程序。
但是,当我通过chrome导航到example://gizmos进行测试时,该应用程序没有启动,chrome只是对该URI进行了谷歌搜索。为什么它不起作用呢?
(我正在使用Nexus 5X API 26的Android模拟器。)

你能把多个intentfilter标签移除,只留一个,并且把多个data标签放在里面吗? - Amjad Khan
1
根据Benjamin的回答,即使Chrome不遵循地址栏中提供的深链接,我也可以这样做,但这似乎不太有帮助。我需要通过托管网页来测试这一点。此外,深链接文档指出,将多个“intentfilter”合并为一个具有多个“data”的单一过滤器具有不同的含义,例如:“虽然在同一过滤器中包含多个<data>元素是可能的,但当您的意图是声明唯一的URL时,创建单独的过滤器非常重要”。 - mipnw
1个回答

9
这是由于Chrome不会在您手动在地址栏中键入链接时遵循深度链接。有关更多信息,请参见此答案
测试深度链接的最简单方法是将链接输入到Android消息应用程序中。发送消息后,您可以单击链接。
您还可以在某个地方托管一个包含您的深度链接的页面。

2
我尝试了消息应用程序,当我发送一个带有http协议的URI给自己时,链接是可点击的并且可以正常工作!由于某种原因,在文本消息中使用示例协议不会显示为可点击的链接,因此我无法测试example://gizmos,但我没有理由认为它不能像http://www.example.com/gizmos一样正常工作。谢谢! - mipnw

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接