簡介
大家好!我是Tony,一個熱愛技術,希望運用技術改變生活的的追夢男孩。閑話不多說,之前我總結過iOS的Universal Links,今天帶大家探索一下Android的 AppLink。
AppLink的能力
App Link是一種特殊類型的DeepLink,可讓您的網(wǎng)站網(wǎng)址立即打開Android應用程序中的相應內容(無需用戶選擇應用程序)。
Android官方培訓文檔翻譯
Android應用程序鏈接是一種特殊類型的深層鏈接,可讓您的網(wǎng)站網(wǎng)址立即打開Android應用程序中的相應內容(無需用戶選擇應用程序)。
??要將Android應用程序鏈接添加到您的應用程序,請定義使用HTTP URL打開您的應用程序內容的意圖過濾器(如創(chuàng)建應用程序內容的深層鏈接所述),并確認您擁有應用程序和網(wǎng)站URL(如本指南中所述)。如果系統(tǒng)成功驗證您擁有這些網(wǎng)址,則系統(tǒng)會自動將這些網(wǎng)址意圖路由到您的應用。
?? 要驗證您的應用程序和您的網(wǎng)站的所有權,需要執(zhí)行以下步驟:
在清單中請求自動應用鏈接驗證。這向Android系統(tǒng)表明,它應該驗證您的應用屬于您的意圖過濾器中使用的URL域。
通過在以下位置托管一個數(shù)字資產鏈接JSON文件來聲明您的網(wǎng)站和您的意圖過濾器之間的關系:
https://domain.name/.well-known/assetlinks.json
深層鏈接與應用鏈接的區(qū)別
深層鏈接是一個意圖過濾器,允許用戶直接在您的Android應用程序中輸入特定的活動。點擊其中一個鏈接可能會打開一個消歧義對話框,允許用戶從多個應用程序(包括您的)中選擇一個可以隱藏給定URL的應用程序。例如,圖1顯示用戶點擊地圖鏈接后的消歧義對話框,詢問是否在地圖或Chrome中打開鏈接。

請求應用鏈接驗證
要為您的應用啟用鏈接處理驗證,請在您的應用清單中的任何一個Web URL意圖過濾器中設置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>
當任何一個意圖過濾器上都存在android:autoVerify =“true”時,在Android 6.0及更高版本的設備上安裝應用程序會導致系統(tǒng)嘗試驗證與您的應用程序意圖過濾器中的URL相關的所有主機。
驗證涉及以下內容: 系統(tǒng)檢查所有意圖過濾器,包括: 操作:android.intent.action.VIEW 類別:android.intent.category.BROWSABLE和android.intent.category.DEFAULT 數(shù)據(jù)方案:http或https 對于在上述意向過濾器中找到的每個唯一主機名,Android會通過https://hostname/.well-known/assetlinks.json查詢數(shù)字資產鏈接文件的相應網(wǎng)站。 只有當系統(tǒng)為清單中的所有主機找到匹配的數(shù)字資產鏈接文件時,才會將您的應用程序建立為指定URL模式的默認處理程序。
支持多個主機的應用程序鏈接
系統(tǒng)必須能夠根據(jù)托管在所有相應網(wǎng)域上的數(shù)字資產鏈接文件來驗證應用的URL意圖過濾器的數(shù)據(jù)元素中指定的每個主機。如果任何驗證失敗,則該應用程序不會被驗證為應用程序意圖過濾器中定義的任何URL模式的默認處理程序。然后,系統(tǒng)會默認使用其標準行為來解析意圖,如創(chuàng)建應用程序內容的深層鏈接中所述。 ??例如,如果在https://www.example.com/.well-known/assetlinks.json和https://www.example上找不到assetlinks.json文件,則具有以下意向過濾器的應用將無法通過驗證達網(wǎng)絡/。好知/ 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>
請記住,同一個intent過濾器中的所有<data>元素會合并在一起,以說明其組合屬性的所有變體。例如,上面的第一個intent過濾器包含一個僅聲明HTTPS方案的<data>元素。但是它與其他的<data>元素結合使用,意圖過濾器同時支持http://www.example.com和https://www.example.com。因此,如果要定義特定的URI方案和域組合,則必須創(chuàng)建單獨的意向過濾器。
支持多個子域名的應用鏈接
數(shù)字資產鏈接協(xié)議將您的意圖過濾器中的子域視為唯一的獨立主機。因此,如果您的意圖過濾器列出了具有不同子域的多個主機,則必須在每個域上發(fā)布有效的assetlinks.json。例如,以下intent過濾器將www.example.com和mobile.example.com包括為接受的意向URL主機。因此,必須在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>
或者,如果您使用通配符聲明主機名(例如 .example.com),則必須以根主機名(example.com)發(fā)布assetlinks.json文件。例如,只要assetlinks.json文件在https://example.com/發(fā)布,具有以下意向過濾器的應用程序就會通過example.com的任何子名稱(例如foo.example.com)的驗證.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文件授予對com.example Android應用程序的鏈接開放權限:
[{
"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)站與多個應用程序關聯(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驗證文件
https://domain.name/.well-known/assetlinks.json
[參考鏈接](http://www.itdecent.cn/p/6ff6dbcc569e)
Android deeplink和AppLink原理