Android 应用链接

编辑

学习如何配置 Android 应用链接以从标准网页 URL 打开您的 Expo 应用。


要为您的应用配置 Android 应用链接,您需要:

  • 在您项目的应用配置中添加 intentFilters 并将 autoVerify 设置为 true
  • 设置双向关联以验证您的网站和本地应用程序
观看:使用 Expo 路由设置 Android 应用链接
观看:使用 Expo 路由设置 Android 应用链接

intentFilters 添加到应用配置

通过添加 android.intentFilters 属性并将 autoVerify 属性设置为 true 来配置您的应用配置。指定 autoVerify 是 Android 应用链接正常工作所必需的。

以下示例显示了基本配置,使您的应用能够在标准 Android 对话框中作为处理任何链接到 webapp.io 域的选项出现。它还使用常规的 https 协议,因为 Android 应用链接标准深层链接 不同。

app.json
{ "expo": { "android": { "intentFilters": [ { "action": "VIEW", "autoVerify": true, "data": [ { "scheme": "https", "host": "*.webapp.io", "pathPrefix": "/records" } ], "category": ["BROWSABLE", "DEFAULT"] } ] } } }

设置双向关联

要设置网站和 Android 应用之间的 双向关联,您需要以下内容:

  • 网站验证: 这需要在 /.well-known 目录下创建一个 assetlinks.json 文件并将其托管在目标网站上。此文件用于验证从给定链接打开的应用是否是正确的应用。
  • 本地应用验证: 这需要某种形式的代码签名,引用目标网站域(URL)。

创建 assetlinks.json 文件

1

为网站验证创建一个 assetlinks.json 文件(也称为 数字资产链接 文件),文件路径为 /.well-known/assetlinks.json。此文件用于验证为给定链接打开的应用。

如果您使用 Expo 路由来构建您的网站(或其他任何现代 React 框架,如 Remix、Next.js 等),请在 public/.well-known/assetlinks.json 中创建 assetlinks.json。对于旧版的 Expo webpack 项目,请在 web/.well-known/assetlinks.json 中创建该文件。

2

从应用配置中获取 package_name 的值,在 android.package 下。

3

从您应用的签名证书中获取 sha256_cert_fingerprints 的值。如果您使用 EAS Build 来构建您的 Android 应用,请在创建构建后:

  • 运行 eas credentials -p android 命令,并选择构建配置以获取其指纹值。
  • 复制 SHA256 Fingerprint 下列出的指纹值。
从 Google Play 控制台获取 SHA256 证书指纹的替代方法

如果您不使用 EAS 来管理代码签名,您可以通过手动构建并提交应用到 Google Play 控制台 来找到 sha256_cert_fingerprints

  • 在 Google Play 控制台的仪表板中,转到 Release > Setup > App Signing
  • 找到适用于您的应用的正确 Digital Asset Links JSON 片段。
  • 复制看起来像 14:6D:E9:83... 的值并将其粘贴到 public/.well-known/assetlinks.json 文件中的 sha256_cert_fingerprints 下。

4

package_namesha256_cert_fingerprints 添加到 assetlinks.json 文件中:

public/.well-known/assetlinks.json
[ { "relation": ["delegate_permission/common.handle_all_urls"], "target": { "namespace": "android_app", "package_name": "com.example", "sha256_cert_fingerprints": [ // 支持不同应用和密钥的多个指纹 "14:6D:E9:83:51:7F:66:01:84:93:4F:2F:5E:E0:8F:3A:D6:F4:CA:41:1A:CF:45:BF:8D:10:76:76:CD" ] } } ]
您可以在 sha256_cert_fingerprints 数组中添加多个指纹,以支持不同变体的应用。有关更多信息,请参阅 Android 文档中关于如何声明网站关联的信息

托管 assetlinks.json 文件

使用您的域通过 Web 服务器托管 assetlinks.json 文件。此文件必须以 application/json 的内容类型进行提供,并且可以通过 HTTPS 连接进行访问。通过在地址栏中输入完整 URL 验证您的浏览器可以访问此文件。

本地应用验证

在 Android 设备上安装应用以触发 Android 应用验证 过程。

打开应用后,请参阅 处理进入您应用的链接 以获取有关如何处理入站链接并向用户显示他们请求的内容的更多信息。

调试

Expo CLI 使您能够在不部署网站的情况下测试 Android 应用链接。利用 --tunnel 功能,您可以将开发服务器转发到一个公共可用的 HTTPS URL。

1

设置环境变量 EXPO_TUNNEL_SUBDOMAIN=my-custom-domain,其中 my-custom-domain 是您在开发过程中使用的唯一字符串。这确保您的隧道 URL 在开发服务器重启时保持一致。

2

根据 上述描述 向您的应用配置中添加 intentFilters。将 host 值替换为 Ngrok URL:my-custom-domain.ngrok.io

3

使用 --tunnel 标志启动您的开发服务器:

Terminal
npx expo start --tunnel

4

在您的设备上编译开发构建:

Terminal
npx expo run:android

5

使用以下 adb 命令启动意图活动并在您的应用中打开链接,或在设备的 Web 浏览器中输入自定义域链接。

Terminal
adb shell am start -a android.intent.action.VIEW -c android.intent.category.BROWSABLE -d "https://my-custom-domain.ngrok.io/" <your-package-name>

故障排除

以下是一些常见提示,帮助您在实现 Android 应用链接时进行故障排除:

  • 确保您的网站通过 HTTPS 提供,并且内容类型为 application/json
  • 验证 Android 应用链接
  • Android 验证可能需要 20 秒或更长时间才能生效,因此请确保等到其完成。
  • 如果您更新了 Web 文件,请重新构建本地应用以触发供应商端的服务器更新(Google)