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

Posted

技术标签:

【中文标题】无法使用自定义域将 Firebase 动态链接添加到项目【英文标题】:Unable to add Firebase Dynamic Links to a project using a custom domain 【发布时间】:2019-08-06 01:56:16 【问题描述】:

在使用 page.link URL 前缀(当时唯一的选项)之前,我已经在其他项目中创建了 Firebase 动态链接。但是,当今天为新项目启用动态链接时,这似乎不再是一个选项。看起来docs for custom domains 今天更新了。不幸的是,虽然他们提供了一些有用的示例,但并未以我能理解的方式解释如何解决我的问题。

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

您似乎已经在此托管网站上提供了内容。将链接放在子路径下以避免与现有内容冲突。

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

firebase.json:


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

即使等了一个小时,我仍然收到同样的错误,我不知道该怎么办。

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

无论我做什么,我都会不断收到此错误,并且Continue 按钮保持禁用状态。我尝试使用我的裸域 devintent.com 而不是 www.devintent.com,但这并没有帮助。我尝试使用 links.devintent.com,但得到了同样的错误。

如果我从Continue 按钮中手动删除disabled,则会收到以下错误消息:

这链接到docs for manually configuring hosting for dynamic links,其中有一些我已经完成的步骤。单击Check Again 按钮只会让我回到上面第一张图片中的相同错误。


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

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

更新:我发现我需要将子域添加到page.link URL。工具提示最后会显示“或 Google 提供的免费域(例如 yourapp.page.link)”。这不是我想要的那么突出(因为我很长一段时间都没有找到它)。现在使用devintent.page.link 对我来说是一种解决方法。


但是,我不确定为什么自定义域配置不起作用,以及如果具有现有托管配置和自定义域的项目存在这种复杂性,为什么它会成为默认配置。

【问题讨论】:

【参考方案1】:

就使您的自定义域正常工作而言,您所做的一切看起来都是正确的。我想知道您是否使用的是最新版本的 firebase-tools (CLI)。版本 6.5.0 中添加了对动态链接的自定义域支持。

好消息是 page.link 支持仍然存在,但在新的 UI 流程中并不那么明显。获取 page.link 域的方法是开始输入您想要的子域,并且应该会在 UI 中弹出一个建议。我附上了一个屏幕截图来展示它是如何工作的。

添加页面链接域图片

希望这会有所帮助,

杰夫

【讨论】:

哦,这很有趣!谢谢,我没有注意到那个弹出窗口中的page.link。我也没有在the custom domain docs 中看到任何关于需要某个版本的 Firebase CLI 的内容。我使用的是 firebase-tools 6.3.0。我试试 6.5.0。 使用 firebase-tools 6.5.0 部署到主机似乎已经解决了这个问题!奇怪的是文档没有提到这一点,也没有提到 Firebase 控制台,当我尝试部署与 Firebase CLI 6.3.0 不兼容的东西时,CLI 没有抱怨。 这让我走得更远,但后来我遇到了这个问题:twitter.com/Splaktar/status/1106621875755642880?s=19 这不是预期的,我已经联系了团队,看看我们是否可以为您快速解决问题。 我能够让它与我的 www.devintent.com 域一起工作,但不能与 devintent.com 一起工作。在主机控制台中,我有一个来自 devintent.com -> www.devintent.com 的重定向。【参考方案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
        
      ]
    
  ]

【讨论】:

【参考方案3】:

我在根 (apex) 域中遇到了类似的问题。基本上,如果前缀(在我的例子中是顶点域)是一个给出 200 状态响应的 URL,它将不会被接受。在我的例子中,@ 中有一个 index.html 文件987654322@ 文件夹。我将其重命名为其他名称,它可以工作。

这是我的firebase.json


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

【讨论】:

这对我帮助很大!非常感谢... 解决方案:将 index.html 重命名为其他名称 你救了我的命!这个答案应该是公认的答案! 设置后不要忘记将文件重命名为 index.html 以避免网站出现 404 错误 这真的有效,你救了我,谢谢 谢谢!为我工作。如果我把index.html的名字改回来再部署,动态链接会不会有问题?【参考方案4】:
"appAssociation": "AUTO",
"rewrites": [
  
    "source": "/page/**",
    "destination": "/index.html"
  ,
  
    "source": "/link/**",
    "dynamicLinks": true
  
]

有效!我猜是“source”的原始配置引起的错误:“**”。可能是范围太大?虽然 doc 说“/__/*”具有高优先级。 (https://firebase.google.com/docs/hosting/full-config?authuser=0#hosting_priority_order)

【讨论】:

【参考方案5】:

对我们而言,问题在于我们使用默认的 Firebase 托管站点在所有路由 ("/**") 上为我们的网络应用提供服务。从动态链接的不同域为我们的网络应用程序提供服务是我们应该采用的方式,因为链接不应干扰网络应用程序。

为了提供来自与我们的网络应用程序不同的域的链接,我创建了一个仅用于链接的新站点,并将我们的自定义域附加到该站点。现在我们有两个 Firebase 托管站点。第一个默认用于我们的网络应用,第二个用于 Firebase 动态链接。

在此设置动态链接后,使用附加到第二个 Firebase 托管站点的自定义域可以完美运行。 有关更多详细信息,请参阅屏幕截图:

EDIT1:@cocacrave 要求的网络应用程序 firebase.json:


  "hosting": 
    "public": "public",
    "ignore": [
      "firebase.json",
      "**/.*",
      "**/node_modules/**"
    ],
    "rewrites": [
      
        "source": "**",
        "function": "nuxtApp"
      
    ]
  

【讨论】:

我也做过同样的事情,但我不知道我的 firebase.json 配置是否有问题。我尝试在子域上创建动态链接 URL 前缀(仅为链接创建),我得到了一个大红旗来编辑我的配置。你介意用你使用的配置更新你的答案吗? 这就像一个魅力。我不需要向我的 firebase.json 添加任何内容。只需创建一个新站点,然后在创建 DL 时选择它就足够了。为了设置 Auth,我不得不手动输入 /__/auth/action 路径,因为它没有出现在建议中。【参考方案6】:

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

"rewrites": [
  
    "source": "/link/**",
    "dynamicLinks": true
  ,
  
    "source": "!/link/**",
    "destination": "/index.html"
  
]

将新配置部署到 Firebase Hosting 后,我可以根据需要使用 mydomain.com/link。

【讨论】:

就是这样!真正遇到错误时应该在firebase的帮助中说明。 这在文档中,是您设置时 UI 向导的一部分。 这是什么!在 !/link/** 中做什么? 这真的很有帮助!谢谢埃里克! 太可惜了,最好的答案在底部。

以上是关于无法使用自定义域将 Firebase 动态链接添加到项目的主要内容,如果未能解决你的问题,请参考以下文章

Firebase 动态链接将自定义参数传递给 iOS 和 android

将自定义域与 Firebase 动态链接结合使用

将我自己的域与 Firebase 动态链接一起使用

从 firebase 中删除创建的动态链接并使用 firebase 控制台创建新的自定义 URL

为动态链接设置自定义路由,而不使用 Firebase 托管

iOS-如何使用自定义参数firebase获取动态短链接