建立應用程式內容的深層連結

使用者點選的連結或程式輔助要求叫用網路 URI 意圖時,Android 系統 會依照順序嘗試下列每個動作,直到要求成功為止:

  1. 開啟使用者偏好的應用程式,該應用程式可以處理 URI (如有指定)。
  2. 開啟唯一能處理 URI 的應用程式。
  3. 允許使用者從對話方塊中選取應用程式。

請按照下列步驟建立內容連結,並進行測試。您也可以使用 Android Studio 中的 App Links Assistant 說明如何新增 Android 應用程式連結。

注意: 自 Android 12 (API 級別 31) 起,一般而言為 只有您的應用程式獲準使用網路意圖,才會解析應用程式中的活動 包含該網路意圖中的特定網域如果您的應用程式未獲核准: 網路意圖會解析為使用者的預設瀏覽器應用程式 。

為連入連結新增意圖篩選器

如要建立應用程式內容的連結,請新增意圖篩選器 資訊清單包含這些元素和屬性值:

<action>
指定 ACTION_VIEW 意圖動作,以便 即可在 Google 搜尋中觸及意圖篩選器。
<data>
新增一或多個 <data> 標記,每個標記都代表解析活動的 URI 格式。請至少提供 <data> 標記必須包含 android:scheme 屬性。

您可以新增更多屬性,進一步修正活動接受的 URI 類型。適用對象 舉例來說,您可能有多個活動接受類似 URI,但差別就在於 建立一組在這種情況下,請使用 android:path 屬性 或其 pathPatternpathPrefix 變化版本,藉此區分 系統應針對不同 URI 路徑開啟的活動

<category>
加入BROWSABLE 類別要從網路存取意圖篩選器,這是必要條件 。如果沒有這個代碼,在瀏覽器中點選連結就無法解析您的應用程式。

另包括 DEFAULT 類別。 這可讓應用程式回應隱含意圖。如果沒有這項資訊,活動就會開始 只有在意圖指定應用程式元件名稱的情況下使用。

下列 XML 程式碼片段說明如何指定意圖篩選器 。URI “example://gizmos”“http://www.example.com/gizmos” 皆解決了這個活動。

<activity
    android:name="com.example.android.GizmosActivity"
    android:label="@string/title_gizmos" >
    <intent-filter android:label="@string/filter_view_http_gizmos">
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <!-- Accepts URIs that begin with "http://www.example.com/gizmos” -->
        <data android:scheme="http"
              android:host="www.example.com"
              android:pathPrefix="/gizmos" />
        <!-- note that the leading "/" is required for pathPrefix-->
    </intent-filter>
    <intent-filter android:label="@string/filter_view_example_gizmos">
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <!-- Accepts URIs that begin with "example://gizmos” -->
        <data android:scheme="example"
              android:host="gizmos" />
    </intent-filter>
</activity>

請注意,這兩個意圖篩選器都只有 <data> 元素不同。 雖然您可以在同一個篩選器中加入多個 <data> 元素, 當您想要宣告某個非重複性時 網址 (例如 schemehost 的特定組合),因為 同一個意圖篩選器中有多個 <data> 元素實際上合併在一起 計算合併屬性的所有變化版本例如,請思考下列問題:

<intent-filter>
  ...
  <data android:scheme="https" android:host="www.example.com" />
  <data android:scheme="app" android:host="open.my.app" />
</intent-filter>

這項服務似乎只支援 https://www.example.comapp://open.my.app。不過,它確實支援這兩種功能,外加下列項目: 《app://www.example.com》和《https://open.my.app》。

注意:如果多項活動包含的意圖篩選器解析為 驗證的 Android 應用程式連結,則無法保證該活動 處理連結

在應用程式中,新增含有活動內容的 URI 的意圖篩選器後 可轉送任何 Intent 與應用程式在執行階段的相符 URI 相符

如要進一步瞭解如何定義意圖篩選器,請參閱 允許其他應用程式啟動您的活動

從傳入意圖讀取資料

系統透過意圖篩選器啟動活動後,您就可以 使用 Intent 提供的資料,判斷您需要轉譯的內容。致電 《getData()》和 擷取資料和 getAction() 方法 與傳入 Intent 相關聯的動作。你可以 在活動生命週期中隨時呼叫這些方法,但 通常可以在早期回呼中執行此操作,例如 onCreate()onStart()

以下程式碼片段說明如何從 Intent:

Kotlin

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.main)

    val action: String? = intent?.action
    val data: Uri? = intent?.data
}

Java

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Intent intent = getIntent();
    String action = intent.getAction();
    Uri data = intent.getData();
}

請按照下列最佳做法提升使用者體驗:

  • 深層連結應直接將使用者帶往內容 略過任何提示、插頁或登入程序確保使用者可以 使用者即使從未開啟應用程式,也能看到應用程式內容。 您可以在使用者後續互動或開啟應用程式時提示他們 。
  • 遵循 使用返回和向上瀏覽功能 這樣您的應用程式才能符合使用者的預期在 使用者透過深層連結進入您的應用程式

測試深層連結

您可以使用 Android Debug 使用活動管理員 (am) 工具進行橋接設定,測試意圖篩選器 您為深層連結指定的 URI 會解析為正確的應用程式活動。個人中心 可以在裝置或模擬器上執行 ADB 指令。

使用 ADB 測試意圖篩選器 URI 的一般語法如下:

$ adb shell am start
        -W -a android.intent.action.VIEW
        -d <URI> <PACKAGE>

舉例來說,下方指令會嘗試查看的目標應用程式活動。 與指定的 URI 相關聯

$ adb shell am start
        -W -a android.intent.action.VIEW
        -d "example://gizmos" com.example.android

您在上方設定的資訊清單宣告和意圖處理常式會定義應用程式之間的連線 和有關連入連結的處理方式不過,在 如要讓系統將應用程式視為一組 URI 的預設處理常式,您必須 並要求系統驗證此連線。 下一個課程會說明如何 我們會執行這些驗證

如要進一步瞭解意圖和應用程式連結,請參閱下列資源: