在使用page.link URL前缀(当时唯一的选项)之前,我已经在其他项目中创建了Firebase动态链接。但是,今天为新项目启用动态链接时,不再显示该选项。 docs for custom domains似乎今天已更新。不幸的是,尽管他们提供了一些有用的示例,但并未说明如何以我能理解的方式解决我的问题。
因此,此消息似乎表明我需要“将链接放在子路径下”。在我看来,在此处添加/link
路径前缀应该可以实现?但是在进行了更改之后,我得到了相同的错误消息。
您似乎已经在此托管站点上提供了内容。将链接放在子路径下,以避免与现有内容冲突。
我想尝试解决此问题,我去了我的项目并添加了建议的Hosting配置并进行了部署。
firebase.json:
{
"hosting": {
"public": "dist",
"ignore": [
"**/.*"
],
"appAssociation": "AUTO",
"rewrites": [
{
"source": "/link/**",
"dynamicLinks": true
},
{
"source": "**",
"destination": "/index.html"
}
]
}
}
即使等待了一个小时,我仍然遇到相同的错误,而且我不知道该怎么办。
请注意,由于我在www.devintent.com上托管了Angular单页应用程序,因此我将重写为/index.html
。
无论我做什么,都会出现此错误,并且Continue
按钮保持禁用状态。我尝试使用裸域devintent.com而不是www.devintent.com,但这无济于事。我尝试使用links.devintent.com,但遇到了相同的错误。
如果我从disabled
按钮中手动删除Continue
,则会收到以下错误消息:
这链接到docs for manually configuring hosting for dynamic links,其中有一些我已经完成的步骤。单击Check Again
按钮只会使我回到上面第一张图片中的相同错误。
不使用自定义域的解决方法
我现在很高兴使用page.link
链接,我只需要创建一个动态链接并对此任务进行解锁,但是我无法在控制台中找到允许我使用的任何方法可以做到这一点。
对此进行更新:我发现我需要将子域添加到page.link
URL中。工具提示最后会显示“或Google提供的免费域(例如,yourapp.page.link)”。我本来希望它不那么突出(因为我已经很长时间没有找到它了)。目前,对我来说,使用devintent.page.link
可以解决。
但是,我不确定自定义域配置为何不起作用,如果在具有现有托管配置和自定义域的项目中出现此类复杂情况,为什么它会成为默认设置。
答案 0 :(得分:7)
我对根(apex)域也有类似的问题。基本上,如果前缀(在我的情况下为顶点域)是给出200个状态响应的URL,则它将不被接受。在我的情况下,index.html
文件夹中有一个public
文件。我将其重命名为其他名称,并且可以正常工作。
这是我的firebase.json
:
{
"hosting": {
"public": "public",
"ignore": [
"firebase.json",
"**/.*",
"**/node_modules/**"
],
"appAssociation": "AUTO",
"rewrites": [ { "source": "/**", "dynamicLinks": true } ]
}
}
答案 1 :(得分:3)
我遇到了同样的问题,并且遇到了同样的错误。问题是我将所有路由重定向到 index.html
。解决方案是通过排除将路由限制为 index.html
。
"rewrites": [
{
"source": "/link/**",
"dynamicLinks": true
},
{
"source": "!/link/**",
"destination": "/index.html"
}
]
将新配置部署到Firebase Hosting之后,可以根据需要使用mydomain.com/link。
答案 2 :(得分:2)
在使自定义域正常运行方面,您所做的一切看起来都是正确的。我想知道您是否正在使用最新版本的firebase-tools(CLI)。在版本6.5.0中添加了对动态链接的自定义域支持。
好消息是page.link支持仍然存在,但在新的UI流程中并不那么明显。获取page.link域的方法是开始键入所需的子域,并且应该在UI中弹出一个建议。我提供了一个屏幕截图,以显示其工作原理。
希望这会有所帮助,
杰夫
答案 3 :(得分:1)
对我们来说,问题是我们使用默认的Firebase托管站点在所有路线(“ / **”)上为我们的Web应用程序提供服务。从动态链接的另一个域为我们的Web应用程序提供服务是我们应采取的方式,因为链接不应干扰Web应用程序。
要提供来自不同于我们Web应用程序的其他域的链接,我创建了一个仅用于链接的新站点,并将我们的自定义域附加到该站点。现在,我们有两个Firebase托管站点。第一个默认值用于我们的网络应用程序,第二个默认值用于Firebase动态链接。
此设置完成后,带有链接到第二个Firebase托管站点的自定义域的动态链接可以正常工作。 有关更多详细信息,请参见屏幕截图:
EDIT1:@cocacrave请求的网络应用的firebase.json:
mydf = DataFrame(a = 1:4, b = repeat(1:2,2), c=4:-1:1)
bypreserve(mydf, :b, x -> sum(x.a))
│ Row │ a │ b │ c │ x1
│ │ Int64 │ Int64 │ Int64 │Int64
├─────┼───────┼───────┼───────┤───────
│ 1 │ 1 │ 1 │ 4 │ 4
│ 2 │ 2 │ 2 │ 3 │ 6
│ 3 │ 3 │ 1 │ 2 │ 4
│ 4 │ 4 │ 2 │ 1 │ 6
答案 4 :(得分:1)
"appAssociation": "AUTO",
"rewrites": [
{
"source": "/page/**",
"destination": "/index.html"
},
{
"source": "/link/**",
"dynamicLinks": true
}
]
有效!我猜是由“源”的原始配置引起的错误:“ **”。范围可能太大吗?尽管医生说“ / __ / *”具有较高的优先级。 (https://firebase.google.com/docs/hosting/full-config?authuser=0#hosting_priority_order)
答案 5 :(得分:0)
如果您在使用子域时遇到此错误,则此解决方案对我有用:
{
"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
}
]
}
]
}