為動態連結設定自訂網域

透過使用您自己的網域而不是page.link子網域,您可以更好地控制動態連結的品牌。使用自訂網域,您可以建立動態鏈接,如下例所示:

https://example.com/link-suffix
https://example.com/links/promos/link-suffix
https://links.example.com/link-suffix
https://ex.amp.le/link-suffix

URL 中link-suffix之前的部分稱為URL 前綴,並且包含您的自訂動態連結網域和路徑前綴。建立動態連結時,您需要提供 URL 前綴。

設定自訂網域需要您的 Firebase 專案的編輯者或擁有者權限。

使用您的網域進行動態鏈接

您可以為動態連結和網頁、通用連結和應用程式連結使用相同的網域,但如果這樣做,則必須注意動態連結 URL 不得與 Web URL 衝突。當您將動態連結配置為使用特定 URL 前綴時,以該前綴開頭的所有 URL 都將被視為動態鏈接,因此您無法使用具有該前綴的 URL 來指向普通託管內容。

例如,如果您要建立指向資源https://example.com/my-resource (網頁、通用連結或應用程式連結)的動態鏈接,則不能使用https://example.com/作為動態連結URL 前綴,因為這樣做會導致https://example.com/my-resource被視為動態連結。相反,您必須使用具有不同網域或不同路徑前綴的 URL 前綴。

因此,以下長格式動態連結(以及等效的短連結)將無法如預期運作,因為link參數指定的 URL 以動態連結 URL 前綴https://example.com/開頭:

 https://example.com/?link=https://example.com/my-resource
 https://example.com/?link=https://example.com/resources/my-resource

但以下長格式動態連結(以及等效的短連結)可以使用,因為 URL 前綴不會與link URL 衝突:

 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 控制台的動態連結頁面

  3. 如果您以前沒有使用過動態鏈接,請按一下“開始使用” 。否則,請從下拉式選單中點選新增 URL 前綴

    然後,完成設定精靈,在出現提示時指定要使用的網域和路徑前綴。

  4. 僅限 iOS :在 Xcode 專案的Info.plist檔案中,建立一個名為FirebaseDynamicLinksCustomDomains的鍵,並將其設定為應用程式的動態連結 URL 前綴。例如:

    <key>FirebaseDynamicLinksCustomDomains</key>
    <array>
      <string>https://example.com/link</string>
      <string>https://example.com/promos</string>
    </array>
    

手動設定自訂域

在某些情況下,例如當您已經為動態連結設定了自訂網域並想要新增另一個網域時,或者當您新增已連線至託管網站的網域時,您必須手動設定自訂網域。

為此:

  1. 如果您尚未將您的網域連接到 Firebase Hosting,請將其連接到 Firebase Hosting

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

  2. 更新至最新版本的 Firebase CLI (v6.5.0 或更高版本)。

  3. 在專案的firebase.json檔案中為動態連結配置託管網站。如果您的專案有多個站點,請務必設定連接到您要使用的網域的站點。

    • appAssociation設定為AUTO 。透過此設置,託管會在請求時動態產生assetlinks.jsonapple-app-site-association檔案。

    • 透過設定重寫規則並將dynamicLinks設為true來指定要用於動態連結的路徑前綴。對這些路徑的請求將被代理到動態連結。

      與重寫 URL 路徑的規則不同,動態連結重寫規則不能包含正規表示式。

      如果您的網站有多個重寫規則,請注意託管會執行與要求相符的第一個重寫規則。

    例如:

    "hosting": {
      // ...
      "appAssociation": "AUTO",
      "rewrites": [
        {
          "source": "/promos/**",
          "dynamicLinks": true
        },
        {
          "source": "/links/share/**",
          "dynamicLinks": true
        }
      ]
    }
    

    透過上述配置,您可以建立帶有 URL 前綴的動態鏈接,如下例所示:

    https://your-domain/promos/link-suffix
    https://your-domain/links/share/link-suffix
    

    如果您僅將此網域用於動態鏈接,則可以使用來源路徑/**建立不帶路徑前綴的動態連結:

    {
      "source": "/**",
      "dynamicLinks": true
    }
    

    使用上述規則,您可以建立動態鏈接,如下例所示:

    https://your-domain/link-suffix

  4. 部署您的託管設定變更:

    firebase deploy --only hosting

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

  5. 僅限 iOS :在 Xcode 專案的Info.plist檔案中,建立一個名為FirebaseDynamicLinksCustomDomains的鍵,並將其設定為應用程式的動態連結 URL 前綴。例如:

    <key>FirebaseDynamicLinksCustomDomains</key>
    <array>
      <string>https://example.com/promos</string>
      <string>https://example.com/links/share</string>
    </array>
    

動態連結和託管的優先順序

對於動態鏈接,請特別注意託管優先順序

  • 確保您的動態連結 URL 前綴不會與優先順序較高的託管配置衝突(例如,託管靜態內容始終優先於重寫)。
  • rewrites屬性中,託管回應將遵循捕獲請求的路徑的第一個source glob指定的規則。

例如,如果您為your-domain / source-path / link-suffix設定動態鏈接,但your-domain / source-path /index.html處也有靜態內容,則靜態內容優先。最終用戶將看到index.html而不是動態連結。同樣,如果your-domain / source-path / link-suffix中有靜態內容,最終用戶將看到靜態內容而不是動態連結。

如果您想對動態連結和託管使用相同的品牌,請考慮為動態連結 URL 前綴使用以下選項之一:

  • 設定source屬性以符合路徑前綴。例如,如果您有一個自訂網域example.com ,您的重寫規則可以是:

    // Domain is example.com
    "rewrites": [ {
      "source": "/links/**",  // Dynamic Links start with "https://example.com/links/"
      "dynamicLinks": true
    } ]
    
  • 設定用於動態連結的子網域,然後設定source屬性以符合該子網域。例如,如果您有links.example.com的子網域,則您的重寫規則可以是:

    // Domain is links.example.com
    "rewrites": [ {
      "source": "/**",  // Dynamic Links start with "https://links.example.com/"
      "dynamicLinks": true
    } ]