使用自定义域名时无法将Firebase动态链接添加到项目中

69

我以前在其他项目中使用 page.link URL 前缀创建了Firebase动态链接(当时是唯一的选择)。但是,今天启用新项目的动态链接时,似乎已不再提供该选项。看起来自定义域文档今天已经更新。不幸的是,虽然他们提供了一些有用的示例,但他们没有以我能理解的方式解释如何解决我的问题。

为自定义域配置动态链接时出错

因此,这条消息似乎表明我需要“将链接放在子路径下”。 在这里添加 /link 路径前缀应该就可以实现这一点? 但是,在进行更改后,我收到了相同的错误消息。

看起来您已经在此 Hosting 站点上提供了内容。将链接放在子路径下以避免与现有内容发生冲突。

为了尝试解决这个问题,我去了我的项目并添加了建议的Hosting配置并部署了它。

firebase.json:

{
  "hosting": {
    "public": "dist",
    "ignore": [
      "**/.*"
    ],
    "appAssociation": "AUTO",
    "rewrites": [
      {
        "source": "/link/**",
        "dynamicLinks": true
      },
      {
        "source": "**",
        "destination": "/index.html"
      }
    ]
  }
}

即使等待了一个小时,我仍然收到相同的错误消息,并且不知道该怎么办。

请注意,我将重写为/index.html,因为我在www.devintent.com上托管了一个Angular单页应用程序。

无论我做什么,我都一直收到这个错误消息,并且继续按钮始终无法使用。我尝试使用我的裸域名devintent.com而不是www.devintent.com,但这并没有帮助。我尝试使用links.devintent.com,但是得到了相同的错误。

如果我手动从继续按钮中删除disabled,那么我会收到以下错误消息:

configure path prefix manually message 这链接到手动配置动态链接托管文档,其中包含一些我已经完成的步骤。单击再次检查按钮只会使我回到上面第一张图片中的相同错误。


不使用自定义域名的解决方法

此时,我很高兴使用page.link链接,我只需要创建一个动态链接并在此任务上解除阻止,但我无法找到任何方法在控制台中允许我这样做。

关于此问题的更新:我弄清楚我需要将子域添加到page.link URL中。工具提示说“或者使用免费的Google提供的域名(例如,yourapp.page.link)”。这比我想象的要不太显眼(因为我花了很长时间才找到它)。对我而言,使用devintent.page.link作为一种解决方法现在可以使用。


但是,我不确定为什么自定义域名配置没有起作用,如果项目存在托管配置和自定义域名,则为什么会是默认值。

6个回答

59

我遇到了同样的问题,得到了相同的错误。问题在于我将所有路由都重定向到了index.html。解决方案是通过排除来限制路由到index.html

"rewrites": [
  {
    "source": "/link/**",
    "dynamicLinks": true
  },
  {
    "source": "!/link/**",
    "destination": "/index.html"
  }
]
在将新配置部署到 Firebase Hosting 后,我可以按照预期使用 mydomain.example/link

1
就是这样!在遇到错误时,Firebase 的帮助文档中应该明确说明。 - oldwizard
1
'!'符号用作否定;不以“/link/**”开头的URL将被重定向到index.html。 - Erik Martín Jordán
1
这真的很有帮助!谢谢Erik! - damingzi
1
真遗憾,最佳答案在底部。 - JIE WANG
1
如果您想要以不同前缀开头的多个动态链接路由,这该如何处理?是否有否定(!) + 或(OR)语法?即 "source": "!/linka|linkb/**"。 - mattgabor
显示剩余3条评论

32

我曾经遇到过根域名的类似问题。基本上,如果前缀(在我的情况下是apex域名)是一个URL,并且返回200状态响应,则不会被接受。在我的情况下,public文件夹中有一个index.html文件。我将其重命名为其他名称,然后它就工作了。

这是我的firebase.json

{
  "hosting": {
    "public": "public",
    "ignore": [
      "firebase.json",
      "**/.*",
      "**/node_modules/**"
    ],
    "appAssociation": "AUTO",
    "rewrites": [ { "source": "/**", "dynamicLinks": true } ]
  }
}

