初識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.創建指向應用內容的深層鏈接

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章