为 iOS 设置通用链接
深度链接允许应用程序用户使用 URI 启动应用程序。此 URI 包含方案、主机和路径,并打开应用程序到特定屏幕。
通用链接是一种仅限于 iOS 设备的深度链接类型,它仅使用http
或https
协议。
要设置通用链接,您需要拥有一个网站域名。作为临时解决方案,请考虑使用Firebase 托管或GitHub Pages。
创建或修改 Flutter 应用程序
#编写一个可以处理传入 URL 的 Flutter 应用程序。
此示例使用go_router包来处理路由。Flutter 团队维护go_router
包。它提供了一个简单的 API 来处理复杂的路由场景。
要创建一个新应用程序,请键入
flutter create <app-name>
。shell$ flutter create deeplink_cookbook
要将
go_router
包作为依赖项包含进来,请运行flutter pub add
flutter pub add go_router
要处理路由,请在
main.dart
文件中创建一个GoRouter
对象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 构建设置
#启动 Xcode。
打开 Flutter 项目的
ios
文件夹中的ios/Runner.xcworkspace
文件。
添加对 go_router 的支持
#在 Xcode 导航器中,展开Runner,然后单击Info。
在编辑器中,Ctrl + 单击并从上下文菜单中选择原始键和值。
在编辑器中,Ctrl + 单击并从上下文菜单中选择添加行。
应该显示一个新的键。
更改新键属性以满足以下要求
- 将键更改为
FlutterDeepLinkingEnabled
- 将类型更改为
Boolean
- 将值更改为
YES
。
- 将键更改为
添加关联域
#如有必要,启动 Xcode。
单击顶层的Runner。
在编辑器中,点击 **Runner** 目标。
点击 **签名与功能**。
要添加新域名,请在 **签名与功能** 下点击 **+ 功能**。
点击 **关联域名**。
在 **关联域名** 部分,点击 **+**。
输入
applinks:<web 域名>
。将<web 域名>
替换为您的域名。
在您喜欢的 IDE 中打开
ios/Runner/Runner.entitlements
XML 文件。在
<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>
保存
ios/Runner/Runner.entitlements
文件。
要检查您创建的关联域名是否可用,请执行以下步骤。
如有必要,启动 Xcode。
单击顶层的Runner。
在编辑器中,点击 **Runner** 目标。
点击 **签名与功能**。域名应该出现在 **关联域名** 部分。
将您的应用程序与您的网页域关联
#您需要在 Web 域名中托管一个 apple-app-site-association
文件。此文件告诉移动浏览器打开哪个 iOS 应用程序而不是浏览器。要创建该文件,请在上一节中找到您创建的 Flutter 应用程序的 appID
。
找到 appID
的组成部分
#Apple 将 appID
格式化为 <团队 ID>.<捆绑 ID>
。
- 在 Xcode 项目中找到捆绑 ID。
- 在 开发者帐户 中找到团队 ID。
**例如:** 给定团队 ID 为 S8QB4VV633
且捆绑 ID 为 com.example.deeplinkCookbook
,您将输入 appID
条目 S8QB4VV633.com.example.deeplinkCookbook
。
创建并托管 apple-app-site-association
JSON 文件
#此文件使用 JSON 格式。保存此文件时,请勿包含 .json
文件扩展名。根据 Apple 的文档,此文件应类似于以下内容
{
"applinks": {
"apps": [],
"details": [
{
"appIDs": [
"S8QB4VV633.com.example.deeplinkCookbook"
],
"paths": [
"*"
],
"components": [
{
"/": "/*"
}
]
}
]
},
"webcredentials": {
"apps": [
"S8QB4VV633.com.example.deeplinkCookbook"
]
}
}
将
appIDs
数组中的一个值设置为<团队 ID>.<捆绑 ID>
。将
paths
数组设置为["*"]
。paths
数组指定允许的通用链接。使用星号*
将每个路径重定向到 Flutter 应用程序。如果需要,请将paths
数组值更改为更适合您的应用程序的设置。将文件托管在类似以下结构的 URL 上。
<webdomain>/.well-known/apple-app-site-association
验证您的浏览器是否可以访问此文件。
测试通用链接
#使用物理 iOS 设备或模拟器测试通用链接。
在测试之前,将 Flutter 应用程序安装到 iOS 设备或模拟器上,在所需设备上使用
flutter run
。完成后,Flutter 应用程序将显示在 iOS 设备或模拟器的主屏幕上。
如果您使用模拟器进行测试,请使用 Xcode CLI
xcrun simctl openurl booted https://<web domain>/details
如果您使用物理 iOS 设备进行测试
- 启动 **备忘录** 应用程序。
- 在 **备忘录** 应用程序中输入 URL。
- 点击生成的链接。
如果成功,Flutter 应用程序将启动并显示其详细信息屏幕。
查找源代码
#您可以在 GitHub 仓库中找到 deeplink_cookbook 食谱的源代码。