跳至主要内容

为 iOS 设置通用链接

深度链接允许应用用户使用 URI 启动应用。此 URI 包含方案、主机和路径,并打开应用到特定屏幕。

通用链接是一种仅限于 iOS 设备的深度链接类型,仅使用httphttps协议。

要设置通用链接,您需要拥有一个 Web 域名。作为临时解决方案,请考虑使用 Firebase 托管GitHub Pages

创建或修改 Flutter 应用

#

编写一个可以处理传入 URL 的 Flutter 应用。

此示例使用 go_router 软件包来处理路由。Flutter 团队维护着go_router软件包。它提供了一个简单的 API 来处理复杂的路由场景。

  1. 要创建一个新应用,请键入flutter create <app-name>

    flutter create deeplink_cookbook
  2. 要将go_router软件包作为依赖项包含进来,请运行flutter pub add

    flutter pub add go_router
  3. 要处理路由,请在main.dart文件中创建一个GoRouter对象

    main.dart
    dart
    import 'package:flutter/material.dart';
    import 'package:go_router/go_router.dart';
    
    void main() => runApp(MaterialApp.router(routerConfig: router));
    
    /// This handles '/' and '/details'.
    final router = GoRouter(
      routes: [
        GoRoute(
          path: '/',
          builder: (_, __) => Scaffold(
            appBar: AppBar(title: const Text('Home Screen')),
          ),
          routes: [
            GoRoute(
              path: 'details',
              builder: (_, __) => Scaffold(
                appBar: AppBar(title: const Text('Details Screen')),
              ),
            ),
          ],
        ),
      ],
    );

调整 iOS 构建设置

#
  1. 启动 Xcode。

  2. 打开 Flutter 项目的ios文件夹内的ios/Runner.xcworkspace文件。

添加关联域名

#
  1. 如有必要,启动 Xcode。

  2. 点击顶层的Runner

  3. 在编辑器中,点击Runner目标。

  4. 点击签名与功能

  5. 要添加新域名,请点击签名与功能下的+ 功能

  6. 点击关联域名

    Xcode associated domains screenshot

  7. 关联域名部分,点击+

  8. 输入applinks:<web domain>。将<web domain>替换为您自己的域名。

    Xcode add associated domains screenshot

  1. 在您喜欢的编辑器中打开ios/Runner/Runner.entitlements XML 文件。

  2. <dict>标签内添加一个关联域名。

    xml
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
      <key>com.apple.developer.associated-domains</key>
      <array>
        <string>applinks:example.com</string>
      </array>
    </dict>
    </plist>
  3. 保存ios/Runner/Runner.entitlements文件。

要检查您创建的关联域名是否可用,请执行以下步骤

  1. 如有必要,启动 Xcode。

  2. 点击顶层的Runner

  3. 在编辑器中,点击Runner目标。

  4. 点击签名与功能。这些域名应该会出现在关联域名部分。

    Xcode add associated domains screenshot

您已完成应用的深度链接配置。

将您的应用与您的 Web 域名关联

#

您需要在 Web 域名中托管一个apple-app-site-association文件。此文件告诉移动浏览器打开哪个 iOS 应用,而不是浏览器。要创建该文件,请查找您在上一步中创建的 Flutter 应用的appID

查找appID的组成部分

#

Apple 将appID格式化为<team id>.<bundle id>

  • 在 Xcode 项目中找到 bundle ID。
  • 开发者帐户中找到团队 ID。

例如:给定团队 ID 为S8QB4VV633和 bundle ID 为com.example.deeplinkCookbook,您将输入appID条目S8QB4VV633.com.example.deeplinkCookbook

创建和托管apple-app-site-association JSON 文件

#

此文件使用 JSON 格式。保存此文件时,请不要包含.json文件扩展名。根据 Apple 的文档,此文件应类似于以下内容

json
{
  "applinks": {
    "apps": [],
    "details": [
      {
        "appIDs": [
          "S8QB4VV633.com.example.deeplinkCookbook"
        ],
        "paths": [
          "*"
        ],
        "components": [
          {
            "/": "/*"
          }
        ]
      }
    ]
  },
  "webcredentials": {
    "apps": [
      "S8QB4VV633.com.example.deeplinkCookbook"
    ]
  }
}
  1. appIDs数组中的一个值设置为<team id>.<bundle id>

  2. paths数组设置为["*"]paths数组指定允许的通用链接。使用星号*将每个路径重定向到 Flutter 应用。如果需要,可以将paths数组值更改为您应用更合适的设置。

  3. 将文件托管在类似于以下结构的 URL 上。

    <webdomain>/.well-known/apple-app-site-association

  4. 验证您的浏览器是否可以访问此文件。

#

使用物理 iOS 设备或模拟器测试通用链接。

  1. 在测试之前,请在 iOS 设备或模拟器上安装 Flutter 应用,在所需的设备上使用flutter run

    Simulator screenshot

    完成后,Flutter 应用将显示在 iOS 设备或模拟器的主屏幕上。

  2. 如果使用模拟器进行测试,请使用 Xcode CLI

    xcrun simctl openurl booted https://<web domain>/details
  3. 如果您使用物理 iOS 设备进行测试

    1. 启动备忘录应用。
    2. 备忘录应用中键入 URL。
    3. 点击生成的链接。

    如果成功,Flutter 应用将启动并显示其详细信息屏幕。

    Deeplinked Simulator screenshot

查找源代码

#

您可以在 GitHub 存储库中找到 deeplink_cookbook 食谱的源代码。