AppLink

簡介

大家好!我是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中打開鏈接。


ResolverActivity
請求應用鏈接驗證

要為您的應用啟用鏈接處理驗證,請在您的應用清單中的任何一個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.comhttps://www.example.com。因此,如果要定義特定的URI方案和域組合,則必須創(chuàng)建單獨的意向過濾器。

支持多個子域名的應用鏈接

數(shù)字資產鏈接協(xié)議將您的意圖過濾器中的子域視為唯一的獨立主機。因此,如果您的意圖過濾器列出了具有不同子域的多個主機,則必須在每個域上發(fā)布有效的assetlinks.json。例如,以下intent過濾器將www.example.commobile.example.com包括為接受的意向URL主機。因此,必須在https://www.example.com/.well-known/assetlinks.jsonhttps://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原理

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容