无法使用自定义域将 Firebase 动态链接添加到项目
Unable to add Firebase Dynamic Links to a project using a custom domain
在使用 page.link URL 前缀(当时唯一的选择)之前,我已经在其他项目中创建了 Firebase Dynamic Links。但是,在今天为新项目启用动态 Link 时,这似乎不再是一个选项。看来 docs for custom domains 今天更新了。不幸的是,虽然他们提供了一些有用的示例,但他们没有以我能理解的方式解释如何解决我的问题。
所以这条消息似乎表明我需要"Put links under a subpath"。在我看来,在这里添加 /link
路径前缀应该可以做到这一点?但是在进行更改之后,我收到了相同的错误消息。
It looks like you already have content served on this Hosting site. Put links under a subpath to avoid conflicts with existing content.
为了尝试解决这个问题,我转到了我的项目并添加了建议的托管配置并进行了部署。
firebase.json:
{
"hosting": {
"public": "dist",
"ignore": [
"**/.*"
],
"appAssociation": "AUTO",
"rewrites": [
{
"source": "/link/**",
"dynamicLinks": true
},
{
"source": "**",
"destination": "/index.html"
}
]
}
}
即使等了一个小时,我仍然收到同样的错误,我不知道该怎么办。
请注意,我重写了 /index.html
,因为我有一个 Angular 单页应用程序托管在 www.devintent.com。
无论我做什么,我总是收到此错误并且 Continue
按钮保持禁用状态。我尝试使用我的裸域 devintent.com 而不是 www.devintent.com,但这没有帮助。我尝试使用 links.devintent.com,但得到了同样的错误。
如果我从 Continue
按钮中手动删除 disabled
,则会收到此错误消息:
link 到 docs for manually configuring hosting for dynamic links,其中有一些我已经完成的步骤。单击 Check Again
按钮只会让我回到上面第一张图片中的相同错误。
不使用自定义域的解决方法
此时我很高兴使用page.link
link,我只需要创建一个动态Link并在这个任务上畅通无阻,但我不能在控制台中找出任何方法让我也可以这样做。
更新:我发现我需要将子域添加到 page.link
URL。工具提示最后说 "or a free Google-provided domain (for example, yourapp.page.link)" 。这没有我想要的那么突出(因为我已经很长时间没有找到它了)。使用 devintent.page.link
目前对我来说是一种解决方法。
但是,我不确定为什么自定义域配置不起作用,以及如果具有现有托管配置和自定义域的项目存在这样的复杂性,为什么它会成为默认设置。
关于让您的自定义域正常工作,您所做的一切看起来都是正确的。我想知道您是否使用最新版本的 firebase-tools (CLI)。在版本 6.5.0.
中添加了对动态 links 的自定义域支持
好消息是 page.link 支持仍然存在,但在新的 UI 流程中没有那么明显。获得 page.link 域的方法是开始输入您想要的子域,并且应该会在 UI 中弹出一个建议。我附上了一张截图来展示它是如何工作的。
正在添加页面 link 域图像
希望这对您有所帮助,
杰夫
我遇到了同样的问题并得到了同样的错误。问题是我将所有路由重定向到 index.html
。解决方案是通过排除将路由限制为 index.html
。
"rewrites": [
{
"source": "/link/**",
"dynamicLinks": true
},
{
"source": "!/link/**",
"destination": "/index.html"
}
]
将新配置部署到 Firebase 托管后,我可以根据需要使用 mydomain.com/link。
我对根(顶点)域有类似的问题。基本上,如果前缀(在我的例子中是顶点域)是一个 URL 给出 200 状态响应,它不会被接受。 在我的例子中有一个index.html
文件在 public
文件夹中。我将其重命名为其他名称并且有效。
这是我的 firebase.json
:
{
"hosting": {
"public": "public",
"ignore": [
"firebase.json",
"**/.*",
"**/node_modules/**"
],
"appAssociation": "AUTO",
"rewrites": [ { "source": "/**", "dynamicLinks": true } ]
}
}
对我们来说,问题是我们使用默认的 Firebase 托管站点在所有路径(“/**”)上为我们的网络应用程序提供服务。从不同的域提供我们的网络应用程序,动态链接是我们应该采用的方式,因为链接不应干扰网络应用程序。
为了提供来自与我们的网络应用程序不同的域的链接,我创建了一个新站点,仅用于链接,并将我们的自定义域附加到该站点。现在我们有两个 Firebase 托管站点。第一个默认用于我们的网络应用程序,第二个用于 Firebase 动态链接。
在此之后,使用附加到第二个 Firebase 托管站点的自定义域设置动态链接后,工作完美无缺。
有关更多详细信息,请参见屏幕截图:
EDIT1:网络应用程序的 firebase.json 根据@cocacrave 的要求:
{
"hosting": {
"public": "public",
"ignore": [
"firebase.json",
"**/.*",
"**/node_modules/**"
],
"rewrites": [
{
"source": "**",
"function": "nuxtApp"
}
]
}
}
"appAssociation": "AUTO",
"rewrites": [
{
"source": "/page/**",
"destination": "/index.html"
},
{
"source": "/link/**",
"dynamicLinks": true
}
]
有效!估计是原来的配置"source":"**"导致的错误。可能是范围太大了?虽然医生说“/__/*”具有高优先级。 (https://firebase.google.com/docs/hosting/full-config?authuser=0#hosting_priority_order)
如果您在使用子域时遇到此错误,此解决方案对我有用:
{
"hosting": [
{
"target": "app",
"public": "build",
"ignore": [
"firebase.json",
"**/.*",
"**/node_modules/**"
],
"appAssociation": "AUTO",
"rewrites": [
{
"source": "/**",
"destination": "/index.html"
}
]
},
{
"target": "links",
"public": "build",
"ignore": [
"**"
],
"appAssociation": "AUTO",
"redirects": [
{
"source": "/",
"destination": "{{your domain}}",
"type": 302
}
],
"rewrites": [
{
"source": "/**",
"dynamicLinks": true
}
]
},
{
"target": "invite",
"public": "build",
"ignore": [
"**"
],
"redirects": [
{
"source": "/",
"destination": "{{your domain}}",
"type": 302
}
],
"appAssociation": "AUTO",
"rewrites": [
{
"source": "/**",
"dynamicLinks": true
}
]
}
]
}
在使用 page.link URL 前缀(当时唯一的选择)之前,我已经在其他项目中创建了 Firebase Dynamic Links。但是,在今天为新项目启用动态 Link 时,这似乎不再是一个选项。看来 docs for custom domains 今天更新了。不幸的是,虽然他们提供了一些有用的示例,但他们没有以我能理解的方式解释如何解决我的问题。
所以这条消息似乎表明我需要"Put links under a subpath"。在我看来,在这里添加 /link
路径前缀应该可以做到这一点?但是在进行更改之后,我收到了相同的错误消息。
It looks like you already have content served on this Hosting site. Put links under a subpath to avoid conflicts with existing content.
为了尝试解决这个问题,我转到了我的项目并添加了建议的托管配置并进行了部署。
firebase.json:
{
"hosting": {
"public": "dist",
"ignore": [
"**/.*"
],
"appAssociation": "AUTO",
"rewrites": [
{
"source": "/link/**",
"dynamicLinks": true
},
{
"source": "**",
"destination": "/index.html"
}
]
}
}
即使等了一个小时,我仍然收到同样的错误,我不知道该怎么办。
请注意,我重写了 /index.html
,因为我有一个 Angular 单页应用程序托管在 www.devintent.com。
无论我做什么,我总是收到此错误并且 Continue
按钮保持禁用状态。我尝试使用我的裸域 devintent.com 而不是 www.devintent.com,但这没有帮助。我尝试使用 links.devintent.com,但得到了同样的错误。
如果我从 Continue
按钮中手动删除 disabled
,则会收到此错误消息:
Check Again
按钮只会让我回到上面第一张图片中的相同错误。
不使用自定义域的解决方法
此时我很高兴使用page.link
link,我只需要创建一个动态Link并在这个任务上畅通无阻,但我不能在控制台中找出任何方法让我也可以这样做。
更新:我发现我需要将子域添加到 page.link
URL。工具提示最后说 "or a free Google-provided domain (for example, yourapp.page.link)" 。这没有我想要的那么突出(因为我已经很长时间没有找到它了)。使用 devintent.page.link
目前对我来说是一种解决方法。
但是,我不确定为什么自定义域配置不起作用,以及如果具有现有托管配置和自定义域的项目存在这样的复杂性,为什么它会成为默认设置。
关于让您的自定义域正常工作,您所做的一切看起来都是正确的。我想知道您是否使用最新版本的 firebase-tools (CLI)。在版本 6.5.0.
中添加了对动态 links 的自定义域支持好消息是 page.link 支持仍然存在,但在新的 UI 流程中没有那么明显。获得 page.link 域的方法是开始输入您想要的子域,并且应该会在 UI 中弹出一个建议。我附上了一张截图来展示它是如何工作的。
正在添加页面 link 域图像
希望这对您有所帮助,
杰夫
我遇到了同样的问题并得到了同样的错误。问题是我将所有路由重定向到 index.html
。解决方案是通过排除将路由限制为 index.html
。
"rewrites": [
{
"source": "/link/**",
"dynamicLinks": true
},
{
"source": "!/link/**",
"destination": "/index.html"
}
]
将新配置部署到 Firebase 托管后,我可以根据需要使用 mydomain.com/link。
我对根(顶点)域有类似的问题。基本上,如果前缀(在我的例子中是顶点域)是一个 URL 给出 200 状态响应,它不会被接受。 在我的例子中有一个index.html
文件在 public
文件夹中。我将其重命名为其他名称并且有效。
这是我的 firebase.json
:
{
"hosting": {
"public": "public",
"ignore": [
"firebase.json",
"**/.*",
"**/node_modules/**"
],
"appAssociation": "AUTO",
"rewrites": [ { "source": "/**", "dynamicLinks": true } ]
}
}
对我们来说,问题是我们使用默认的 Firebase 托管站点在所有路径(“/**”)上为我们的网络应用程序提供服务。从不同的域提供我们的网络应用程序,动态链接是我们应该采用的方式,因为链接不应干扰网络应用程序。
为了提供来自与我们的网络应用程序不同的域的链接,我创建了一个新站点,仅用于链接,并将我们的自定义域附加到该站点。现在我们有两个 Firebase 托管站点。第一个默认用于我们的网络应用程序,第二个用于 Firebase 动态链接。
在此之后,使用附加到第二个 Firebase 托管站点的自定义域设置动态链接后,工作完美无缺。
有关更多详细信息,请参见屏幕截图:
EDIT1:网络应用程序的 firebase.json 根据@cocacrave 的要求:
{
"hosting": {
"public": "public",
"ignore": [
"firebase.json",
"**/.*",
"**/node_modules/**"
],
"rewrites": [
{
"source": "**",
"function": "nuxtApp"
}
]
}
}
"appAssociation": "AUTO",
"rewrites": [
{
"source": "/page/**",
"destination": "/index.html"
},
{
"source": "/link/**",
"dynamicLinks": true
}
]
有效!估计是原来的配置"source":"**"导致的错误。可能是范围太大了?虽然医生说“/__/*”具有高优先级。 (https://firebase.google.com/docs/hosting/full-config?authuser=0#hosting_priority_order)
如果您在使用子域时遇到此错误,此解决方案对我有用:
{
"hosting": [
{
"target": "app",
"public": "build",
"ignore": [
"firebase.json",
"**/.*",
"**/node_modules/**"
],
"appAssociation": "AUTO",
"rewrites": [
{
"source": "/**",
"destination": "/index.html"
}
]
},
{
"target": "links",
"public": "build",
"ignore": [
"**"
],
"appAssociation": "AUTO",
"redirects": [
{
"source": "/",
"destination": "{{your domain}}",
"type": 302
}
],
"rewrites": [
{
"source": "/**",
"dynamicLinks": true
}
]
},
{
"target": "invite",
"public": "build",
"ignore": [
"**"
],
"redirects": [
{
"source": "/",
"destination": "{{your domain}}",
"type": 302
}
],
"appAssociation": "AUTO",
"rewrites": [
{
"source": "/**",
"dynamicLinks": true
}
]
}
]
}