移動應(yīng)用開發(fā)時常遇到應(yīng)用跳轉(zhuǎn)辣往、h5喚起原生頁面等使用場景,所以一個健壯的應(yīng)用需要具備路由的能力坊萝。常見的操作方法需要在manifest中針對每個頁面進(jìn)行配置钻哩,設(shè)想應(yīng)用有大量的頁面那配置工作豈不是費時費力,所以我們便來一起看看Android Studio 2.3給我們帶來了什么便利
概覽及使用
App Links是Android M以上的特有功能,即實現(xiàn)了auto-verify支持用戶點擊一個鏈接即可喚起APP扯键,而不用像以往版本中需要點擊一個選擇框列表珊肃。為了使自己的應(yīng)用支持App Links,我們常需要以下三個步驟:
- 在manifest中創(chuàng)建Intent filter
- 在Activity中編寫對應(yīng)的代碼邏輯處理收到的url links
- 通過配置證書文件厉亏,關(guān)聯(lián)網(wǎng)頁和應(yīng)用
Android Studio 2.3及以上版本中提供了App Links Assistant協(xié)助開發(fā)者進(jìn)行快速配置烈和,該功能可在tools > App Links Assistant中開啟。
配置Intent filsters
首先打開URL匹配規(guī)則編輯器恬试,配置基本的Scheme、Host等信息训柴,并指定關(guān)聯(lián)的Activity對這塊不是很了解的同學(xué)可以點擊App Manifest了解各個字段的含義以及優(yōu)先級。
配置完畢后可查看已配置的映射的關(guān)系洗鸵,并可以通過輸入URL進(jìn)行校驗是否調(diào)通
選擇Activity
配置好mapping后膘滨,點擊Select Activity選擇上述配置好的Activity可自動生成以下代碼儒将。變量appLinkData
以Uri的形式存儲了進(jìn)行傳遞的數(shù)據(jù),針對具體頁面開發(fā)者可編寫特定的處理邏輯贡翘。
// ATTENTION: This was auto-generated to handle app links.
Intent appLinkIntent = getIntent();
String appLinkAction = appLinkIntent.getAction();
Uri appLinkData = appLinkIntent.getData();
關(guān)聯(lián)應(yīng)用
前兩步已經(jīng)使我們的應(yīng)用具備了URL支持砰逻,在最后一步中我們將生成站點的配置文件,使其能夠喚起我們的應(yīng)用踊东。此處需要根據(jù)個人用途選擇Signing config或keystore并選擇debug/release類型刚操,點擊生成的配置文件為assetlinks.json
,并將其上傳至自己的站點坚冀。
根據(jù)官方文檔鉴逞,特別注意的是系統(tǒng)識別Links需要通過https協(xié)議,故我們需要確保assetlinks.json可以通過https鏈接液南,無論我們的應(yīng)用是否在Intent-filter中包含了https
通過配置assetlinks.json
我們可以使站點具備喚起單一APP或者多個APP的能力勾徽,文件中使用了以下字段來關(guān)聯(lián)app:
- package_name 即manifest中定義的包名
- sha256_cert_fingerprints 即應(yīng)用的sha256指紋證書
而指紋證書可以調(diào)用命令行進(jìn)行生成
$ keytool -list -v -keystore my-release-key.keystore
若需要關(guān)聯(lián)多個app,可以參照下面的格式進(jìn)行配置
[{
"relation": ["delegate_permission/common.handle_all_urls"],
"target": {
"namespace": "android_app",
"package_name": "example.com.puppies.app",
"sha256_cert_fingerprints":
["14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"]
}
},
{
"relation": ["delegate_permission/common.handle_all_urls"],
"target": {
"namespace": "android_app",
"package_name": "example.com.monkeys.app",
"sha256_cert_fingerprints":
["14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"]
}
}]
最后點擊Test App Links可以在設(shè)備或模擬器上進(jìn)行測試闪幽。
后記
缺陷
使用App Links能為開發(fā)者帶來福利涡匀,但目前仍然有幾個不可忽視的缺陷:
- 當(dāng)app配置好了對App Links的支持之后,只有運(yùn)行在Android M上的用戶才能直接體會到這項好處
- 開發(fā)者需要維護(hù)與App相關(guān)聯(lián)的站點陨瘩,并支持上傳認(rèn)證文件级乍,可能造成更大的財力精力開銷
擴(kuò)展
利用App Links Assistant我們可以快速配置應(yīng)用全局路由的支持,由于manifest中已存在url與activity的映射關(guān)系甚淡,我們可以基于Intent和PackageManager設(shè)計一個簡單的路由框架捅厂。比起手動在manifest增刪,App Links Assistant能幫助我們高效管理當(dāng)前的映射關(guān)系并進(jìn)行測試撵割。