如要支援應用程式連結,您必須建立名為 assetlinks.json 的 Digital Asset Links JSON 檔案,並將其發布至網站上的已知位置。這個檔案會公開宣告哪些應用程式有權處理網域連結,Android 裝置則會從伺服器擷取這個檔案,驗證深層連結。
如果是 Android 15 以上版本的動態應用程式連結,您也可以在 assetlinks.json 檔案中定義動態規則設定,例如路徑、片段和查詢參數的模式比對器。搭載 Android 15 (API 級別 35) 以上版本且安裝 Google 服務的 Android 裝置,會定期擷取檔案,並將動態設定與應用程式資訊清單中的靜態設定合併。
本指南說明如何準備 assetlinks.json 檔案,並在網站上發布。您也可以視需要使用 Play 深層連結工具或 Android Studio 應用程式連結小幫手,產生 assetlinks.json 檔案。詳情請參閱「App Links 開發人員工具」。
宣告網站關聯
您必須在網站上發布 Digital Asset Links JSON 檔案,指出與網站相關聯的 Android 應用程式,並驗證應用程式的網址意圖。JSON 檔案會使用下列欄位來識別相關聯的應用程式:
package_name:在應用程式build.gradle檔案中宣告的應用程式 ID。sha256_cert_fingerprints:應用程式簽署憑證的 SHA256 指紋。您可以使用下列指令,透過 Java keytool 產生指紋:
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"]
}
}]
不同應用程式可能會處理同一個網站代管商下不同資源的連結。舉例來說,app1 可能會宣告 https://example.com/articles 的意圖篩選器,而 app2 可能會宣告 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}
]
如果宣告元件清單中沒有相符項目,網址就不會開啟應用程式。在以下範例中,沒有任何路徑與「/path3」相符,因此裝置會將這個路徑視為排除項目。
dynamic_app_link_components: [
{"/": "/path1"},
{"/": "/path2"}
]
如果您希望 dynamic_app_link_components 只排除特定網址部分,但允許所有其他部分,則這項行為非常重要。在以下範例中,如果省略最後一項規則,允許所有剩餘路徑,則表示所有網址都會從應用程式中排除。
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 14 (API 級別 34 以下) 的 Android 裝置會忽略動態規則的新關係擴充欄位,而搭載 Android 15 以上版本的裝置則會將這些規則與資訊清單定義的規則合併。
發布 JSON 驗證檔案
您必須在下列位置發布 JSON 驗證檔案:
https://domain.name/.well-known/assetlinks.json
請確認以下事項:
assetlinks.json檔案的 content-type 為application/json。assetlinks.json檔案必須可透過 HTTPS 連線存取,無論應用程式的意圖篩選器是否將 HTTPS 宣告為資料配置都一樣。assetlinks.json檔案必須無需重新導向 (不含 301 或 302 重新導向) 即可存取。- 如果應用程式連結支援多個代管網域,則必須在每個網域上發布
assetlinks.json檔案。請參閱「支援多個主機的應用程式連結」。 - 發布應用程式時,請勿在資訊清單檔案中加入一般大眾可能無法存取的測試網址 (例如僅能透過 VPN 存取的網址)。在這種情況下,解決方法是設定建構變化版本,為開發版本產生不同的資訊清單檔案。
請參閱下列相關指南: