如要支援應用程式連結,您必須建立名為 assetlinks.json
的 Digital Asset Links JSON 檔案,並發布至網站上眾所皆知的位置。這個檔案會公開聲明哪些應用程式有權處理網域的連結,Android 裝置會從伺服器擷取這個檔案,驗證深層連結。
如果是 Android 15 以上版本的動態應用程式連結,您也可以在 assetlinks.json
檔案中定義動態規則設定,例如路徑、片段和查詢參數的模式比對器。搭載 Android 15 (API 級別 35) 以上版本並安裝 Google 服務的 Android 裝置,會定期擷取檔案,並將動態設定與應用程式資訊清單中的靜態設定合併。
本指南說明如何準備 assetlinks.json
檔案,並在網站上發布。您也可以使用 Play 深層連結工具或 Android Studio 應用程式連結小幫手,產生 assetlinks.json
檔案。詳情請參閱「應用程式連結開發人員工具」。
宣告網站關聯
您必須在網站上發布 Digital Asset Links JSON 檔案,指明與網站相關聯的 Android 應用程式,並驗證應用程式的網址意圖。JSON 檔案會使用下列欄位識別相關聯的應用程式:
package_name
:應用程式build.gradle
檔案中聲明的應用程式 ID。sha256_cert_fingerprints
:應用程式簽署憑證的 SHA256 指紋。您可以使用下列指令,透過 Java 金鑰工具產生指紋:
keytool -list -v -keystore my-release-key.keystore
- 這個欄位支援多個指紋,可用於支援不同版本的應用程式,例如偵錯和正式版建構作業。如果您的應用程式使用 Play 應用程式簽署功能,則在本機執行
keytool
產生的憑證指紋通常不會與使用者裝置上的憑證相符。如要確認應用程式是否使用 Play 應用程式簽署功能,請登入 Play 管理中心的開發人員帳戶,然後前往Release > Setup > App signing
。如果應用程式使用這項功能,您會在同一頁面找到應用程式的正確 Digital Asset Links JSON 程式碼片段。
下列 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"]
}
}]
將網站與多個應用程式建立關聯
網站可以在同一個 assetlinks.json
檔案中宣告與多個應用程式的關聯。下列檔案清單顯示聲明與兩個應用程式建立關聯的陳述式檔案範例,該檔案分別位於 https://www.example.com/.well-known/assetlinks.json
:
[{
"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"]
}
}]
不同應用程式可能會處理同一個網頁主機下不同資源的連結。
舉例來說,應用程式 1 可以為 https://example.com/articles
宣告意圖篩選器,應用程式 2 則可以為 https://example.com/videos
宣告意圖篩選器。
將多個網站與單一應用程式建立關聯
多個網站可以在各自的 assetlinks.json
檔案中,宣告與同一應用程式的關聯。下列檔案清單顯示如何宣告 example.com 和 example.net 與 app1 的關聯。第一個項目會顯示 example.com 與 app1 的關聯:
https://www.example.com/.well-known/assetlinks.json
[{
"relation": ["delegate_permission/common.handle_all_urls"],
"target": {
"namespace": "android_app",
"package_name": "com.mycompany.app1",
"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"]
}
}]
下一個清單顯示 example.net 與 app1 的關聯。這兩者的差異只在於檔案的代管位置 (.com
和 .net
):
https://www.example.net/.well-known/assetlinks.json
[{
"relation": ["delegate_permission/common.handle_all_urls"],
"target": {
"namespace": "android_app",
"package_name": "com.mycompany.app1",
"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"]
}
}]
設定動態規則
Android 15 以上版本支援動態應用程式連結,可讓您使用伺服器端深層連結比對規則,與您在應用程式資訊清單中靜態定義的規則搭配運作。您可以在 assetlinks.json
檔案中定義動態規則。您可以視需要加入這項資訊。
搭載 Android 15 (API 級別 35) 以上版本並安裝 Google 服務的 Android 裝置,會定期從伺服器擷取這個檔案,並將動態規則設定與應用程式資訊清單中的靜態設定合併。以下是含有動態規則的 assetlinks.json
檔案範例:
[
{
"relation": [
"delegate_permission/common.handle_all_urls"
],
"target": {
"namespace": "android_app",
"package_name": "com.example.app",
"sha256_cert_fingerprints": [...]
},
"relation_extensions": {
"delegate_permission/common.handle_all_urls": {
"dynamic_app_link_components": [
{"?": {"dl": "*"}},
{"#": "app"},
{"/": "/products/*"},
{"/": "/shoes", "?": {"in_app": "true"}},
{"/": "*", "exclude": true}
]
}
}
}
]
程式碼重點
- 動態應用程式連結會新增名為
dynamic_app_link_components
的 Digital Asset Links 關係擴充功能,您可以在這裡設定動態規則。 - 動態規則可以包含路徑、片段和查詢參數的模式比對器。
- 您也可以將任何模式比對器標示為排除,這樣相符的網址就不會開啟您的應用程式。
- 這個範例顯示路徑 (
"/"
)、片段 ("#"
) 和查詢參數 ("?"
) 的比對器範例,以及排除的比對器 ("exclude"
) - 如果檔案中的任何欄位格式不正確或空白,Android 會捨棄動態規則,並改用應用程式資訊清單中靜態定義的規則。
動態規則只能指定適用於您在應用程式資訊清單檔案中宣告網域範圍內的規則。詳情請參閱下文。
宣告動態規則
動態應用程式連結支援新的 dynamic_app_link_components
關係擴充功能,其中包含規則物件陣列。每條規則都是使用路徑、片段和查詢參數的模式比對器定義,這些比對器會開啟您的應用程式。比對器也可以個別排除,這樣就不會開啟您的應用程式。所有這些都是選用項目。
- 路徑比對
- 鍵:「/」
- 值:單一字串,網址路徑的相符運算式
- 片段比對
- 按鍵:「#」
- 值:單一字串,網址片段的比對運算式
- 查詢參數比對
- 鍵:「?」
- 值:字典,用於比對網址查詢參數中的鍵/值組合。
- 舉例來說,字典「{"
?", {"dl": "*", "in_app":"true
"}」會比對查詢字串「?in_app=true&dl=abc
」。 - 字典中的鍵/值組合順序不必與查詢字串中的組合順序相符。此外,字典不需要比對查詢字串中的所有鍵/值組合,但必須為每個字典項目找到相符項目。
- 舉例來說,字典也會比對查詢字串「
?lang=en&in_app=true&tz=pst&dl=abc
」,但不會比對查詢字串「?lang=en&tz=pst&dl=abc
」
- 已排除
- 鍵:「exclude」
- 值:針對
dynamic_app_link_components
中定義的每項規則,可選填 true/false 值 (請參閱範例)。
您可以在模式比對器中使用下列特殊字元:
- 「*」會比對零或多個字元,直到在相符字串中找到模式中的萬用字元後方字元為止
- 「?」可比對任何單一字元
- 「?*」會比對出 1 個以上的字元
值沒有其他字元限制。
排序動態規則
規則的宣告順序很重要。Android 會依序評估每項規則,直到找到相符項目為止。
以下範例說明排序如何影響處理方式。第一個規則會比對所有路徑 (「*」),但會排除相符項目 (exclude: true),也就是說,這個規則會排除所有網址,不允許開啟應用程式。在這種情況下,系統永遠不會評估允許「/path1」的第二個規則。
dynamic_app_link_components: [
{"/": "*", exclude: true},
{"/": "/path1"}
]
不過,在下一個範例中,系統會先宣告「/path1」規則,因此會先評估這項規則,並為符合「/path1」的網址開啟應用程式。第二條規則會排除所有開啟應用程式的網址,但只有在第一條規則不相符時,才會評估第二條規則。
dynamic_app_link_components: [
{"/": "/path1"},
{"/": "*", exclude: true}
]
正確設定動態規則的範圍
在 Android 15 以上版本中,定義要搭配動態應用程式連結使用的伺服器端規則時,請務必適當設定規則範圍,確保規則能與應用程式資訊清單中宣告的靜態意圖篩選器搭配運作,並發揮互補作用。
在 assetlinks.json 檔案中宣告的動態規則,只能為您在應用程式的 AndroidManifest.xml
檔案中宣告的主機指定規則。動態規則無法擴大您在應用程式資訊清單中靜態宣告的網址規則範圍。
因此,我們建議您在動態和靜態規則中採用這個方法:
- 在應用程式資訊清單中,設定範圍盡可能廣泛的規則,例如只宣告架構和網域
- 依據伺服器端動態規則進一步調整,例如路徑層級的轉送。
有了這個理想設定,您就能視需要動態新增 assetlinks.json 檔案中的應用程式連結路徑,並確保這些路徑符合您在應用程式資訊清單中設定的廣泛範圍。
只宣告一次 dynamic_app_link_components
為確保系統正確處理規則,請針對特定網站、關係和應用程式,在陳述式中只宣告一個 dynamic_app_link_components 物件。
- 找出同一個網站、關係和應用程式的多個陳述式,這些陳述式會宣告 dynamic_app_link_components 物件。
- 找出在單一陳述式中宣告的多個 dynamic_app_link_components 物件
在這種情況下,Android 無法保證會使用哪種動態規則設定。
動態規則與先前的應用程式連結設定相容
如果您已支援應用程式連結,可以直接在現有的 assetlinks.json 檔案中新增動態應用程式連結支援。驗證應用程式連結的關係欄位維持不變,您也可以新增動態規則的關係擴充欄位,不必進行任何其他變更。
如果 Android 裝置搭載 Android 14 (API 級別 34 以下) 版本,系統會忽略動態規則的新關係擴充欄位;如果裝置搭載 Android 15 以上版本,系統則會將這些規則與資訊清單定義的規則合併。
發布 JSON 驗證檔案
您必須將 JSON 驗證檔案發布到下列位置:
https://domain.name/.well-known/assetlinks.json
請務必確認以下事項:
assetlinks.json
檔案的 content-type 為application/json
。- 無論應用程式的意圖篩選器是否將 HTTPS 宣告為資料配置,
assetlinks.json
檔案都必須可透過 HTTPS 連線存取。 assetlinks.json
檔案必須可直接存取,中間不能經過任何重新導向 (不得使用 301 或 302 重新導向)。- 如果應用程式連結支援多個主機網域,您必須在每個網域發布
assetlinks.json
檔案。請參閱「支援多個主機的應用程式連結」。 - 請勿發布應用程式,因為資訊清單檔案中的測試網址可能無法公開存取 (例如只能透過 VPN 存取)。在這種情況下,解決方法是設定建構變數,為開發版本產生不同的資訊清單檔案。
請參閱下列相關指南: