本专题为软件平台的路由规则设计,不限于移动端,涵盖 移动端、Web、电脑(桌面)、手表与手环等智能穿戴。涉及的软件体系覆盖:iOS、Android OS、HarmonyOS、Flutter、MacOS、WinOS、WebApp、ReactNative App、WatchOS 及智能穿戴形态。本文给出各平台在深链接、路由表、导航方式上的对照与要点,便于统一路由协议与适配层设计。
一、设备形态与平台定义
1.0 端态分类(不限于移动端)
| 端态 | 包含设备/形态 | 本专题对应平台 |
|---|
| 移动端 | 手机、平板 | iOS、Android、HarmonyOS、Flutter、ReactNative |
| Web | 浏览器、PWA | WebApp |
| 电脑(桌面) | 台式机、笔记本 | MacOS、WinOS |
| 手表、手环等智能穿戴 | 智能手表、手环、其他穿戴设备 | WatchOS、HarmonyOS 穿戴等 |
1.1 平台列表与技术栈
| 平台 | 类型 | 主要技术栈 | 典型路由/导航 API |
|---|
| iOS | 移动端原生 | Swift / Objective-C, UIKit / SwiftUI | URL Scheme, Universal Links, UINavigationController, Router 单例 |
| Android OS | 移动端原生 | Kotlin / Java, Activity / Fragment, Jetpack | Intent + intent-filter, App Links, ARouter / TheRouter |
| HarmonyOS | 移动/多设备原生 | ArkTS / ArkUI, Stage 模型;超级终端与分布式能力 | Want / 隐式 Want, 路由注解, 页面栈;可结合分布式任务调度做跨设备 path 迁移 |
| Flutter | 跨平台 UI 框架 | Dart, Widget | Navigator 1.x/2.0, go_router, app_links |
| MacOS | 桌面端原生 | Swift / Objective-C, AppKit / SwiftUI | URL Scheme, NSApplication, 窗口与 ViewController 栈 |
| WinOS | 桌面端 | C# / C++, WinUI / WPF / UWP | 协议关联, 启动参数, 框架内路由(如 Frame.Navigate) |
| WebApp | Web 应用 | HTML/JS, React / Vue / Angular, SPA 路由 | History API, Hash 路由, React Router / Vue Router |
| ReactNative App | 跨平台移动 | JavaScript/TypeScript, Native 容器 | Linking API, React Navigation linking |
| WatchOS | 手表等穿戴 | Swift, WatchKit / SwiftUI | 简化 URL Scheme, 与 iPhone App 协同 |
| 手环等穿戴 | 手环、其他穿戴 | 厂商 SDK / 定制系统 | 多与手机 App 协同,路由可简化或复用 path 协议 |
1.2 平台与路由专题关系(思维导图)
mindmap
root((软件平台路由 多端))
移动端
iOS Android HarmonyOS
Flutter ReactNative
Web
WebApp History / Hash
电脑 桌面
MacOS WinOS
手表 手环 智能穿戴
WatchOS HarmonyOS 穿戴
二、深链接与系统唤起能力对照
2.1 各平台深链接机制
| 平台 | 自定义 Scheme / 等价机制 | 可验证 HTTPS 深链接 | 备注 |
|---|
| iOS | URL Scheme(CFBundleURLSchemes) | Universal Links(AASA) | 系统级,未安装无反馈 |
| Android | Intent Filter + custom scheme | App Links(assetlinks.json) | 6.0+ 可免选择框 |
| HarmonyOS | Want scheme / ability 的 uri | 支持 HTTPS 关联(需配置) | 与 Android 思路相近 |
| Flutter | 依赖宿主:iOS/Android 配置 + app_links | 同左,app_links 统一入口 | 多端共用 Dart 层路由 |
| MacOS | URL Scheme(Info.plist) | Universal Links(同 iOS) | 与 iOS 配置方式类似 |
| WinOS | 协议关联(注册表/包清单) | 无统一 AASA 类标准 | 多为自定义协议或启动参数 |
| WebApp | 不适用(本身在浏览器) | 同源 / 多域即“深链接” | History 或 Hash 路由 |
| ReactNative | 使用原生 iOS/Android Scheme 与 App Links | 同左,Linking + React Navigation | JS 层统一处理 URL |
| WatchOS | 简化 Scheme,常与 iPhone App 互通 | 一般不单独配 Universal Links | 界面简单,路由层级少 |
| 手环等穿戴 | 多通过手机 App 或厂商协议 | 视厂商能力 | 路由层级少,可与 Watch 类似处理 |
2.2 深链接入口与路由统一(流程图)
flowchart TB
subgraph 外部入口
E1[iOS / MacOS / WatchOS]
E2[Android / HarmonyOS]
E3[Web 打开链接]
end
subgraph 系统层
S1[Scheme / Universal Link / Want / 协议]
S2[唤起对应平台 App]
end
subgraph App 内
A1[接收 URL / Intent / Want]
A2[解析 path + query]
A3[统一 Router.navigate]
end
E1 --> S1
E2 --> S1
E3 --> S1
S1 --> S2 --> A1 --> A2 --> A3
三、App 内路由与导航方式对照
3.1 路由表与导航 API
| 平台 | 路由表形态 | 典型导航方式 | 声明式/命令式 |
|---|
| iOS | Map / 注册 Block 或 VC 类型 | pushViewController, present, replace | 多为命令式;可自建状态驱动栈 |
| Android | Map / 注解生成表(ARouter) | startActivity, FragmentTransaction | 命令式;Jetpack Navigation 可声明式 |
| HarmonyOS | 路由表或注解 | router.pushUrl, 页面栈 | 命令式为主 |
| Flutter | GoRoute 列表 / 自定义 RouteTable | Navigator.push, go_router.go/push | 声明式(Navigator 2.0) |
| MacOS | 类似 iOS,Window/VC 栈 | show, present, 窗口管理 | 命令式 |
| WinOS | 框架内路由表(如 Frame) | Frame.Navigate, 启动参数 | 命令式或框架声明式 |
| WebApp | React Router / Vue Router 配置 | history.push, router.push | 声明式(状态即 URL) |
| ReactNative | React Navigation 配置 | navigation.navigate | 声明式(state 驱动) |
| WatchOS | 简单 Map 或 层级界面 | push, present | 命令式,层级少 |
3.2 统一路由协议在各平台的落地方式
- path + query:九端均可用「path + query」作为统一语义;各端适配层将 path 映射到本平台页面或功能(服务、动作、弹窗)。
- 页面跳转:push / replace / present;WebApp 对应 pushState/replaceState 或 hash 变更;WatchOS 可只实现 push/pop。
- 功能唤醒:getService(获取服务实例)、invokeAction(执行动作/能力)、openModal(弹窗/浮层),与页面跳转共用同一路由表,按路由项类型分发;各端适配层实现对应 API。
- 拦截器链:除 WebApp 外,各端均可在「查表 → 执行」之间插入拦截器(鉴权、埋点、降级);WebApp 可用路由守卫(beforeEach)等价实现。
四、各平台适配层要点摘要
| 平台 | 适配层职责 | 关键 API / 配置 |
|---|
| iOS | 解析 URL → path/params;查表 → 创建 VC;push/present | AppDelegate openURL;NSUserActivity;UINavigationController |
| Android | Intent.data → path/params;查表 → Intent;startActivity | intent-filter;App Links;Activity 栈 |
| HarmonyOS | Want.uri → path/params;查表 → 目标 Ability;router.pushUrl | module.json5 abilities;Want 参数 |
| Flutter | app_links 收 URL → path/params;go_router.go/push 或 Navigator | MaterialApp.router;DeepLinkHandler |
| MacOS | 同 iOS(URL Scheme + Universal Links);NSWindow/NSViewController | Info.plist;AppDelegate |
| WinOS | 协议/启动参数 → path/params;Frame.Navigate 或 主窗口导航 | 包清单协议;OnActivated |
| WebApp | 直接使用 path = location.pathname,query = searchParams | History API;Vue Router / React Router |
| ReactNative | Linking.getInitialURL/ addEventListener → path/params;React Navigation | linking 配置;NavigationContainer |
| WatchOS | 简化 URL 或 与 iPhone 同步的 path;WKInterfaceController 导航 | 与 iOS App 通信;简化路由表 |
| 手环等穿戴 | 与手机 App 或厂商协议同步 path;界面层级少 | 简化路由表或复用主 App path 协议 |
五、同体系跨端跨平台协同
同体系:同一产品/业务域下的多端应用(如同一款产品的 iOS、Android、Web、手表、桌面)。跨端跨平台协同要求路由在体系内协议统一、同一 path 多端语义一致,并支持设备间接力与状态同步。
| 协同能力 | 说明 | 实现要点 |
|---|
| 协议统一 | 各端使用同一 path、query、路由类型(page/action/service/modal)规范 | 制定体系内 path 命名规范(如 /app/...、/action/...),各端适配层按规范映射到本端 |
| 同一链接多端一致 | 同一 URL 在 Web 打开为 Web 页、在 App 打开为 App 页、在手表打开为手表页,业务目标一致 | 深链接与 Web 使用相同 path;各端路由表对同一 path 指向等价业务;未安装时 Web 落地页,安装后 App 打开同一 path |
| 跨端互跳与续传 | Web 调起 App、App 内打开 H5、「在电脑上继续」等 | Universal Links / App Links / Scheme 传 path+query;服务端或本地记录「当前 path」供他端续传 |
| 设备间路由同步 | 手表与手机、手机与电脑等同账号多设备 | 手表操作 path 通过 Watch Connectivity 等同步到手机打开;或服务端存储「用户当前 path」多端拉取 |
| 配置与表跨端一致 | 路由表、动态下发、降级在体系内统一管理 | 服务端按端态/版本下发路由配置;path 冲突检测、灰度、降级策略体系内统一 |
协同建立在统一 path 协议与各端适配层之上:协议约定「说什么」,适配层约定「各端怎么做」;同体系内 path 语义一致,跨端链接与设备间协同才可落地。
5.1 参考:鸿蒙超级终端思想与路由设计的对应
鸿蒙超级终端(HarmonyOS 超级终端)是华为提出的多设备协同理念:手机、平板、PC、手表、智慧屏等通过同一账号组成「一台超级终端」,实现任务迁移、数据同步、能力共享,而非简单的设备互联。[^HOS]
| 超级终端概念 | 含义 | 与本专题路由设计的对应 |
|---|
| 分布式软总线 | 设备自动发现、安全连接,多协议(蓝牙、Wi-Fi 等)统一抽象 | 路由不直接实现总线,但统一 path 协议使各端对「同一目标」有统一寻址,便于在应用层做跨端调用与任务迁移 |
| 分布式数据管理 | 跨设备数据实时同步、统一访问 | 路由表、动态配置、当前 path/状态在体系内统一或按端下发,相当于应用层「状态与配置」的跨端一致 |
| 分布式任务调度 | 任务/界面在设备间迁移(如手机看一半到平板继续)、硬件能力跨设备调用 | 同一 path + query 在 A 端打开与在 B 端打开指向同一业务;设备间 path 同步与接力(如手表点某 path 同步到手机打开)即「任务迁移」的应用层实现 |
| 一个账号、多设备一体 | 多设备以用户为中心形成逻辑一体 | 同体系内 path 协议统一、同一链接多端一致打开、配置与表跨端一致,支撑「一处定义、多端生效」的体验 |
将路由设计为统一 path 协议 + 各端适配层,与超级终端「多设备一体」的思想一致:path 作为跨端契约,任务续传、设备间接力可通过传递 path+query 与上下文实现;在非鸿蒙生态(如 iOS/Android/Web)也可通过自有通道(如 Watch Connectivity、Universal Links、服务端会话)实现类似「超级终端」的跨端协同。
[^HOS] 华为消费者业务支持文档、华为云社区等公开介绍:超级终端实现多设备协同;鸿蒙分布式技术。
flowchart TB
subgraph 同体系
R[统一 path + query 协议]
end
subgraph 多端
M[iOS / Android / HarmonyOS]
W[Web]
D[MacOS / WinOS]
H[Watch / 穿戴]
end
subgraph 协同效果
C1[同一链接 多端一致打开]
C2[Web↔App 互跳 续传]
C3[手表↔手机 path 同步]
end
R --> M
R --> W
R --> D
R --> H
M --> C1
W --> C1
M --> C2
W --> C2
M --> C3
H --> C3
六、选型与扩展建议
- 统一协议:九端均采用「path + query + 路由类型 + navigate 方式」作为统一路由协议,便于同体系跨端协同、文档、运营与监控一致。
- 适配器:在通用路由组件(见 07)中为每平台实现 IPlatformRouterAdapter(openPage / replacePage / presentPage / resolveService / invokeAction / openModal),必要时为 WatchOS 做精简实现。
- 深链接:iOS / Android / HarmonyOS / MacOS / ReactNative(宿主)需在系统层配置 Scheme 或 HTTPS 关联;Flutter / ReactNative 在框架层统一收口后调用同一 Router。
- WebApp:与 Native 共用 path 规范时,可同一套 path 在 H5 与 Native 间跳转,实现「一条 path、多端一致」,支撑同体系协同。
- 手表、手环等智能穿戴:路由层级少,可复用与手机/主 App 一致的 path 协议,适配层做精简实现;通过设备间通道与主端同步 path,实现协同。
七、参考文献与延伸阅读
- 本专题 01~07:总纲、URL Scheme、Universal Links、组件化路由、声明式路由、超级 App 体系、通用组件设计。
- Apple:Defining a Custom URL Scheme;Supporting Universal Links。
- Android:Create deep links;Verify App Links。
- React Native:Linking;React Navigation Deep Linking。
- Flutter:Deep linking;go_router。
- HarmonyOS:Want 与 Ability 路由相关官方文档。