通过使用您自己的域而不是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 前缀时,所有以该前缀开头的 URL 都被视为动态链接,因此您不能使用具有该前缀的 URL 指向普通的托管内容。
例如,如果您想创建资源https://example.com/my-resource
的动态链接(网页、通用链接或应用程序链接),则不能使用https://example.com/
作为动态链接 URL 前缀,因为这样做会导致https://example.com/my-resource
被视为动态链接。相反,您必须使用具有不同域或不同路径前缀的 URL 前缀。
因此,以下长格式动态链接(和等效的短链接)将无法按预期工作,因为link
参数指定的网址以动态链接网址前缀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 控制台中完全设置自定义域。为此:
如果您尚未为您的项目设置 Firebase 托管,请打开 Firebase 控制台的托管页面,点击开始,然后点击设置说明。此时您不必完成指示的步骤。
打开 Firebase 控制台的动态链接页面。
如果您以前没有使用过动态链接,请点击开始使用。否则,请从下拉菜单中单击添加 URL 前缀。
然后,完成设置向导,在出现提示时指定要使用的域和路径前缀。
仅限 iOS :在您的 Xcode 项目的
Info.plist
文件中,创建一个名为FirebaseDynamicLinksCustomDomains
的键并将其设置为您应用的动态链接 URL 前缀。例如:<key>FirebaseDynamicLinksCustomDomains</key> <array> <string>https://example.com/link</string> <string>https://example.com/promos</string> </array>
手动设置自定义域
在某些情况下,例如当您已经为动态链接设置了一个自定义域并想要添加另一个域时,或者当您添加一个已经连接到托管站点的域时,您必须手动设置您的自定义域。
为此:
将您的域连接到 Firebase 托管(如果您尚未这样做)。
使用 Firebase 托管设置域包括在本地项目目录中创建配置文件
firebase.json
。更新到最新版本的 Firebase CLI (v6.5.0 或更高版本)。
在项目的
firebase.json
文件中为动态链接配置托管站点。如果您的项目有多个站点,请务必配置连接到您要使用的域的站点。将
appAssociation
设置为AUTO
。使用此设置,Hosting 在请求时动态生成assetlinks.json
和apple-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
部署您的托管配置更改:
firebase deploy --only hosting
(可选)您可以使用Hosting REST API检查已部署的
firebase.json
内容。仅限 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 } ]