本文聚焦 O2OA(翱途)与鸿蒙(HarmonyOS/OpenHarmony)在端侧的深度集成方案,系统阐述从技术架构设计、工程模块拆解到核心功能落地的全流程实现路径。内容涵盖认证通信机制、H5 混合开发模式、服务卡片构建、消息推送体系、文件上传管理、分布式能力应用等核心模块,同时深入探讨性能优化策略、安全防护机制及信创环境兼容方案。文中穿插 ArkTS 代码示例,为技术团队提供可直接复用的实践指导。
该方案的特点或者优势
1. 双形态:ArkTS 原生 + H5 混合两条路线,覆盖 HarmonyOS NEXT 与传统设备。
2. 统一认证:建议走 OIDC/OAuth2 授权码(PKCE)+ JWT,端侧统一 Bearer 调用 O2OA REST。
3. 能力矩阵:待办/审批走 卡片(Service Widget) 快速触达;通知用 系统通知 + 推送;长连接用 WebSocket 或 SSE。
4. 工程实践:ArkUI/Stage 模型、Web 组件注入 Token、分环境构建、证书 Pinning、最小权限、端云联调清单。
5. 信创适配:后端继续跑在麒麟/统信/龙芯/飞腾等平台与国产数据库(达梦/金仓/人大金仓/openGauss)上,前后端解耦,端侧无侵入。
该方案典型业务场景与总体架构1. 场景
1)移动审批:待办、已办、抄送;流程查看、意见填写、附件上传。
2)智能助手:结合 O2OA 的 AI/ML 能力(如会议纪要、表单填写建议)在端侧唤起。
3)通知触达:任务提醒、流程超时、公告播报。
4)资产/档案:移动端文件定位、在线预览、扫码入库。
2. 架构展示(文字版)
[O2OA 网关/API] ——(HTTPS/OIDC)—— [HarmonyOS App(ArkTS)]
-- 原子化服务/卡片(待办数)
-- WebView(表单H5 + JSBridge)
-- WebSocket/SSE(实时提醒) [AI/搜索/文件] |-- Push/通知/深链(deeplink)
[信创数据库/操作系统/『芯片』栈]
端侧工程拆解(ArkTS / Stage 模型)1. 推荐工程结构
/entry // 主 HAP
/src/main/ets
/entryability // 主 Ability(Stage)
/pages // ArkUI 页面(待办/审批/设置)
/components // 组件(列表卡片、状态视图)
/common // 常量/工具/网络封装/存储
/services // 业务服务(auth、workflow、file)
/resources // 字体/图标/多语言
module.json5 // 权限与元数据(INTERNET、NOTIFICATIONS…)
/widget // 卡片 HAP(可选)
/feature-x // 业务子模块(按需拆分)
2. 基础权限建议:按需最小化
统一认证:OIDC/OAuth2(PKCE)+ JWT1. ArkTS:最小可用网络封装
// common/net.tsimport http from '@ohos.net.http';export async function request(url: string, options: {
method?: string; headers?: Record<string,string>; body?: string } = {}) {
const httpReq = http.createHttp(); try {
const resp = await httpReq.request(url, {
method: options.method ?? 'GET',
header: options.headers ?? {},
extraData: options.body ?? '',
expectDataType: http.HttpDataType.STRING,
});
if (resp.responseCode >= 200 && resp.responseCode < 300) {
return JSON.parse(resp.result ?? '{}');
}
throw new Error(`HTTP ${resp.responseCode}: ${resp.result}`);
} finally {
httpReq.destroy();
}
}
2. 带 Token 调用 O2OA
// services/workflow.ts
import { request } from '../common/net';
import { tokenStore } from '../common/tokenStore';
const API_BASE = '
export async function fetchTodoList(page = 1, size = 20) {
const token = await tokenStore.getAccessToken();
return request(`${API_BASE}/workflow/todo?page=${page}&size=${size}`,
{
headers: {
'Authorization': `Bearer ${token}`
}
});
}
H5 混合:ArkUI Web 组件 + JSBridge(推荐保留)对于复杂表单/流程设计,用 O2OA 的 H5 能力更高效。原生负责导航、鉴权、系统能力(通知/文件/分布式),H5 负责表单与可视化。
1. 关键点
1)使用 Web 组件加载表单页:https://o2.example.com/h5/form?id=xxx
2)通过 注入 JS 或 URL Scheme 把 Token/用户信息安全传入(仅限同源 HTTPS)。
3)监听 H5 返回事件,在原生层做文件选取/拍照、扫码等。
2. ArkTS:Web 注入示例
// pages/FormPage.ets (片段)Web({
src: `https://o2.example.com/h5/form?id=${this.formId}`,
controller: this.webCtrl
})
.onPageEnd(async () => {
const token = await tokenStore.getAccessToken(); // 仅在可信页面注入,与后端约定window.O2OA.setToken
this.webCtrl.runJavaScript(`window.O2OA && window.O2OA.setToken(${JSON.stringify(token)})`);
})
安全提示:只对受信域名白名单页面注入;生产启用 内容安全策略(CSP),并对 WebView 开启 HTTPS 强制与证书校验。
原子化服务/服务卡片(Form/Widget)1. 用于「待办数量」「今日审批」「公告摘要」等 glance 信息。
2. 使用卡片的 FormProvider 定时/事件刷新;点击深链到对应页面(deeplink)。
卡片数据推送思路:
1. App 启动或收到推送 → 拉取 /workflow/todo/count → 更新卡片。
2. 设定 WorkScheduler 周期(后台受限场景尽量以推送事件触发)。
消息触达:系统通知 + 推送通道1. 系统通知:到达即显,适合本地与实时提醒。
2. 云推送:后端(O2OA 或网关)与推送服务对接,按用户/角色推送消息,点击深链参数(如 taskId)直达详情页。
3. 实时连接:在 App 前台可使用 WebSocket(或 SSE)同步待办数、在线消息。
4. 本地通知(示意):
// services/notify.tsimport notification from '@ohos.notificationManager';
export async function notify(text: string, deeplink?: string) {
await notification.publish({
content: {
notificationContentType: notification.ContentType.TEXT, normal: { text }
},
label: 'o2oa',
wantAgent: deeplink ? /* 构造 deep link */
undefined : undefined
});
}
文件与拍照上传1. ArkTS 端使用 文件选择/相机📷️ 能力获取 File/uri,通过表单上传到 /file/upload。
2. 建议后端支持 分片/断点续传,大文件直传对象存储(后端签名换直传,端侧仅 PUT 到存储)。
3. 上传(简化示意)
// services/file.ts
import http from '@ohos.net.http';
import { tokenStore } from '../common/tokenStore';
export async function upload(uri: string) {
const token = await tokenStore.getAccessToken();
const httpReq = http.createHttp();
try {
const resp = await httpReq.request('https://o2.example.com/api/file/upload', {
method: http.RequestMethod.POST,
header: {'Authorization': `Bearer ${token}`},
files: [{
name: 'file',
filename: 'upload.bin',
filePath: uri
}]
});
if (resp.responseCode !== 200) throw new Error('upload failed');
return JSON.parse(resp.result ?? '{}');
} finally {
httpReq.destroy();
}
}
分布式能力(可选)1. 设备协同:在平板/手机/PC 形态间同步审批上下文(例如半填的表单草稿)。
2. 分布式数据:使用分布式 KV/数据库时,建议只存储无敏感轻量数据;敏感信息仍以 Token + 后端拉取为准。
3. 跨设备流转:利用深链参数在目标设备继续流程。
后端(O2OA)配合清单认证:开放 OIDC/OAuth2 授权码(PKCE)与 Client Credentials(仅服务到服务)。
安全加固与合规1. 证书 Pinning:在客户端校验后端证书公钥指纹,防中间人。
2. Token 安全:仅内存/受限存储,锁屏清除策略;前后台切换时刷新有效期。
3. 最小权限:仅在需要时申请相机📷️/媒体/通知。
4. 输入验证:端侧基础校验 + 服务端强校验,严禁信任端侧。
5. 日志脱敏:Token/手机号/身份证🪪等全部脱敏或不落盘。
6. 合规:遵循企业数据分级、等保/隐私合规要求,端侧展示须可控。
兼容与演进策略1. 双路线并行:ArkTS 原生优先 + H5 混合兜底,保证 HarmonyOS NEXT 设备可用。
2. SDK 依赖体检:如既有 Android 依赖(地图/扫码等),需替换为 Harmony 生态等效能力或 H5 能力。
3. 模块化:推送、扫码、预览等能力抽象为接口,便于替换底层实现。
4. 灰度与 A/B:通过远程配置开关 H5/原生页面比例,平滑迁移。
性能与体验优化清单1. 首屏:缓存待办数/用户信息,后台并行拉取;Skeleton 占位。
2. 列表:虚拟滚动 + 分页(20~30)+ 图片懒加载。
3. 表单:分段提交、草稿自动保存(本地/分布式 KV)。
4. 网络:开启 HTTP 压缩、合理超时与重试、弱网降级到 H5。
5. 状态管理:统一 Store(如 AppStorage/LocalStorage),避免多源真相。
6. 可用性:深色模式、无障碍语义标签、文字缩放适配。
信创生态与 O2OA 的后端适配1. 操作系统:统信 UOS、银河麒麟 Kylin 等;
2. CPU:龙芯、飞腾、鲲鹏、海光等;
3. 数据库:达梦、神通、金仓、人大金仓、openGauss 等。
4. O2OA 部署:仍以 Java/Jakarta EE 微服务化部署,容器化优先;通过适配层/数据源驱动确保国产数据库兼容;日志/监控接入国产中间件(ELK 等国产替换)。
端侧(鸿蒙)与后端(信创)完全解耦,移动端只面向统一的 HTTPS API 与 OIDC,工程上不受『服务器』底层差异影响。
交付与运维(实操建议)1. 环境分层:DEV/UAT/PROD 三套域名与 IdP;App 以构建参数切换。
2. CI/CD:hvigor/ohpm 构建,接企业流水线;自动化单测 + UI 回归。
3. 监控指标:登录成功率、API RTT、推送送达率、崩溃率、首屏时间。
4. 回归清单:登录/刷新、列表分页、审批提交流、附件上传、卡片刷新、通知深链、弱网/离线、权限拒绝路径。
常见问题(FAQ)1. 我们已有 Android 版 App,迁移难度大吗?
建议 ArkTS 原生 + H5 混合重构关键路径(登录、列表、审批),其余页面先以 H5 运行;逐步替换第三方 SDK 为鸿蒙等效能力。
2. 不用原生表单,全用 H5 可以吗?
可以,但建议把登录、通知、文件、扫码、卡片等 系统级能力 放在原生侧,整体体验与稳定性更好。
3. AI 助手怎么集成?
端侧以文本/语音输入,走 O2OA 的 AI 网关(SSE/WebSocket 流式),在审批页提供「智能填充/要点总结」侧栏;注意敏感字段的提示与用户确认。
小结
1. O2OA 与鸿蒙系统的结合,不只是要能正常运行,而是要做到体验稳定、触达高效、安全合规、可持续演进。
2. 以 ArkTS 原生 + H5 混合 为主线,配合 OIDC 统一认证、卡片/通知触达、文件与实时连接,即可快速构建一套企业级移动办公与低代码能力的高质量实现。
3. 后端继续拥抱 信创生态,端云一体、前后解耦,保持长期可维护与可扩展。