共用方式為


Android 中的應用程式連結

本指南將討論 Android 6.0 如何支援應用程式連結,這是一種技術,可讓行動應用程式響應網站上的 URL。 它將討論什麼是應用程式連結、如何在Android 6.0應用程式中實作應用程式連結,以及如何設定網站來授與網域行動應用程式的許可權。

應用程式連結概觀

行動應用程式不再生活在尋址接收器中,在許多情況下,它們是其業務的重要元件,以及其網站。 企業想要順暢地連接其 Web 狀態和行動應用程式,並在網站啟動行動應用程式並在行動應用程式中顯示相關內容的連結。 應用程式連結 (也稱為 深層連結)是一種技術,可讓行動裝置回應 URI 並啟動對應至該 URI 的行動應用程式。

Android 會透過 意圖系統 處理應用程式連結 – 當使用者在行動瀏覽器中按兩下連結時,行動瀏覽器會分派 Android 將委派給已註冊應用程式的意圖。 例如,按兩下烹飪網站上的連結會開啟與該網站相關聯的行動應用程式,並向用戶顯示特定的食譜。 如果已註冊多個應用程式來處理該意圖,則 Android 會引發所謂的 釐清對話方塊 ,要求使用者選取應處理意圖的應用程式,例如:

Example screenshot of a disambiguation dialog

Android 6.0 會使用自動連結處理來改善此問題。 Android 可以自動將應用程式註冊為 URI 的預設處理程式 – 應用程式會自動啟動並直接流覽至相關的活動。 Android 6.0 決定如何處理 URI 點選,取決於下列準則:

  1. 現有的應用程式已經與 URI 相關聯 – 使用者可能已經將現有的應用程式與 URI 相關聯。 在此情況下,Android 會繼續使用該應用程式。
  2. 沒有現有的應用程式與 URI 相關聯,但已安裝 支援的應用程式 – 在此案例中,使用者尚未指定現有的應用程式,因此 Android 會使用已安裝的支援應用程式來處理要求。
  3. 沒有現有的應用程式與 URI 相關聯,但已安裝 許多支援的應用程式 – 因為有多個應用程式支援 URI,因此會顯示釐清對話方塊,而且使用者必須選取哪些應用程式會處理 URI。

如果使用者未安裝支援 URI 的應用程式,且後續安裝一個應用程式,則 Android 會在確認與 URI 相關聯的網站關聯之後,將該應用程式設定為 URI 的預設處理程式。

本指南將討論如何設定 Android 6.0 應用程式,以及如何建立及發佈數位資產連結檔案,以支援 Android 6.0 中的應用程式連結。

需求

本指南需要 Xamarin.Android 6.1 和以 Android 6.0 (API 層級 23) 或更高版本為目標的應用程式。

從 Xamarin 元件存放區使用 Rivets NuGet 套件 ,即可在舊版 Android 中使用應用程式連結。 Rivets 套件與 Android 6.0 中的應用程式連結不相容;它不支援Android 6.0應用程式連結。

在 Android 6.0 中設定應用程式連結

在 Android 6.0 中設定應用程式連結牽涉到兩個主要步驟:

  1. 為網站 URI 新增一或多個意圖篩選 – 意圖篩選會引導 Android 處理行動瀏覽器中的 URL 點選。
  2. 在網站上發佈數位資產連結 JSON 檔案 – 這是上傳至網站的檔案,由 Android 用來驗證行動應用程式與網站網域之間的關聯性。 如果沒有,Android 無法將應用程式安裝為 URI 的預設句柄;用戶必須手動執行此動作。

設定意圖篩選

您必須設定意圖篩選,以將 URI(或可能一組 URI)從網站對應至 Android 應用程式中的活動。 在 Xamarin.Android 中,此關聯性是藉由使用 IntentFilterAttribute 裝飾活動來建立。 意圖篩選必須宣告下列資訊:

  • Intent.ActionView – 這會註冊意圖篩選條件以響應檢視資訊的要求
  • Categories– 意圖篩選應該同時註冊 Intent.CategoryBrowsable Intent.CategoryDefault,才能正確處理 Web URI。
  • DataScheme – 意圖篩選必須宣告 http 和/或 https。 這些是唯一的兩個有效配置。
  • DataHost – 這是 URI 的來源網域。
  • DataPathPrefix – 這是網站上的資源選擇性路徑。
  • AutoVerify – 屬性 autoVerify 會告知Android驗證應用程式與網站之間的關聯性。 以下將進一步討論這一點。

