為 Dynamic Links 設定自訂網域

您可以使用自己的網域 (而非 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 之前的部分稱為「網址前置字串」,內含您的自訂動態連結網域和路徑前置字串。您必須在建立動態連結時提供網址前置字串。

如要設定自訂網域,您必須具備 Firebase 專案的「編輯者」或「擁有者」權限。

將您的網站網域用於 Dynamic Links

您可以針對動態連結和網頁、通用連結和應用程式連結使用相同的網域,但如果您要這麼做,請務必注意動態連結網址不會與網址發生衝突。當您設定動態連結使用特定網址前置字元時,系統會將開頭為該前置字串的所有網址視為動態連結,因此就無法使用含有該前置字串的網址指向一般代管內容。

舉例來說,如果您想為 https://example.com/my-resource 資源 (網頁、通用連結或應用程式連結) 建立動態連結,就不能使用 https://example.com/ 做為 Dynamic Links 網址前置字元,因為這麼做會導致系統將 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 控制台中完全設定自訂網域。方法如下:

  1. 如果您尚未為專案設定 Firebase 託管,請開啟 Firebase 控制台的「託管」頁面,按一下「開始使用」,並按設定指示操作。您目前不必完成指示的步驟。

  2. 開啟 Firebase 控制台的「Dynamic Links」(動態連結) 頁面

  3. 如果您未曾使用過 Dynamic Links,請按一下「開始使用」。否則,請在下拉式選單中按一下「Add URLprefix」(新增網址前置字串)

    接著,完成設定精靈,在系統提示時指定要使用的網域和路徑前置字串。

  4. 僅限 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 設定了自訂網域,而您想要新增其他網域),或是新增已連結至託管網站的網域時,必須手動設定自訂網域。

方法如下:

  1. 如果您尚未將網域連結至 Firebase 託管,請先執行這項操作。

    使用 Firebase 託管設定網域包括在本機專案目錄中建立設定檔 firebase.json

  2. 更新至最新版 Firebase CLI (6.5.0 以上版本)。

  3. 在專案的 firebase.json 檔案中設定「託管」網站以使用 Dynamic Links。如果您的專案有多個網站,請務必設定連結至您要使用的網域的網站。

    • appAssociation 設為 AUTO。有了這項設定,託管會在收到要求時動態產生 assetlinks.jsonapple-app-site-association 檔案。

    • 將重寫規則的 dynamicLinks 設為 true,以指定要用於 Dynamic Links 的路徑前置字串。系統會將傳送至這些路徑的要求 經由 Proxy 傳送至 Dynamic Links

      動態連結重寫規則與重寫網址路徑的規則不同,不能包含規則運算式。

      請注意,如果網站有多個重寫規則,主機會執行符合要求的第一個重寫規則。

    例如:

    "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

  4. 部署託管設定變更:

    firebase deploy --only hosting

    (選用) 您可以使用 Hosting REST API 檢查已部署的 firebase.json 內容。

  5. 僅限 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 和託管的優先順序

針對 Dynamic Links,請特別留意代管優先順序

  • 確保 Dynamic Links 網址的前置字串不會與優先順序較高的託管設定發生衝突 (例如,代管的靜態內容一律優先於重寫)。
  • rewrites 屬性中,託管回應會遵循第一個擷取要求路徑的 source glob 指定的規則。

舉例來說,如果您為 your-domain/source-path/link-suffix 設定了動態連結,但 your-domain/source-path/index.html 中有靜態內容,則系統會優先採用靜態內容。使用者看到的是 index.html,而非動態連結。同樣地,如果您在 your-domain/source-path/link-suffix 有靜態內容,使用者會看到靜態內容,而非動態連結。

如果您想在 Dynamic Links 和「託管」中使用相同的品牌宣傳元素,請考慮採用下列其中一種方式來設定 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
    } ]