簡(jiǎn)介
大家好!我是Tony,一個(gè)熱愛技術(shù),希望運(yùn)用技術(shù)改變生活的的追夢(mèng)男孩。閑話不多說(shuō)乏屯,之前我總結(jié)過iOS的Universal Links,今天帶大家探索一下Android的 AppLink
阔墩。
AppLink的能力
App Link是一種特殊類型的DeepLink,可讓您的網(wǎng)站網(wǎng)址立即打開Android應(yīng)用程序中的相應(yīng)內(nèi)容(無(wú)需用戶選擇應(yīng)用程序)瓶珊。
Android官方培訓(xùn)文檔翻譯
Android應(yīng)用程序鏈接是一種特殊類型的深層鏈接啸箫,可讓您的網(wǎng)站網(wǎng)址立即打開Android應(yīng)用程序中的相應(yīng)內(nèi)容(無(wú)需用戶選擇應(yīng)用程序)。
??要將Android應(yīng)用程序鏈接添加到您的應(yīng)用程序伞芹,請(qǐng)定義使用HTTP URL打開您的應(yīng)用程序內(nèi)容的意圖過濾器(如創(chuàng)建應(yīng)用程序內(nèi)容的深層鏈接所述)忘苛,并確認(rèn)您擁有應(yīng)用程序和網(wǎng)站URL(如本指南中所述)。如果系統(tǒng)成功驗(yàn)證您擁有這些網(wǎng)址唱较,則系統(tǒng)會(huì)自動(dòng)將這些網(wǎng)址意圖路由到您的應(yīng)用扎唾。
?? 要驗(yàn)證您的應(yīng)用程序和您的網(wǎng)站的所有權(quán),需要執(zhí)行以下步驟:
在清單中請(qǐng)求自動(dòng)應(yīng)用鏈接驗(yàn)證南缓。這向Android系統(tǒng)表明胸遇,它應(yīng)該驗(yàn)證您的應(yīng)用屬于您的意圖過濾器中使用的URL域。
通過在以下位置托管一個(gè)數(shù)字資產(chǎn)鏈接JSON文件來(lái)聲明您的網(wǎng)站和您的意圖過濾器之間的關(guān)系:
https://domain.name/.well-known/assetlinks.json
深層鏈接與應(yīng)用鏈接的區(qū)別
深層鏈接是一個(gè)意圖過濾器汉形,允許用戶直接在您的Android應(yīng)用程序中輸入特定的活動(dòng)纸镊。點(diǎn)擊其中一個(gè)鏈接可能會(huì)打開一個(gè)消歧義對(duì)話框,允許用戶從多個(gè)應(yīng)用程序(包括您的)中選擇一個(gè)可以隱藏給定URL的應(yīng)用程序概疆。例如逗威,圖1顯示用戶點(diǎn)擊地圖鏈接后的消歧義對(duì)話框,詢問是否在地圖或Chrome中打開鏈接岔冀。
請(qǐng)求應(yīng)用鏈接驗(yàn)證
要為您的應(yīng)用啟用鏈接處理驗(yàn)證凯旭,請(qǐng)?jiān)谀膽?yīng)用清單中的任何一個(gè)Web URL意圖過濾器中設(shè)置android:autoVerify =“true”,其中包括android.intent.action.VIEW意圖操作和android.intent.category.BROWSABLE意圖類別使套,如以下清單代碼段所示:
<activity ...>
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="http" android:host="www.example.com" />
<data android:scheme="https" />
</intent-filter>
</activity>
當(dāng)任何一個(gè)意圖過濾器上都存在android:autoVerify =“true”時(shí)罐呼,在Android 6.0及更高版本的設(shè)備上安裝應(yīng)用程序會(huì)導(dǎo)致系統(tǒng)嘗試驗(yàn)證與您的應(yīng)用程序意圖過濾器中的URL相關(guān)的所有主機(jī)。
驗(yàn)證涉及以下內(nèi)容: 系統(tǒng)檢查所有意圖過濾器侦高,包括: 操作:android.intent.action.VIEW 類別:android.intent.category.BROWSABLE和android.intent.category.DEFAULT 數(shù)據(jù)方案:http或https 對(duì)于在上述意向過濾器中找到的每個(gè)唯一主機(jī)名嫉柴,Android會(huì)通過https://hostname/.well-known/assetlinks.json查詢數(shù)字資產(chǎn)鏈接文件的相應(yīng)網(wǎng)站。 只有當(dāng)系統(tǒng)為清單中的所有主機(jī)找到匹配的數(shù)字資產(chǎn)鏈接文件時(shí)矫膨,才會(huì)將您的應(yīng)用程序建立為指定URL模式的默認(rèn)處理程序差凹。
支持多個(gè)主機(jī)的應(yīng)用程序鏈接
系統(tǒng)必須能夠根據(jù)托管在所有相應(yīng)網(wǎng)域上的數(shù)字資產(chǎn)鏈接文件來(lái)驗(yàn)證應(yīng)用的URL意圖過濾器的數(shù)據(jù)元素中指定的每個(gè)主機(jī)期奔。如果任何驗(yàn)證失敗侧馅,則該應(yīng)用程序不會(huì)被驗(yàn)證為應(yīng)用程序意圖過濾器中定義的任何URL模式的默認(rèn)處理程序。然后呐萌,系統(tǒng)會(huì)默認(rèn)使用其標(biāo)準(zhǔn)行為來(lái)解析意圖馁痴,如創(chuàng)建應(yīng)用程序內(nèi)容的深層鏈接中所述。 ??例如肺孤,如果在https://www.example.com/.well-known/assetlinks.json和https://www.example上找不到assetlinks.json文件罗晕,則具有以下意向過濾器的應(yīng)用將無(wú)法通過驗(yàn)證達(dá)網(wǎng)絡(luò)/济欢。好知/ assetlinks.json:
<application>
<activity android:name=”MainActivity”>
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="http" android:host="www.example.com" />
<data android:scheme="https" />
</intent-filter>
</activity>
<activity android:name=”SecondActivity”>
<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:scheme="https" android:host="www.example.net" />
</intent-filter>
</activity>
</application>
請(qǐng)記住,同一個(gè)intent過濾器中的所有<data>元素會(huì)合并在一起小渊,以說(shuō)明其組合屬性的所有變體法褥。例如,上面的第一個(gè)intent過濾器包含一個(gè)僅聲明HTTPS方案的<data>元素酬屉。但是它與其他的<data>元素結(jié)合使用半等,意圖過濾器同時(shí)支持http://www.example.com和https://www.example.com。因此呐萨,如果要定義特定的URI方案和域組合杀饵,則必須創(chuàng)建單獨(dú)的意向過濾器。
支持多個(gè)子域名的應(yīng)用鏈接
數(shù)字資產(chǎn)鏈接協(xié)議將您的意圖過濾器中的子域視為唯一的獨(dú)立主機(jī)谬擦。因此切距,如果您的意圖過濾器列出了具有不同子域的多個(gè)主機(jī),則必須在每個(gè)域上發(fā)布有效的assetlinks.json惨远。例如谜悟,以下intent過濾器將www.example.com和mobile.example.com包括為接受的意向URL主機(jī)。因此北秽,必須在https://www.example.com/.well-known/assetlinks.json和https://mobile.example.com/.well-known/assetlinks.json上發(fā)布有效的assetlinks.json赌躺。
<application>
<activity android:name=”MainActivity”>
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="https" android:host="www.example.com" />
<data android:scheme="https" android:host="mobile.example.com" />
</intent-filter>
</activity>
</application>
或者,如果您使用通配符聲明主機(jī)名(例如 .example.com)羡儿,則必須以根主機(jī)名(example.com)發(fā)布assetlinks.json文件礼患。例如,只要assetlinks.json文件在https://example.com/發(fā)布掠归,具有以下意向過濾器的應(yīng)用程序就會(huì)通過example.com的任何子名稱(例如foo.example.com)的驗(yàn)證.well-known / assetlinks.json:
<application>
<activity android:name=”MainActivity”>
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="https" android:host="*.example.com" />
</intent-filter>
</activity>
</application>
以下示例assetlinks.json文件授予對(duì)com.example Android應(yīng)用程序的鏈接開放權(quán)限:
[{
"relation": ["delegate_permission/common.handle_all_urls"],
"target": {
"namespace": "android_app",
"package_name": "com.example",
"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"]
}
}]
將網(wǎng)站與多個(gè)應(yīng)用程序關(guān)聯(lián):
[{
"relation": ["delegate_permission/common.handle_all_urls"],
"target": {
"namespace": "android_app",
"package_name": "com.example.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": "com.example.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"]
}
}]
發(fā)布JSON驗(yàn)證文件
https://domain.name/.well-known/assetlinks.json
[參考鏈接](http://www.reibang.com/p/6ff6dbcc569e)
Android deeplink和AppLink原理