Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

為動態鏈接設置自定義域

你可以有超過您的動態鏈接更大的控制權'用你自己的域名,而不是品牌塑造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 前綴。

因此,如預期,因為由指定的URL下面的長篇動態鏈接(和等效短鏈接)將行不通link參數開始與動態鏈接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網址:

 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. 如果您還沒有建立火力地堡主機為您的項目中,打開主機頁面的火力地堡控制台,點擊開始使用,並通過點擊安裝說明。您此時不必完成指示的步驟。

  2. 打開動態鏈接頁面的火力地堡控制台。

  3. 如果你以前沒有使用動態鏈接,點擊開始使用。否則,請點擊添加網址前綴從下拉菜單中。

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

  4. 僅適用於iOS:在您的Xcode項目的Info.plist文件,創建一個名為關鍵FirebaseDynamicLinksCustomDomains並將其設置為你的應用程序的動態鏈接網址的前綴。例如:

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

手動設置自定義域

在某些情況下,例如當您已經為動態鏈接設置了自定義域並想要添加另一個域時,或者當您添加已連接到託管站點的域時,您必須手動設置自定義域。

這樣做:

  1. 連接您的域名託管火力地堡如果您還沒有這樣做。

    與火力地堡主機設置您的域名包括創建配置文件firebase.json在您的本地項目目錄。

  2. 更新到火力地堡CLI的最新版本(V6.5.0或更高版本)。

  3. 配置動態鏈接你的網站託管在項目的firebase.json文件。如果您的項目有多個站點,請務必配置連接到您要使用的域的站點。

    • 設置appAssociationAUTO 。使用此設置,動態主機產生assetlinks.jsonapple-app-site-association請求時,他們的文件。

    • 指定要通過設置重寫規則使用動態鏈接路徑前綴dynamicLinks設置為true 。對這些路徑的請求會被代理到動態鏈接。

      與重寫 URL 路徑的規則不同,動態鏈接重寫規則不能包含正則表達式。

      如果您的站點有多個重寫規則,請注意 Hosting 會執行與請求匹配的第一個重寫規則。

    例如:

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

    通過上述配置,您可以創建動態鏈接與網址的前綴,如下面的例子:

    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

    (可選)您可以檢查部署firebase.json使用內容託管REST API

  5. 僅適用於iOS:在您的Xcode項目的Info.plist文件,創建一個名為關鍵FirebaseDynamicLinksCustomDomains並將其設置為你的應用程序的動態鏈接網址的前綴。例如:

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

動態鏈接和託管的優先順序

對於動態鏈接,特別了解的託管優先順序

  • 確保您的動態鏈接 URL 前綴不與更高優先級的託管配置衝突(例如,託管的靜態內容始終優先於重寫)。
  • rewrites屬性,託管響應將遵守規則指定第一source水珠捕獲的請求的路徑

例如,如果你設置了一個動態鏈接為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
    } ]