Join us in person and online for Firebase Summit on October 18, 2022. Learn how Firebase can help you accelerate app development, release your app with confidence, and scale with ease. Register now

為動態鏈接設置自定義域

透過集合功能整理內容 你可以依據偏好儲存及分類內容。

通過使用自己的域而不是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

link-suffix之前的 URL 部分稱為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 託管(如果您尚未這樣做)。

    使用 Firebase 託管設置您的域包括在本地項目目錄中創建配置文件firebase.json

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

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

    • appAssociation設置為AUTO 。使用此設置,Hosting 會在請求時動態生成assetlinks.jsonapple-app-site-association文件。

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

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

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

    例如:

    "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屬性中,Hosting 響應將遵循捕獲請求路徑的第一個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
    } ]