2
那真的帮了我很多!非常感谢你... 解决方案:将 index.html 重命名为其他名称。 - AZOM
你救了我的命!这个答案应该被接受! - dshukertjr
3
安装完成后别忘了将文件重新命名为 index.html,以避免你的网站出现404错误。 - Joseph Utulu
这真的起作用了,你救了我,谢谢。 - John Paul Grefaldo
谢谢!对我有用。如果我将index.html的名称更改回来并部署,动态链接会有任何问题吗? - Tapas Mukherjee
@TapasMukherjee,我不确定!我也曾经想过这个问题,但从未尝试过。 - sha256

18

你目前在自定义域名方面的操作看起来都是正确的。我想知道你是否正在使用最新版本的firebase-tools(CLI)。在6.5.0版本中,动态链接增加了自定义域名的支持。

好消息是,page.link仍然存在,但在新的UI流程中不太明显。获取page.link域名的方法是开始输入所需子域名,系统将弹出一个建议。我包含了一张截图说明这个过程。

添加page link域名图片 输入图像描述

希望这能帮到你,

Jeff


3
哦,那很有趣!谢谢,我没有注意到弹出窗口中的 page.link。同时,我在自定义域文档中没有看到需要特定版本的 Firebase CLI 的内容。我之前使用的是 firebase-tools 6.3.0,现在我会尝试使用 6.5.0 版本。 - Splaktar
1
使用 firebase-tools 6.5.0 部署到托管似乎已经解决了这个问题!奇怪的是文档没有提到这一点,Firebase 控制台也没有,当我尝试部署与 Firebase CLI 6.3.0 不兼容的内容时,CLI 没有抱怨。 - Splaktar
1
这让我走得更远了,但是然后我遇到了这个问题:https://twitter.com/Splaktar/status/1106621875755642880?s=19 - Splaktar
1
这不是我们所预期的,我已联系团队,看看是否能够快速解决您的问题。 - Jeff Avis
1
很高兴听到这个消息。我们的团队正在研究另一个问题,可能会联系您获取更多信息。 - Jeff Avis
显示剩余3条评论

6
我们的问题在于我们使用默认的Firebase Hosting网站来服务我们的Web应用程序的所有路由("/ **")。为了使链接不干扰Web应用程序,从不同的域名中提供Web应用程序是对我们有利的方式。为了从不同的域名中提供链接,我创建了一个新的站点仅用于链接,并将我们的自定义域名附加到该站点。现在我们有两个Firebase Hosting网站,第一个是我们的Web应用程序的默认网站,第二个是Firebase Dynamic Links的网站。
在将自定义域名附加到第二个Firebase Hosting网站后,使用自定义域名设置动态链接工作得非常完美。有关更多详细信息,请参见屏幕截图:enter image description here 编辑1:@cocacrave请求的Web应用程序firebase.json如下:
{
  "hosting": {
    "public": "public",
    "ignore": [
      "firebase.json",
      "**/.*",
      "**/node_modules/**"
    ],
    "rewrites": [
      {
        "source": "**",
        "function": "nuxtApp"
      }
    ]
  }
}

1
我做了同样的事情,但我不知道我的firebase.json配置文件是否有问题。我尝试在子域上(专门为链接创建)创建动态链接URL前缀,并得到了编辑配置文件的大红旗。您介意更新您使用的配置文件吗? - cocacrave
这个操作非常顺利。我不需要在我的firebase.json文件中添加任何内容。只需创建一个新站点,然后在创建DL时选择它就足够了。但是,为了设置Auth,我必须手动输入/__/auth/action路径,因为它没有出现在建议中。 - Chad Mx

2

2
如果您在使用子域名时遇到此错误,以下解决方案适用于我:
{
  "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
        }
      ]
    }
  ]
}

1
非常有帮助。谢谢分享。 - Ben

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接