如何使用我自己的域名缩短 Firebase Dynamic Link

How to shorten a Firebase Dynamic Link using my own domain name

我正在尝试在 iOS 应用程序中实施 Firebase Dynamic Links。目标是为营销目的提供干净的 URL,以便人们可以在社交媒体上分享 link。我的想法是人们会分享以我的域名开头的干净 URL。

当点击 link 后安装应用程序时,我们希望能够通过查看 Firebase 提供的有效负载来跟踪谁推荐了应用程序安装。我认为这个目标类似于 Firebase 的 use case 将网络用户转换为移动应用程序用户。

我想在社交媒体上分享的一个例子link是:http://example.com/my-payload-here

我已经尝试了几种情况,但在任何情况下都无法获得我正在寻找的行为。有人成功实施过吗?

这是我的测试程序:

  1. 卸载应用程序
  2. 在 iMessage 中将要测试的 link 发送给自己
  3. 点击我的 iOS 设备上的 link(不使用模拟器)
  4. 从 App Store 安装应用程序
  5. 下载完成后点击 App Store 中的 "Open" 按钮启动应用程序

以下是我的发现:

  1. 从 Firebase 控制台生成的简短 link (https://xyz.app.goo.gl/ABCD) - Link 在 App Store 中打开。我安装应用程序。当我在安装后启动应用程序时,有效负载未交付。如果我退出应用程序,返回到 iMessage 中的 link,然后再次启动,负载就会被传送。

  2. Long link 与在#1 中生成的 link 来自 Firebase 控制台的 "Long Dynamic Link" 相同( https://xyz.app.goo.gl/?link=http://example.com/my-payload-here&isi=12345&ibi=com.example.MyApp) - 行为与#1

  3. 相同
  4. 短 link 使用我的域 http://example.com/redirect/my-payload-here,配置为 301 重定向到 #2 中的 URL) - 在 App Store 中打开。我安装。当我在安装后启动应用程序时,有效负载未交付。如果我退出应用程序,返回到 iMessage 中的 link,然后再次启动,link 仍会转到 App Store。

我有一些问题:

  1. 为什么情况 1 和情况 2 的有效载荷没有在第一次发射时交付?
  2. 我们如何才能启动应用程序并交付有效负载而不是转到 App Store?

我也参考了Firebase flowchart案例2的深度link

Firebase 目前无法做到这一点。 如果您需要白标 URLs,您要么需要 build it yourself or use a more powerful link platform like Branch.io(完全披露:我是在 Branch 团队)。

具体回答您的问题:

  1. 我已经在测试台应用程序中实施了 Firebase 动态链接,并且可以确认 link 第一次通过安装 对长短期都有效 URL 变体。您的 AppDelegate 配置可能有问题,如果您想共享代码,我们可以查看一下。
  2. Firebase 目前不支持自定义域。理论上(如果你能解决上面的第一个问题)你可以像你试过的那样使用重定向来使它在第一次安装时工作。但是,一旦安装了应用程序,您将永远无法通过 Firebase link 数据 启动应用程序 。这是因为通用链接基于 link 的域工作,甚至不请求 Web 目标。即使您在自己的域上手动启用通用链接,应用程序也会立即打开而无需调用 Firebase,并且永远不会设置 link 数据。

Google Firebase 团队向动态 Links 添加了对自定义子域的支持。

  • 您现在可以为动态 Link 指定最多五个自定义 page.link 子域。使用这些新的自定义子域的简短 link 类似于以下示例:https://example.page.link/abcXYZ

  • Firebase Dynamic Link 分配给项目的域目前无法删除。(firebase 团队正在努力。)

  • 您现在可以将 URL 模式列入白名单,这些模式可用作动态 Link 的深度 link (link) 或回退link (ifl, ipfl, afl, ofl)。如果您定义白名单,动态 Links 将不会重定向到与白名单模式不匹配的 URLs。

  • 您可以在 Firebase console.

  • 中尝试这两个功能