為 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 之前的部分稱為「網址前置字元」,包含自訂 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 控制台中完成自訂網域的完整設定。如要這樣做,請按照下列步驟操作:

  1. 如果您尚未為專案設定 Firebase Hosting,請開啟 Firebase 主控台的 Hosting 頁面,按一下「Get Started」,然後依序點選設定操作說明。您目前不必完成所示步驟。

  2. 開啟 Firebase 主控台的 Dynamic Links 頁面

  3. 如果您之前沒有使用過 Dynamic Links,請按一下「開始使用」。否則請點選下拉式選單中的「Add URL prefix」

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

  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 設定自訂網域,但想新增其他網域,或是新增的網域已連結至 Hosting 網站,您就必須手動設定自訂網域。

方法如下:

  1. 如果尚未將網域連結至 Firebase Hosting,請連結網域

    使用 Firebase Hosting 設定網域時,您需要在本機專案目錄中建立設定檔 firebase.json

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

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

    • appAssociation 設為 AUTO。在這個設定下,Hosting 會在收到要求時動態產生 assetlinks.jsonapple-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

  4. 部署 Hosting 設定變更:

    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 LinksHosting 的優先順序

針對 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 LinksHosting 使用相同的品牌,請考慮使用下列任一選項做為 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
    } ]