使用 DyLy 创建 Deep Link 的方法

⏱️约4分钟
分享:

DyLy 是一项可以缩短 URL 并轻松创建 Deep Link 的服务。 本文将介绍如何利用 DyLy 高效创建 Deep Link。

什么是 Deep Link

Deep Link 是一种在访问链接时直接打开应用而不是浏览器的机制。 如果尚未安装应用,则可以引导用户前往应用商店,并在安装完成后打开指定页面。

Apple 通过 Universal Links 官方支持“从浏览器到应用的无缝跳转”,Google 则通过 Android App Links 提供类似体验。 正如 Apple 的 Universal Links 指南Google 的 Android App Links 文档 所述,Deep Link 不仅能提升用户体验,还有助于安全性与转化率的提升。

使用场景

Deep Link 的应用方式非常多样。

直达视频等内容

可以在社交媒体等渠道分享链接,将用户直接带到特定内容。 这在 Web 上理所当然,借助 Deep Link,移动应用同样可以直接打开应用内的内容。 还可以为链接附加特定查询参数,以统计来源渠道等信息。

邀请链接

Deep Link 也可用于邀请他人加入应用内的群组等。 被邀请者点击链接后,应用会打开并开始邀请流程。 如果尚未安装应用,则会被引导至应用商店,安装完成后可重新开始邀请流程。

重定向

在将 OAuth 等流程的重定向目标指定为应用时,可以使用自定义方案(如 myapp://),但存在信息被拦截的风险。 改用 Deep Link,便可以在应用中安全接收重定向。

实践

下面介绍如何具体实现 Deep Link。 创建 Deep Link 的服务有很多,本文选用 DyLy。

创建元数据

需要将域名与应用进行关联。 详细步骤请参阅 Apple 官方文档Google 官方文档,核心思路是在 Web 上托管一个端点,用于验证域名所有权以及与应用的关联,使 Apple 和 Google 能够完成验证。

只需返回规定格式的 JSON 即可。 可以选择自行在 S3 等位置托管,DyLy 也提供了便捷的实现功能。

DyLy 可以创建所谓的 JSON link,即在链接目标返回你指定的 JSON。 可以通过 API 发送如下请求。

bash
1curl -X POST "https://dyly-api.lilacwells.com/url/api/v1/links" \
2 -H "Authorization: Basic ${YOUR_CREDENTIALS}" \
3 -H "Content-Type: application/json" \
4 -d '{
5 "type": "json",
6 "projectId": "your-project-id",
7 "path": ".well-known/apple-app-site-association",
8 "rawJson": {
9 "applinks": {
10 "apps": [],
11 "details": [
12 {
13 "appIDs": ["TEAM123.com.example.app"],
14 "paths": [
15 "NOT /_/*",
16 "NOT /deferred-params",
17 "/*"
18 ]
19 }
20 ]
21 }
22 }
23 }'

应用侧配置

接下来根据各操作系统的步骤配置应用。

iOS

在 Xcode 的 Signing & Capabilities 中添加 Associated Domains,并注册域名,例如 applinks:example.com

Android

AndroidManifest.xml 中添加 <intent-filter android:autoVerify="true">,并使用 android:autoVerify 验证域名。

Web 与桌面端:如果通过浏览器访问,可在链接配置中重定向到任意 URL。

创建链接

最后,在 DyLy 中创建链接。 将 type 设为 deep 即可创建 Deep Link。

bash
1curl -X POST "https://dyly-api.lilacwells.com/url/api/v1/links" \
2 -H "Authorization: Basic ${YOUR_CREDENTIALS}" \
3 -H "Content-Type: application/json" \
4 -d '{
5 "type": "deep",
6 "projectId": "your-project-id",
7 "path": "groups/awesome-group",
8 "destinationUrl": "https://apps.apple.com/app/yourapp/id123456",
9 "jwtClaims": {
10 "invitationId": "inv-789xyz",
11 "invitedBy": "user-123",
12 "groupId": "awesome-group",
13 "groupName": "Awesome Group",
14 "permissions": "member",
15 "timestamp": 1735894404
16 },
17 "jwtExpiresIn": 300,
18 "expiresIn": 2592000,
19 "keyProtected": false,
20 "oneTime": false
21 }'

填入 jwtClaims 的值会写入 JWT,因此需要谨慎处理。

创建 Deep Link 后,DyLy 会生成带有 JWT 查询参数的链接。

应用接收到链接后的处理

当用户点击刚刚创建的链接时,应用便会接收到该链接。 接下来按照以下步骤处理。

验证 JWT

需要确认该链接确实由 DyLy 签发。

在此之前先简要介绍一下 JWT。 JWT 可以粗略理解为带签名的 JSON。 通过验证签名,可以确认发行方,并确保内容未被篡改。

任何人都可以创建链接,因此必须识别哪些不是正规链接。 正规链接会使用 DyLy 的私钥签名,应用通过验证签名即可确认链接真实且内部参数未被修改。

DyLy 采用通用的 JWT 技术,因此可以直接使用现有的 JWT 库来验证签名。

因此,应用在接收到链接后应首先执行 JWT 验证。

检查参数

确认链接真实后,提取其中的参数并执行所需处理。

例如对于邀请链接,可以读取邀请目标的群组 ID 等信息。

需要注意的是,JWT 虽然带有签名,但内容并未加密(当然也存在加密后的 JWT)。

这意味着任何人都能读取 JWT 的内容。 因此不要在 JWT 中放置个人信息等敏感数据。 以邀请链接为例,只需在令牌中放入群组 ID 等标识符,详细信息应保存在服务器侧更为安全。

Deferred Deep Link

当用户在尚未安装应用的设备上点击链接时,会被重定向到应用商店,安装完成后即可打开 Deep Link 对应的页面。 这被称为 Deferred Deep Link。 DyLy 同样能够实现这一机制。

首先,在未安装应用的移动设备上点击链接。 由于没有安装应用,链接会在浏览器中执行并访问 DyLy 的服务器。 DyLy 会记录该设备的 IP 地址、操作系统等信息,然后将用户重定向到应用商店。

应用在安装后首次启动时,会向 DyLy 查询该设备是否曾经访问过该链接。 DyLy 会根据请求的 IP 地址、操作系统等信息确认是否存在安装前的访问,如果有,则将目标 Deep Link 返回给应用。

这样,应用便可以在首次启动时获取到用户之前点击的 Deep Link 信息。

更多细节请查阅 DyLy 官方文档。

总结

通过 DyLy 可以轻松实现 Deep Link。 下一篇将进一步介绍如何创建邀请链接等更具体的场景。

参考资料

分享:

相关文章

带有Flutter Android应用程序CI/CD
Guides

带有Flutter Android应用程序CI/CD

了解如何使用Flutter构建Android应用的CI/CD pipeline。基于GitHub Actions,不使用fastlane。

mark241
如何在Flutter中本地化应用
Guides

如何在Flutter中本地化应用

了解如何使用arb文件在Flutter中本地化应用程序。本文基于Flutter 2.0.1版本。

mark241
将Azure资源描述为ARM Template
Guides

将Azure资源描述为ARM Template

ARM Template是定义Azure资源的json文件。本文介绍如何高效创建ARM Template来部署新资源。

mark241