前言
DeepLink,深度鏈接技術(shù),類似于web開發(fā)領(lǐng)域不僅僅是通過鏈接打開一個界面邪意,而是打開界面的某個具體內(nèi)容。常用于web端喚起app時反砌,傳遞參數(shù)直接打開確定的界面雾鬼,如通過京東的分享出去的商品詳情頁,實(shí)現(xiàn)在京東app中打開于颖。
在移動開發(fā)領(lǐng)域呆贿,是指app在處理特定的url時能夠直接跳轉(zhuǎn)到對應(yīng)的內(nèi)容頁面或者觸發(fā)特定的邏輯。這樣可以在web端切換app時通過參數(shù)傳遞保留了當(dāng)前的上下文狀態(tài),又可以借用web端的優(yōu)勢做入,更利于傳播冒晰,可利用搜索引擎的索引,增加app的日活和下載量等竟块。
移動端實(shí)現(xiàn)deeplink于是就有了Universal Link壶运、App Link、URL schemes等
Android配置scheme
如配置WebActivity完整的打開鏈接為openapp://test:8000/detail
浪秘,需要在AndroidManifest.xml配置
<activity android:name=".WebActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<!--需要被js調(diào)起必須設(shè)置-->
<category android:name="android.intent.category.BROWSABLE" />
<!--協(xié)議部分-->
<data
android:host="test"
android:path="/detail"
android:port="8000"
android:scheme="openapp" />
</intent-filter>
</activity>
協(xié)議部分:(類比于http://locahost:8080/home)
-
android:scheme
:協(xié)議名蒋情,類似于http
-
android:host
:主機(jī)名,類似于locahost
-
android:port
:端口名耸携。類似于8080
中的端口 -
android:path
:路徑名棵癣,類似于home
- 還可以配置imei等等。結(jié)構(gòu)為
<scheme>://<host>:<port>/[<path>|<pathPrefix>|<pathPattern>]
Android端調(diào)起
通過指定Intent
的Action為Intent.ACTION_VIEW
夺衍,傳入解析的Uri
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("openapp://test:8000/detail?title=電視影音&url=https://u.jd.com/1dfFwO"));
startActivity(intent);
傳遞參數(shù)的方法跟web端一樣狈谊,通過問號?
分隔,參數(shù)名和值之間使用等號=
連接沟沙,多個參數(shù)之間使用&
拼接河劝。
Android端參數(shù)接收
Uri uri = getIntent().getData();
if (uri != null) {
// 完整的url信息
String totalUrl = uri.toString();
Log.i(TAG, "完整url: " + totalUrl);
// scheme 協(xié)議
String scheme = uri.getScheme();
Log.i(TAG, "scheme: " + scheme);
// host 主機(jī)
String host = uri.getHost();
Log.i(TAG, "host: " + host);
//port 端口
int port = uri.getPort();
Log.i(TAG, "port: " + port);
// 訪問路徑
String path = uri.getPath();
Log.i(TAG, "path: " + path);
// 獲取所有參數(shù)
String query = uri.getQuery();
Log.i(TAG, "query: " + query);
//獲取指定參數(shù)值
String title = uri.getQueryParameter("title");
Log.i(TAG, "title: " + title);
String url = uri.getQueryParameter("url");
Log.i(TAG, "url: " + url);
}
喚起后可以看見打印的日志信息:
拿到參數(shù)之后就可以進(jìn)行后續(xù)的使用操作啦
web端喚起
直接當(dāng)做一個普通的連接形式,直接跳轉(zhuǎn)
window.location = "openapp://test:8000/detail?title=電視影音&url=https://u.jd.com/1dfFwO";
或者設(shè)置超鏈接等待用戶點(diǎn)擊
<a href="openapp://test:8000/detail?title=電視影音&url=https://u.jd.com/1dfFwO">在app中打開</a>
?? 更多好文歡迎關(guān)注我的公眾號~