下列範例示範如何使用 IntentFilterAttribute 來處理來自 https://www.recipe-app.com/recipes 和 之間的 http://www.recipe-app.com/recipes連結:

[IntentFilter(new [] { Intent.ActionView },
              Categories = new[] { Intent.CategoryBrowsable, Intent.CategoryDefault },
              DataScheme = "http",
              DataHost = "recipe-app.com",
              DataPathPrefix = "/recipe",
              AutoVerify=true)]
public class RecipeActivity : Activity
{
    // Code for the activity omitted
}

Android 會在將應用程式註冊為 URI 的預設處理程式之前,先驗證網站上針對數位資產檔案的意圖篩選所識別的每個主機。 所有意圖篩選都必須通過驗證,Android 才能將應用程式建立為默認處理程式。

Android 6.0 應用程式連結需要 Android 先確認應用程式與網站之間的關聯,再將應用程式設定為 URI 的預設處理程式。 第一次安裝應用程式時,會發生此驗證。 數字資產 連結 檔案是相關 Webdomain 所裝載的 JSON 檔案。

注意

屬性 android:autoVerify 必須由意圖篩選設定,否則 Android 將不會執行驗證。

檔案是由網域的 Webmaster 放置在 位置 https://domain/.well-known/assetlinks.json

數字資產檔案包含 Android 驗證關聯所需的元數據。 assetlinks.json檔案具有下列機碼/值組:

  • namespace – Android 應用程式的命名空間。
  • package_name – Android 應用程式的套件名稱(在應用程式指令清單中宣告)。
  • sha256_cert_fingerprints – 已簽署應用程式的SHA256指紋。 如需如何取得應用程式 SHA256 指紋的詳細資訊,請參閱尋找密鑰存放區的簽章指南

下列代碼段是列出單一應用程式的assetlinks.json範例

[
   {
      "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"
         ]
      }
   }
]

您可以註冊多個SHA256指紋,以支援應用程式的不同版本或組建。 下一個 assetlinks.json 檔案是註冊多個應用程式的範例:

[
   {
      "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"
         ]
      }
   }
]

Google Digital Asset Links 網站有一個在線工具,可協助建立及測試數位資產檔案。

實作應用程式連結之後,應該測試各種片段,以確保它們如預期般運作。

您可以使用 Google 的數位資產連結 API 確認數位資產檔案的格式正確並載入,如下列範例所示:

https://digitalassetlinks.googleapis.com/v1/statements:list?source.web.site=
  https://<WEB SITE ADDRESS>:&relation=delegate_permission/common.handle_all_urls

有兩個測試可以執行,以確保意圖篩選已正確設定,而且應用程式已設定為 URI 的預設處理程式:

  1. 如上所述,數字資產檔案已正確裝載。 第一個測試會分派Android應該重新導向至行動應用程式的意圖。 Android 應用程式應該啟動並顯示為 URL 註冊的活動。 在命令提示字元中,輸入:

    $ adb shell am start -a android.intent.action.VIEW \
        -c android.intent.category.BROWSABLE \
        -d "http://<domain1>/recipe/scalloped-potato"
    
  2. 針對安裝在指定裝置上的應用程式顯示現有的連結處理原則。 下列命令會傾印裝置上每個使用者的鏈接原則清單,其中包含下列資訊。 在命令提示字元中,輸入下列命令:

    $ adb shell dumpsys package domain-preferred-apps
    
    • Package – 應用程式的套件名稱。
    • Domain – 應用程式將處理 Web 連結的網域(以空白分隔)
    • Status – 這是應用程式的目前連結處理狀態。 的值 一律 表示應用程式已 android:autoVerify=true 宣告並已通過系統驗證。 後面接著十六進位數位,代表Android系統的喜好設定記錄。

    例如:

    $ adb shell dumpsys package domain-preferred-apps
    
    App linkages for user 0:
    Package: com.android.vending
    Domains: play.google.com market.android.com
    Status: always : 200000002
    

摘要

本指南討論了應用程式連結在Android 6.0中的運作方式。 然後說明如何設定 Android 6.0 應用程式以支援及回應應用程式連結。 它也討論了如何在Android應用程式中測試應用程式連結。