總覽
Digital Asset Links 通訊協定和 API 可讓應用程式或網站對其他應用程式或網站建立可驗證的公開聲明。舉例來說,網站可以宣告其與特定 Android 應用程式相關聯,也可以宣告要與其他網站共用使用者憑證。
以下列舉 Digital Asset Links 的幾種用途:
- 如果已安裝網站,網站 A 就會聲明,該網站連結應在行動裝置上透過指定應用程式開啟。
- 網站 A 宣告可與網站 B 共用 Chrome 使用者憑證,因此如果使用者已登入網站 A,就不必登入網站 B。
- 應用程式 A 宣告可以與網站 B 共用裝置設定 (例如位置)。
重要詞彙
- 主體:主體是指做出聲明的應用程式或網站。在 Digital Asset Links 中,主體一律為代管陳述清單的應用程式或網站。
- 陳述式清單:陳述式會出現在包含一或多個陳述式的陳述式清單中。陳述式清單屬於明文,可公開存取,位置在主體控管的位置,不容易遭人假冒或竄改。 可以是獨立檔案,也可以是另一個大型項目的區段。舉例來說,在網站上,這個檔案是完整的檔案,在 Android 應用程式中,則是應用程式資訊清單中的部分。任何人都能透過非專屬方式查看及驗證對帳單。詳情請參閱陳述式清單說明文件。
- 陳述: 陳述式是結構緊密的 JSON 結構,其中包含「關係」relation (聲明內容為「啟用共用憑證」的聲明) 和「目標」relation (與關聯相關的網站或應用程式)。因此,每個陳述就像一個句子,主體表示與相關相關目標。
- 陳述使用者:陳述式使用者向主體要求陳述式清單,檢查是否針對指定主體執行陳述式,如果存在,則可執行指定的動作。詳情請參閱聲明的陳述式說明文件.
快速使用範例
以下是一個簡單的範例,說明 www.example.com 網站如何使用 Digital Asset Links 指定該網站網址的所有連結應使用特定應用程式 (而非瀏覽器) 開啟:
- www.example.com 網站在 https://www.example.com/.well-known/assetlinks.json 發布了陳述式清單,這是網站上陳述清單的正式名稱和位置;任何位置的陳述式清單或其他名稱都不適用於這個網站。在本範例中,陳述式清單包含一個陳述式,授權 Android 應用程式開啟其網站上的連結:
[{ "relation": ["delegate_permission/common.handle_all_urls"], "target" : { "namespace": "android_app", "package_name": "com.example.app", "sha256_cert_fingerprints": ["hash_of_app_certificate"] } }]
陳述式清單支援 [ ] 標記內的陳述式陣列,但範例檔案只包含一個陳述式。sha256_cert_fingerprints
是應用程式簽署憑證的 SHA256 指紋。詳情請參閱 Android 應用程式連結說明文件。 - 上述陳述式中的 Android 應用程式擁有意圖篩選器,用於指定所處理網址的配置、主機和路徑模式:在本範例中為 https://www.example.com。意圖篩選器包含一個特殊屬性
android:autoVerify
,這是 Android M 的新屬性,代表 Android 應在應用程式安裝時於意圖篩選器中描述的網站上驗證聲明。 - 使用者安裝應用程式。Android 查看具有
autoVerify
屬性的意圖篩選器,並檢查指定網站是否存在陳述式清單。如果有,Android 會檢查該檔案是否包含授予應用程式連結處理的陳述式,並根據憑證雜湊來驗證應用程式。如果一切檢查完畢,Android 就會將所有 https://www.example.com 意圖轉送至 example.com 應用程式。 - 使用者在自己的裝置上點選 https://www.example.com/puppies 連結。這類連結沒有位置:瀏覽器、Google Search Appliance 建議頁面或其他位置。Android 會將意圖轉送至 example.com 應用程式。
- example.com 應用程式會收到意圖,並選擇處理該意圖,然後在應用程式中開啟小狗頁面。如果應用程式因故拒絕處理連結,或者應用程式不在裝置上,系統就會將連結傳送至符合該意圖模式 (通常是瀏覽器) 的下一個預設意圖處理常式。
重要注意事項和限制:
- 通訊協定不會驗證產生陳述式的主體,但該陳述式位於與主體密切相關的特定位置,且該陳述式是由主體控管。
- 通訊協定不會驗證陳述式目標,但可讓呼叫端驗證目標。舉例來說,陳述式可透過憑證雜湊和套件名稱來識別行動應用程式目標。
- 此通訊協定不會原生執行任何陳述式動作,而是能夠公開陳述式。使用此陳述式時,使用的應用程式必須驗證並決定是否採取行動。Android M 會以原生方式執行這些步驟;舉例來說,如果網站將連結處理作業委派給特定應用程式,Android 會檢查並驗證陳述式、驗證目標應用程式,然後為應用程式提供處理指定連結的選項。
- 這個通訊協定並不會啟用對兩方的陳述:網站 A 可以發表關於網站 B 的聲明,但網站 A 無法就網站 B 和網站 C 之間的關係發表聲明。不過,如果網站 B 信任網站 A,就能檢查網站 A 是否有授予網站 C 權限的聲明,並決定實作網站 C。