无法使用自定义域将 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.linklink,我只需要创建一个动态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
        }
      ]
    }
  ]
}