您可以使用自己的網域,而非 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 (v6.5.0 或更新版本)。
在專案的
firebase.json檔案中,為 Dynamic Links 設定 Hosting 網站。如果專案有多個網站,請務必設定連結至所需網域的網站。將
appAssociation設為AUTO。Hosting 會根據這項設定,在收到要求時動態產生assetlinks.json和apple-app-site-association檔案。設定重寫規則,並將
dynamicLinks設為true,指定要用於 Dynamic Links 的路徑前置字串。傳送至這些路徑的要求會透過 Proxy 轉送至 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 回應會遵循擷取要求路徑的第一個sourceglob 指定的規則。
舉例來說,如果您為 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 } ]