将链接引入您的应用

编辑

了解如何通过创建深度链接在您的 React Native 和 Expo 应用中处理传入的 URL。


本指南提供通过添加自定义方案在您的项目中配置标准 深度链接 的步骤。

对于大多数应用,您可能希望设置 Android 应用/iOS 通用链接,而不是本指南中描述的深度链接,或者同时设置两者。

在应用配置中添加自定义方案

要提供链接到您的应用,需在 应用配置 中向 scheme 属性添加自定义字符串:

app.json
{ "expo": { "scheme": "myapp" } }

在您的应用中添加自定义方案后,您需要 创建新的开发构建。一旦应用安装在设备上,您可以使用 myapp:// 在您的应用中打开链接。

如果 未定义自定义方案,则应用将在开发和生产构建中使用 android.packageios.bundleIdentifier 作为默认方案。这是因为 Expo Prebuild 会自动将这些属性添加为 Android 和 iOS 的自定义方案。

测试深度链接

您可以使用 npx uri-scheme 测试打开您应用的链接,它是一个用于交互和测试 URI 方案的命令行工具。

例如,如果您的应用有一个 /details 屏幕,您希望在用户点击链接时打开(无论是通过另一个应用还是网页浏览器),您可以通过运行以下命令来测试此行为:

Terminal
# 如果您在 app.json 中定义了 `android.package` 或 `ios.bundleIdentifier`
npx uri-scheme open com.example.app://somepath/details --android

# 如果您在 app.json 中定义了 `scheme`
npx uri-scheme open myapp://somepath/details --ios

运行上述命令:

  • 打开您应用的 /details 屏幕
  • androidios 选项指定链接应在 Android 或 iOS 上打开
  • 或者,您可以尝试通过点击设备网页浏览器中的链接,例如 <a href="scheme://">点击我</a> 打开链接。请注意,在地址栏中输入链接可能无法按预期工作,您可以使用 通用链接 来实现此功能。
使用 Expo Go 测试链接

默认情况下,Expo Go 使用 exp:// 方案。如果您链接到 exp:// 而不指定后面的 URL 地址,它将打开应用的主页。在开发期间,您应用的完整 URL 看起来像 exp://127.0.0.1:8081

要在 Expo Go 上测试时打开 /details 屏幕,您可以使用 npx uri-scheme

Terminal
npx uri-scheme open exp://127.0.0.1:8081/--/somepath/into/app?hello=world --ios

在 Expo Go 中,当指定路径时,/--/ 会添加到 URL 中。这表明 Expo Go 中的子字符串对应于深度链接路径,而不是指向应用本身的路径的一部分。

默认情况下,当在 Expo Go 中打开 URL 时,exp:// 会被替换为 http://。您还可以使用 exps:// 来打开 https:// URLs。然而,目前 exps:// 不支持加载具有不安全 TLS 证书的网站。

处理 URLs

如果您使用 Expo Router,您可以忽略此部分。

您可以使用 Linking.useURL() 钩子观察启动您应用的链接,来源于 expo-linking

index.tsx
import * as Linking from 'expo-linking'; export default function Home() { const url = Linking.useURL(); return <Text>URL: {url}</Text>; }

Linking.useURL() 钩子通过以下命令性方法在后台工作:

解析 URLs

您可以使用 Linking.parse() 方法从 URL 中解析 路径主机名查询参数。该方法提取深度链接信息并考虑非标准实现。

index.tsx
import * as Linking from 'expo-linking'; export default function Home() { const url = Linking.useURL(); if (url) { const { hostname, path, queryParams } = Linking.parse(url); console.log( `Linked to app with hostname: ${hostname}, path: ${path} and data: ${JSON.stringify( queryParams )}` ); } return ( %%placeholder-start%%您的 React 组件在这里。 %%placeholder-end%% ) }

限制

如果用户没有安装您的应用,深度链接将无法工作。像 Branch 这样的归因服务提供条件性链接到您的应用或网页的解决方案。

Android 应用/iOS 通用链接是您可以用来处理这种情况的另一种解决方案。这种链接方式允许您的应用在用户点击指向您网站域的 HTTP(S) 链接时打开。如果用户没有安装您的应用,链接将带他们到您的网站。有关更多详细信息,请参见 通用链接