初识DeepLink

前言

最近项目涉及DeepLink,虽然平时有遇到过,但是并不知道这个术语,特意了解了下,还是比较少关注官方动态。。。

文章内容大部分来自DeepLink的实现原理,说得很不错。

什么是DeepLink

DeepLink:创建指向应用内容的深层链接,主要应用场景是通过Web页面直接调用Android原生app,并且把需要的参数通过Uri的形式,直接传递给app。

例如:好友在微信中推荐某个京东产品,然后会有是否打开京东app的提示,当我们点击 ‘是’ 的时候就会自动跳转到京东app相关页面。

原理

实际上是Android的隐式启动,通过配置intent-filter中的data属性来匹配
data的主要属性:

  • scheme:协议类型,我们可以自定义,一般是项目或公司缩写,String
  • host:域名地址,String
  • port:端口,int。
  • path:访问的路径,String
  • pathPrefix:访问的路径的前缀,String
  • pathPattern:访问路径的匹配格式,相对于path和pathPrefix更为灵活,String
  • mimeType:资源类型,例如常见的:video/*, image/png, text/plain。\

注意事项:

  • scheme和host不可缺省,否则配置无效;
  • path,pathPrefix,pathPattern一般指定一个就可以了,pathPattern与host不可同时使用;
  • mimeType可以不设置,如果设置了,跳转的时候必须加上mimeType,否则不能匹配到Activity。

data属性实际上是为当前的页面绑定了一个Uri地址,这样就可以通过Uri直接打开这个Activity。
Uri的结构:

<scheme> :// <host> : <port> / [ <path> | <pathPrefix> | <pathPattern> ]

示例:https://zhidao.baidu.com/question/2012197558423339788.html

使用

1.intent-filter基本配置:

<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:host="host"
         android:path="/path"
         android:scheme="xxx" />
</intent-filter>

上述部分除了data部分可根据实际自定义格式外,其他的action、两个category必须要。

2.如何传递参数?
在path后添加?及相关参数和值

xxx://host/path?id=111

app接收:

if (intent != null && intent.data != null) {
    
    
    Log.e("lzp", intent.data.getQueryParameter("id"))
}

3.如何打开这些页面?

 private void gotoDeepLink(Context context, String url) {
    
    
        try {
    
    
            Intent skipIntent = Intent.parseUri(url, Intent.URI_INTENT_SCHEME);
            skipIntent.addCategory("android.intent.category.BROWSABLE");
            skipIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(skipIntent);
        } catch (Exception e) {
    
    
            e.printStackTrace();
        }
    }

更多细节可查阅
1.DeepLink的实现原理
2.DeepLink用法及原理解析
3.创建指向应用内容的深层链接

猜你喜欢

转载自blog.csdn.net/fengyulinde/article/details/106858634