如何正确提供 iOS 和 Android 应用链接文件

说明了如何正确托管和提供 `apple-app-site-association` 文件(用于 iOS 通用链接)以及 `assetlinks.json` 文件(用于 Android 应用链接)。

Intermediate

要正确提供 iOS 和 Android App Link 文件,您需要同时配置网站和移动应用程序。这包括在 Web 服务器上创建并托管特定文件,以及在 iOS 和 Android 项目中进行相应的配置。

iOS 通用链接

对于 iOS,您需要设置通用链接(Universal Links),这允许用户点击指向您网站的链接后,无缝跳转至已安装的应用程序。

  1. 创建apple-app-site-association文件:

    • 创建一个名为 apple-app-site-association (不带 .json 扩展名)。
    • 该文件声明了您的应用可以处理哪些 URL。
    • 该文件应包含一个 applinks 字典。在 applinks中,包含一个空的 apps 数组和一个 details 数组。 details 数组中的每个对象应指定 appID (您的 Apple Team ID 后跟应用的 Bundle Identifier)以及一个 paths 。您可以使用通配符(*?) 进行路径匹配。
    • apple-app-site-association 内容示例: json { "applinks": { "apps": [], "details": [ { "appID": "YOUR_TEAM_ID.com.yourcompany.yourapp", "paths": [ "/path/to/content/*", "/another/path/*", "NOT /path/to/exclude" ] } ] } }
  2. 将文件托管在您的 Web 服务器上:

    • apple-app-site-association 文件必须托管在域名的根目录下,或位于 .well-known 子目录内(例如 https://yourdomain.com/apple-app-site-associationhttps://yourdomain.com/.well-known/apple-app-site-association).
    • 该文件必须通过HTTPS并使用有效的SSL证书进行服务
    • 该文件必须可直接访问,且不包含任何 HTTP 重定向(301 或 302)。
    • 该文件的 MIME 类型应为 application/json.
    • 未压缩文件的大小不应超过 128 KB。
    • 如果您支持多个域名或子域名,每个域名都需要自己的 apple-app-site-association 文件。
  3. 配置您的 iOS 应用:

    • 在 Xcode 中,为您的项目启用“关联域名”功能。
    • 将应用将支持的域名添加到“关联域名”列表中,并在前面加上 applinks: (例如: applinks:yourdomain.com).
    • 在应用的 AppDelegateSceneDelegate 中实现必要的方法,以处理传入的通用链接 URL。

Android 应用链接

对于 Android,应用链接提供了类似的无缝体验,允许经过验证的链接直接在应用中打开,而无需显示消歧对话框。

  1. 创建assetlinks.json文件:

    • 创建一个名为 assetlinks.json.
    • 该文件在您的网站与 Android 应用之间建立了可信关联。
    • 该文件应包含一个 JSON 数组,其中包含一个指定 relation (例如, delegate_permission/common.handle_all_urls), target (包括 namespaceandroid_app,即您的应用的 package_name,以及 sha256_cert_fingerprints 应用的签名证书)。
    • 您可以使用 keytool 命令获取,或者如果您使用 Play 应用签名,也可从 Google Play 控制台获取。
    • assetlinks.json 内容示例: json [{ "relation": ["delegate_permission/common.handle_all_urls"], "target": { "namespace": "android_app", "package_name": "com.yourcompany.yourapp", "sha256_cert_fingerprints": ["AA:BB:CC:DD:EE:FF:11:22:33:44:55:66:77:88:99:00:11:22:33:44:55:66:77:88:99:00:AA:BB:CC:DD:EE:FF"] } }]
  2. 将文件托管在您的 Web 服务器上:

    • assetlinks.json 文件必须托管在 https://yourdomain.com/.well-known/assetlinks.json.
    • 该文件必须通过带有有效 SSL 证书的 HTTPS 协议提供
    • 该文件必须可直接访问,且不包含任何 HTTP 重定向(301 或 302)。
    • 该文件的 MIME 类型应为 application/json.
    • 如果您的应用链接支持多个主机域名,您必须在每个域名上发布该 assetlinks.json 文件。
  3. 配置您的 Android 应用:

    • 添加一个 <intent-filter> 到应用的 AndroidManifest.xml 中添加,用于处理您希望处理的 URL。
    • 包含 android:autoVerify="true"<intent-filter>中。这会指示 Android 验证主机域名。
    • <intent-filter> 应包含 ACTION_VIEW, BROWSABLE,以及 DEFAULT 类别。
    • 指定 <data> 方案(例如 https)、主机以及任何可选的路径前缀或模式。
    • 示例 AndroidManifest.xml intent-filter: xml <activity android:name=".MainActivity"> <intent-filter android:autoVerify="true"> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="https" android:host="yourdomain.com" android:pathPrefix="/path/to/content" /> </intent-filter> </activity>
    • 处理传入的 Intent ,从 URL 中提取数据并导航至相应内容。

通用最佳实践

  • 对于 iOS 通用链接和 Android 应用链接,HTTPS 都是强制要求的
  • 提供这些关联文件时,请避免重定向
  • 在真实设备上进行彻底测试,并使用验证工具(例如,Google 的 Android 数字资产链接 API 以及各种 iOS AASA 文件在线验证器)以确保设置正确。
  • 请确保您拥有正在配置应用链接的域名