Google is committed to advancing racial equity for Black communities. See how.
本頁面由 Cloud Translation API 翻譯而成。
Switch to English

為動態鏈接設置自定義域

通過使用您自己的域而不是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 Hosting,請打開Firebase控制台的Hosting頁面 ,單擊Get Started ,然後單擊整個設置說明。您此時不必完成指示的步驟。

  2. 打開Firebase控制台的“ 動態鏈接”頁面

  3. 如果您以前從未使用過動態鏈接,請點擊入門 。否則,請從下拉菜單中單擊添加URL前綴

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

  4. 僅限iOS :在Xcode項目的Info.plist文件中,創建一個名為FirebaseDynamicLinksCustomDomains的密鑰,並將其設置為應用程序的Dynamic Links URL前綴。例如:

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

手動設置自定義域

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

為此:

  1. 尚未將您的域連接到Firebase Hosting

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

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

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

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

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

      與重寫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的密鑰,並將其設置為應用程序的Dynamic Links 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而不是Dynamic Link。同樣,如果您在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子域, links.example.com重寫規則可能是:

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