您可以使用自己的網域 (而非 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,因此您無法使用該前置字串的網址指向一般代管內容。
舉例來說,如果您想為資源 https://example.com/my-resource
(網頁、通用連結或應用程式連結) 建立 Dynamic Link,就不能使用 https://example.com/
做為 Dynamic Links 網址前置字串,因為這樣會導致 https://example.com/my-resource
被視為 Dynamic Link。您必須使用網址前置字串,搭配其他網域或其他路徑前置字串。
因此,以下長格式 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 頁面,按一下「Get Started」,然後依序點選設定操作說明。您目前不必完成所示步驟。
開啟 Firebase 主控台的 Dynamic Links 頁面。
如果您之前沒有使用過 Dynamic Links,請按一下「開始使用」。否則請點選下拉式選單中的「Add URL prefix」。
接著,完成設定精靈,在系統提示時指定要使用的網域和路徑前置字串。
僅限 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
檔案。如要指定要用於 Dynamic Links 的路徑前置字串,請將重寫規則的
dynamicLinks
設為true
。對這些路徑的要求會轉送至 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 網址前置字串不會與優先順序較高的代管設定衝突 (例如,代管的靜態內容一律會優先於重寫)。
- 在
rewrites
屬性中,Hosting 回應會遵循第一個擷取要求路徑的source
glob 指定的規則。
舉例來說,如果您為 your-domain/source-path/link-suffix
設定 Dynamic Link,但 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 } ]