当单击的链接或编程请求调用Web URI
意图时,Android
系统将按顺序尝试以下每个操作,直到请求成功为止:
1、打开用户首选的可以处理URI
的应用程序(如果已指定)。
2、打开唯一可以处理URI
的可用应用程序。
3、允许用户从对话框中选择应用程序。
请按照以下步骤创建和测试指向您内容的链接。 您还可以使用Android Studio
中的App Links Assistant
添加Android App Links
。
一、为传入链接添加意图过滤器
要创建指向应用内容的链接,请在清单中添加包含这些元素和属性值的intent过滤器:
指定ACTION_VIEW
意图操作,以便可以从Google
搜索访问意图过滤器。
添加一个或多个标记,每个标记代表一种解析为活动的
URI
格式。 至少,标记必须包含
android:scheme
属性。
您可以添加更多属性以进一步优化活动接受的URI
类型。 例如,您可能有多个活动接受类似的URI,但这些活动仅根据路径名而有所不同。 在这种情况下,使用android:path
属性或其pathPattern
或pathPrefix
变体来区分系统应为不同的URI
路径打开哪个活动。
包括BROWSABLE
类别。 为了可以从Web
浏览器访问intent过滤器,需要它。 没有它,单击浏览器中的链接无法解析为您的应用程序。
还包括DEFAULT
类别。 这允许您的应用响应隐式意图。 如果没有这个,只有在intent指定您的应用程序组件名称时才能启动活动。
以下XML代码段显示了如何在清单中为深度链接指定intent过滤器。 URI“example:// gizmos”
和“http://www.example.com/gizmos”
都解析为此活动。
请注意,两个intent
过滤器仅因元素而不同。 虽然可以在同一个过滤器中包含多个
元素,但是当您打算声明唯一的
URL
(例如方案和主机的特定组合)时,创建单独的过滤器非常重要,因为多个元素在 实际上,相同的意图过滤器合并在一起,以考虑其组合属性的所有变体。 例如,请考虑以下事项:
...
它似乎只支持https://www.example.com
和app://open.my.app
。 但是,它实际上支持这两个,加上这些:app://www.example.com
和https://open.my.app
。
一旦您将具有活动内容URI
的意图过滤器添加到应用清单,Android
就能够在运行时将任何具有匹配URI
的Intent
路由到您的应用。
要了解有关定义意图过滤器的详细信息,请参阅允许其他应用程序启动活动。
二、从传入意图中读取数据
一旦系统通过意图过滤器启动您的活动,您可以使用Intent
提供的数据来确定您需要呈现的内容。 调用getData()
和getAction()
方法来检索与传入的Intent关联的数据和操作。 您可以在活动的生命周期中随时调用这些方法,但通常应在早期回调期间(例如onCreate()
或onStart()
)执行此操作。
这是一个片段,展示了如何从Intent中检索数据:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Intent intent = getIntent();
String action = intent.getAction();
Uri data = intent.getData();
}
请遵循以下最佳做法以改善用户体验:
深层链接应该将用户直接带到内容,而不会出现任何提示,插页式页面或登录。 确保用户可以查看应用程序内容,即使他们之前从未打开过该应用程序。 可以在后续交互时或从
Launcher
打开应用程序时提示用户。 这与网站的首次免费体验相同。按照“使用后退和上传导航”中所述的设计指南,以便您的应用在用户通过深层链接进入应用后符合用户对后向导航的期望。
三、测试你的深层链接
您可以使用Android Debug Bridge
和activity manager
(am)工具来测试您为深层链接指定的intent
过滤器URI
是否解析为正确的app
活动。 您可以对设备或模拟器运行adb
命令。
使用adb测试意图过滤器URI的一般语法是:
$ adb shell am start
-W -a android.intent.action.VIEW
-d
例如,以下命令尝试查看与指定URI关联的目标应用程序活动。
$ adb shell am start
-W -a android.intent.action.VIEW
-d "example://gizmos" com.example.android
您在上面设置的清单声明和意图处理程序定义了您的应用程序和网站之间的连接以及如何处理传入链接。 但是,为了让系统将您的应用视为一组URI的默认处理程序,您还必须请求系统验证此连接。 下一课将介绍如何实施此验证。