為 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,因此您無法使用這類網址指向一般代管內容。

舉例來說,如要為資源 (網頁、通用連結或應用程式連結) 建立 Dynamic Link,就不能使用 https://example.com/ 做為 Dynamic Links 網址前置字元,否則 https://example.com/my-resource 會被視為 Dynamic Linkhttps://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 Hosting,請開啟 Firebase 控制台的「Hosting」頁面,按一下「開始使用」,然後按照設定說明操作。您目前不必完成這些步驟。

  2. 開啟 Firebase 控制台的「Dynamic Links」頁面

  3. 如果尚未用過 Dynamic Links,請按一下「開始使用」。否則,請按一下下拉式選單中的「新增網址前置字元」

    然後完成設定精靈,並在系統提示時指定要使用的網域和路徑前置字元。

    中使用路徑前置字元 (例如 example.com/links) 或子網域 (links.example.com/)。
  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 檔案。

    • dynamicLinks 設為 true,並設定重新編寫規則,即可指定要用於 Dynamic Links 的路徑前置字元。對這些路徑的要求會轉送至 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 URL 前置字元不會與優先順序較高的代管設定衝突 (例如,代管的靜態內容一律優先於重寫)。
  • rewrites 屬性中,Hosting 回應會遵守第一個擷取所要求路徑的 source glob 所指定的規則

舉例來說,如果您為 Dynamic Link 設定 your-domain/source-path/link-suffix,但 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
    } ]