為 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 (v6.5.0 或更新版本)。

  3. 在專案的 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

  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 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
    } ]