您可以使用自己的网域而非 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 之前的网址部分称为“网址前缀”,包含自定义动态链接网域和路径前缀。创建动态链接时,您需要提供网址前缀。
设置自定义网域需要 Firebase 项目的 Editor 或 Owner 权限。
将您的网域用于动态链接
您可以为动态链接使用与网页、通用链接和应用链接相同的网域,但这样做必须注意确保您的动态链接网址不会与您的网址冲突。如果您将动态链接配置为使用特定网址前缀,系统会将以该前缀开头的所有网址都视为动态链接,因此您不可使用具有该前缀的网址指向普通托管内容。
例如,如果您要创建指向资源 https://example.com/my-resource
(网页、通用链接或应用链接)的动态链接,不能将 https://example.com/
用作动态链接网址前缀,因为这样做会导致 https://example.com/my-resource
被视为动态链接。
相反,您必须使用具有不同网域或不同路径前缀的网址前缀。
因此,以下长动态链接(和等效短链接)将无法正常工作,因为 link
参数指定的网址以动态链接网址前缀 https://example.com/
开头:
https://example.com/?link=https://example.com/my-resource https://example.com/?link=https://example.com/resources/my-resource
但以下长动态链接(和等效的短链接)可以正常工作,因为网址前缀与 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 控制台中完成自定义网域设置。为此,请执行以下操作:
如果您尚未为项目设置 Firebase Hosting,请打开 Firebase 控制台的“Hosting”页面,点击开始使用,然后按照设置说明依次完成点击。此时,您无需完成指定步骤。
打开 Firebase 控制台的“Dynamic Links”页面。
如果您之前未使用过 Dynamic Links,请点击开始使用。否则,请从下拉菜单中点击添加网址前缀。
然后,完成设置向导,并在出现系统提示时指定要使用的网域和路径前缀。
仅限 iOS:在 Xcode 项目的
Info.plist
文件中,创建一个名为FirebaseDynamicLinksCustomDomains
的键,并将其设置为应用的动态链接网址前缀。例如:<key>FirebaseDynamicLinksCustomDomains</key> <array> <string>https://example.com/link</string> <string>https://example.com/promos</string> </array>
手动设置自定义网域
在某些情况下,您必须手动设置自定义网域,例如,如果您已经为动态链接设置了自定义网域并希望添加其他网域,或者如果您要添加已关联到 Hosting 站点的网域。
为此,请执行以下操作:
将您的网域关联到 Firebase Hosting(如果您尚未关联)。
使用 Firebase Hosting 设置您的网域,需要在本地项目目录中创建配置文件
firebase.json
。更新到最新版本的 Firebase CLI(6.5.0 或更高版本)。
在您项目的
firebase.json
文件中为动态链接配置 Hosting 站点。如果您的项目有多个站点,请务必配置关联到您要使用的网域的站点。将
appAssociation
设置为AUTO
。设置完成后,Hosting 会在收到相应请求时动态生成assetlinks.json
和apple-app-site-association
文件。将重写规则的
dynamicLinks
设为true
,以指定要用于动态链接的路径前缀。对这些路径的请求会被代理到动态链接。与将路径重写为网址的规则不同,动态链接重写规则不可包含正则表达式。
如果您的站点有多个重写规则,请注意 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
部署您的 Hosting 配置更改:
firebase deploy --only hosting
(可选)您可以使用 Hosting REST API 检查已部署的
firebase.json
内容。仅限 iOS:在 Xcode 项目的
Info.plist
文件中,创建一个名为FirebaseDynamicLinksCustomDomains
的键,并将其设置为应用的动态链接网址前缀。例如:<key>FirebaseDynamicLinksCustomDomains</key> <array> <string>https://example.com/promos</string> <string>https://example.com/links/share</string> </array>
动态链接和托管内容的优先级顺序
对于动态链接,请特别注意托管内容的优先级顺序。
- 确保动态链接网址前缀不与优先级较高的托管配置冲突(例如,托管的静态内容的优先级始终高于重写内容)。
- 在
rewrites
特性中,Hosting 响应将遵循捕获所请求路径的第一个source
glob 指定的规则。
例如,如果您为 your-domain/source-path/link-suffix
设置了动态链接,但同时在 your-domain/source-path/index.html
也有静态内容,则静态内容的优先级更高。最终用户看到的将是 index.html
,而非动态链接。同样,如果您在 your-domain/source-path/link-suffix
有静态内容,则最终用户看到的将是静态内容,而非动态链接。
如果要为动态链接和托管内容使用相同的品牌信息,不妨通过下列方法处理动态链接网址前缀:
将
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 } ]