使用自己的網域 (而非 page.link
子網域) 可進一步控管Dynamic Links品牌。使用自訂網域時,您可以建立如下列範例的 Dynamic Links:
https://example.com/link-suffix https://example.com/links/promos/link-suffix https://links.example.com/link-suffix https://ex.amp.le/link-suffix
link-suffix 前的網址部分稱為「網址前置字元」,包含自訂 Dynamic Link 網域和路徑前置字元。建立 Dynamic Links 時,您需要提供網址前置字元。
如要設定自訂網域,您必須具備 Firebase 專案的編輯者或擁有者權限。
使用網域進行 Dynamic Links 驗證
您可以為 Dynamic Links、網頁、通用連結和應用程式連結使用相同網域,但如果這麼做,請務必確保 Dynamic Link 網址不會與網頁網址衝突。設定 Dynamic Links 使用特定網址前置字元時,以該前置字元開頭的所有網址都會視為 Dynamic Links,因此您無法使用這類網址指向一般代管內容。
舉例來說,如要建立資源 (網頁、通用連結或應用程式連結) 的 Dynamic Link,就不能使用 https://example.com/
做為 Dynamic Links 網址前置字元,否則系統會將 https://example.com/my-resource
視為 Dynamic Link。https://example.com/my-resource
請改用網址前置字串,並搭配其他網域或路徑前置字串。
因此,下列長網址 Dynamic Links (和對應的短連結) 無法正常運作,因為 link
參數指定的網址是以 Dynamic Link 網址前置字元 https://example.com/
開頭:
https://example.com/?link=https://example.com/my-resource https://example.com/?link=https://example.com/resources/my-resource
但下列長網址 Dynamic Links (和對應的短連結) 則可正常運作,因為網址前置字元不會與 link
網址衝突:
https://link.example.com/?link=https://example.com/my-resource https://example.com/links/?link=https://example.com/my-resource https://ex.amp.le/?link=https://example.com/my-resource
在 Firebase 控制台中設定自訂網域
您通常可以在 Firebase 控制台中完成自訂網域設定。如要這麼做,請按照下列步驟操作:
如果尚未為專案設定 Firebase Hosting,請開啟 Firebase 控制台的「Hosting」頁面,按一下「開始使用」,然後按照設定說明操作。您目前不必完成這些步驟。
開啟 Firebase 控制台的「Dynamic Links」頁面。
如果尚未用過 Dynamic Links,請按一下「開始使用」。如果沒有,請按一下下拉式選單中的「新增網址前置字元」。
然後完成設定精靈,並在系統提示時指定要使用的網域和路徑前置字元。
中使用路徑前置字元 (例如 example.com/links) 或子網域 (links.example.com/)。僅限 iOS:在 Xcode 專案的
Info.plist
檔案中,建立名為FirebaseDynamicLinksCustomDomains
的金鑰,並將其設為應用程式的 Dynamic Links 網址前置字元。例如:<key>FirebaseDynamicLinksCustomDomains</key> <array> <string>https://example.com/link</string> <string>https://example.com/promos</string> </array>
手動設定自訂網域
在某些情況下,例如您已為 Dynamic Links 設定自訂網域,並想新增其他網域,或是您要新增的網域已連結至 Hosting 網站,您就必須手動設定自訂網域。
方法如下:
如果尚未將網域連線至 Firebase Hosting,請先完成這項作業。
使用 Firebase Hosting 設定網域時,請在本地專案目錄中建立設定檔
firebase.json
。更新至最新版 Firebase CLI (6.5.0 以上版本)。
在專案的
firebase.json
檔案中,為 Dynamic Links 設定 Hosting 網站。如果專案有多個網站,請務必設定要使用的網域所連結的網站。將
appAssociation
設為AUTO
。啟用這項設定後,Hosting 會在收到要求時動態產生assetlinks.json
和apple-app-site-association
檔案。將
dynamicLinks
設為true
,藉此設定重新編寫規則,指定要用於 Dynamic Links 的路徑前置字元。對這些路徑的要求會轉送至 Dynamic Links。與將路徑重新編寫為網址的規則不同,Dynamic Link 重新編寫規則不得包含規則運算式。
如果網站有多個重寫規則,請注意,Hosting 會執行與要求相符的第一個重寫規則。
例如:
"hosting": { // ... "appAssociation": "AUTO", "rewrites": [ { "source": "/promos/**", "dynamicLinks": true }, { "source": "/links/share/**", "dynamicLinks": true } ] }
完成上述設定後,您可以使用下列範例中的網址前置字元建立 Dynamic Links:
https://your-domain/promos/link-suffix https://your-domain/links/share/link-suffix
如果您只將這個網域用於 Dynamic Links,可以使用
/**
的來源路徑建立沒有路徑前置字元的 Dynamic Links:/**
{ "source": "/**", "dynamicLinks": true }
使用上述規則,您可以建立類似下列範例的 Dynamic Links:
https://your-domain/link-suffix
部署 Hosting 設定變更:
firebase deploy --only hosting
(選用) 您可以使用 Hosting REST API 檢查已部署的
firebase.json
內容。僅限 iOS:在 Xcode 專案的
Info.plist
檔案中,建立名為FirebaseDynamicLinksCustomDomains
的金鑰,並將其設為應用程式的 Dynamic Links 網址前置字元。例如:<key>FirebaseDynamicLinksCustomDomains</key> <array> <string>https://example.com/promos</string> <string>https://example.com/links/share</string> </array>
「Dynamic Links」和「Hosting」的優先順序
請特別注意 Dynamic Links 的主機優先順序。
- 確認 Dynamic Links URL 前置字元不會與優先順序較高的代管設定衝突 (例如,代管的靜態內容一律優先於重寫)。
- 在
rewrites
屬性中,Hosting 回應會遵守第一個擷取所要求路徑的source
glob 所指定的規則。
舉例來說,如果您為 Dynamic Link 設定 your-domain/source-path/link-suffix
,但 your-domain/source-path/index.html
也有靜態內容,系統會優先處理靜態內容。使用者會看到 index.html
,而不是 Dynamic Link。同樣地,如果 your-domain/source-path/link-suffix
含有靜態內容,使用者會看到靜態內容,而不是 Dynamic Link。
如要為 Dynamic Links 和 Hosting 使用相同的品牌宣傳,請考慮為 Dynamic Links 網址前置字串採用下列其中一個選項:
設定
source
屬性,以比對路徑前置字串。舉例來說,如果您的自訂網域是example.com
,重寫規則可能如下:// Domain is example.com "rewrites": [ { "source": "/links/**", // Dynamic Links start with "https://example.com/links/" "dynamicLinks": true } ]
設定要用於 Dynamic Links 的子網域,然後設定
source
屬性來比對該子網域。舉例來說,如果子網域為links.example.com
,重寫規則可能如下:// Domain is links.example.com "rewrites": [ { "source": "/**", // Dynamic Links start with "https://links.example.com/" "dynamicLinks": true } ]