根据近期的体验,本文中提及的方法可能仍需改进。

在 2018 年 4 月 13 日,Google 的 goo.gl 短网址服务停止了运行;已有短网址会依然工作,但是用户将无法创建任何新的短网址。

在昨天,一个偶然,登陆了百度的短网址平台 [dwz.cn](https://dwz.cn),发现其已于 2020 年 4 月 23 日停止了个人服务;转为企业付费服务。、

在过去,我一直在寻找着搭建自有短网址服务的方式(且不需要有 “用户系统”,让用户可以注册、创建自己的短链接)。尝试过 Polr,以及一些 SaaS (Software as a Service, 软件即服务)。通常,短网址程序都需要 PHP 和数据库,以及较高的性能要求;而 SaaS 短网址们的免费版本又会有诸多限制。

最近想起了 Google Firebase 里面的 Dynamic Links 服务;根据官方介绍、网上论坛和客服回复,我们可以确定以下事项:

  • Dynamic Links 在用户端拥有无限配额 - 无限次数打开,无限流量,不怕被刷。
  • Dynamic Links 在管理端有速率限制 - 每个项目每天可以请求创建 20,0000 次短网址,每个 IP 每秒能请求 5 次。可以提交表格请求增加限制
  • Dynamic Links 默认域名 {custom}.page.link 托管在 Google 的服务上,中国大陆无法访问;自定义域名服务托管在 Fastly 上,国内丢包较严重。但是一旦自定义域名在 Firebase 的控制台里接入完成(要求绑定 A 记录),Firebase 会一直服务自定义域名,并不会随着 A 记录的更改而停止服务。所以,我们可以接入 CloudFlare 来解决 Fastly 在国内丢包的问题。

如果你要继续阅读,你需要满足以下条件:

  • 会魔法
  • 有 Google 账号
  • 有自己的域名,知道如何管理 DNS
  • CloudFlare 账号,并且域名接入 CloudFlare 让我们开始吧。

首先,打开 https://console.firebase.google.com,选择免费计划,完成 Firebase 基础设置,然后创建一个项目。

进入项目,右边侧边栏往下滑,找到 Dynamic Links:

选择开始:

输入你喜欢的域名:

继续继续到第 3 步,添加提供的 A 记录到你选择的域名;如果域名使用 CloudFlare NS 接入,先不要开启小云朵:

点击完成;回到 CloudFlare 开启小云朵,或者更换解析记录到 CloudFlare 的 IP,这时候域名已经可以正常打开。

回到 Firebase 控制台,点击 New Dynamic Link

输入你想要的短网址域名后缀:

输入目标网址,和一个可以随便填写的短网址名称:

由于 Dynamic Links 实际上是为跨平台 APP 的安装和跳转设计的,但我们这里只作为最简单的短网址服务来使用,所以接下来的两个定义链接在安卓 / iOS 上的表现我们都选择 Open the deep link in a browser 直接在浏览器中打开;基于同样的原因,我们在最后一步也选择 Skip the app preview page 跳过应用预览页面;最后点击创建。


你可以打开 https://go.hxis.me/hello 看看效果。