• 作者:老汪软件技巧
  • 发表时间:2024-08-24 15:07
  • 浏览量:

一、建设背景

2024年1月18日,HarmonyOS NEXT鸿蒙星河版亮相,标志着“纯血鸿蒙”正式开始扬帆起航。同年6月21日,在华为开发者大会上HarmonyOS Next正式发布,并且将于第4季度发布商用版。

中原银行App用户中华为机型占比第一,及时兼容鸿蒙系统,能够为使用华为设备的客户提供更好的服务,同时适配鸿蒙系统也可以支持我国科技创新和提升金融系统安全性。

二、建设历程

2024年1月,中原银行App鸿蒙版项目启动;

2024年4月,完成整体研发工作;

2024年6月,完成功能测试、安全测试等测试工作;

2024年6月14日,正式在华为应用市场上架。

三、关键技术1. 混合开发框架

中原银行鸿蒙版应用架构为四层架构,分别为基础环境层、基础库层、混合开发框架层、业务模块层。

基础环境层: 主要是一些基础设施及环境配置,如OHPM私仓搭建;

基础库层: 主要是应用中使用的基础功能组件,如网络、加解密等;

混合开发框架层: 采用混合开发模式,各业务模块以中原银行小程序的形式开发,拥有“一次开发、多端适用”和迭代发版灵活快速等特性。基于混合开发框架,原有Android和iOS上运行的小程序可无缝运行在鸿蒙设备上,极大提高开发效率。

为进一步优化用户体验与性能,自研JsBridge,有效降低了小程序与原生系统间交互的性能损耗,确保流畅的交互体验。同时,采用离线下载机制,将小程序代码及资源通过离线包形式预先下载至本地,配合离线包校验机制,显著提升了小程序加载速度,同时增强了小程序安全性。此外,引入预加载策略,针对公共代码进行预加载处理,并使用C语言优化资源加载逻辑,进一步提升了整体加载性能。

业务模块层: 主要是应用中各业务功能,如存款、理财、登录等。

图3.1中原银行鸿蒙版架构图

2. 传输安全

为满足金融app对网络传输的安全、性能及复杂业务逻辑要求,使用分层拦截器将复杂的网络请求进行加解密、gzip、防重防等功能的拆分、解耦,增加网络传输过程安全性、可靠性。其中由于鸿蒙原生密钥协商算法暂不支持国密算法,项目中引入铜锁密码库,替换鸿蒙ECDH密钥协商算法,实现了对国密SM2_256的密钥协商算法支持,满足了监管对国密算法使用的要求;针对加密zip包解压和tar包文件读取,我们定制裁剪minizip-ng和libtar开源c库,通过napi实现arkTs与C库之间的相互调用,最终完成对加密zip包解压和tar包特定文件读取的支持。

图3.2网络分层拦截器

图3.3加解密流程

3. OHPM私仓搭建

由于金融网络与互联网网络隔离,金融网络环境下无法直接访问互联网上的鸿蒙中心仓库,导致开发环境无法正常使用,同时需要一个仓库来存放私有类库,为此我们搭建了 OHPM 私有仓库,实现了金融网络环境下 OHPM 仓库的正常使用,并且可一键安装内网专用包和外网公共包,为金融网络内鸿蒙应用开发打下坚实基础。

具体操作为:使用OHPM 私仓搭建工具(/consumer/cn…),配置“上游”鸿蒙相关仓库地址(),通过公司内专用互联网代理通道代理到鸿蒙中心仓库。现将搭建过程遇到的部分问题总结如下:

(1)由于内网中无法申请到 HTTPS 证书,私仓无法以 HTTPS 方式部署,我们改造了 OHPM 底层网络代码,对使用 HTTPS 的“上游”仓库,改为 HTTP 代理,改造代码如下:// 改造 ohpm 源代码,解决内网申请不了 https 证书的问题

// 文件: libs/service/uplinks/uplink-proxy/UplinkProxyService.js

// 改造 ohpm 源代码,解决内网申请不了 https 证书的问题
// 文件: libs/service/uplinks/uplink-proxy/UplinkProxyService.js
if ("https:" === t.protocol.trim()) {
  const t = e.https_proxy;
  // 对 https 的上游仓库,使用 http 代理
  t && (o = new i.HttpProxyAgent(t));
}

(2)原版搭建工具为前台启动,可靠性低,日志难以管理。在部署过程中,我们使用了守护进程管理工具PM2用于提升服务可靠性并记录日志,配置代码如下:

// 使用 pm2 实现守护进程管理
// 文件: pm2.config.js
module.exports = {
  apps: [
    {
      // 服务名称
      name: "ohpm-repo",
      // 私仓搭建工具的所在目录
      cwd: "/path/to/ohpm-repo",
      // 入口脚本
      script: "index.js",
      // 集群模式启动,提升服务可靠性
      exec_mode: "cluster",
      // 实例数量
      instances: 2,
      // 崩溃时自动重启服务
      autorestart: true,
      // 不需要监听文件变化
      watch: false,
      // 内存时重新启动
      max_memory_restart: "1G",
      // 将控制台日志输出到文件
      error_file: "./logs/ohpm-repo-error.log",
      out_file: "./logs/ohpm-repo-out.log",
      merge_logs: true,
      // 环境变量
      env_production: {
        NODE_ENV: "production",
      },
    },
  ],
};

四、鸿蒙特性实践1. 原生智能

鸿蒙原生系统已深度集成了多项AI能力,例如OCR识别、语音识别等。我们在个人信息设置、贷款信息录入等场景集成了鸿蒙Vision Kit组件,通过扫描身份证/银行卡的方式录入客户信息,不仅提升了客户使用的便捷性,还确保了交易的安全性;后续还会在客户上传证件照片时集成智能PhotoPicker,当客户需要上传证件照时,系统智能地从图库中选出证件类照片优先展示,极大地提升用户使用体验;在搜索等场景集成Core Speech Kit组件,通过语音识别实现说话代替手工打字输入,使得输入操作更便捷、内容更准确,后续计划将该能力扩展至智能客服交互和老年版界面播报场景,真正地实现智能贴心服务。

2. 终端安全

鸿蒙设备为开发者提供了基于可信执行环境(TEE)的关键资产存储服务(Asset Store Kit),确保用户敏感数据无法被恶意获取和篡改。我们在可信终端识别场景,通过采集鸿蒙基础环境信息,配合相关唯一标识算法计算出设备的标识码,为防止该标识码被恶意篡改或因应用卸载重装发生变化,利用Asset Store Kit将该标识缓存于设备TEE中,再结合云端关联匹配与碰撞检测机制, 充分保证了标识码的稳定性与抗欺骗性,为应用提供了稳定、唯一与抗欺骗的可信终端识别能力。

3. har和hsp

鸿蒙lib库分为har和hsp,har包类似正常的lib库,但是如果存在多终端发布可能会重复引用导致包体变大;hsp包为项目内可以共享的lib库,可以提高代码、资源的可重用性和可维护性。

实践过程中发现对外提供lib库时如使用hsp须包名,版本与宿主App保持一致,否则会出现安装失败问题。通过实践总结如下:

(1)对外提供sdk要使用har包;

(2)项目内部共享的基础库使用hsp包。

4. sdk依赖

复杂的App项目基本上都会采用分模块管理,不可避免会出现多个模块依赖同一基础库的现象。基础库升级时所有依赖此基础库的模块均需升级,此时非常容易出现个别模块遗漏升级而导致库冲突。

建议统一管理维护sdk依赖,具体操作如下:

(1)将版本信息统一放置在parameter-file.json;

(2)增加冲突解决配置,.ohpmrc中配置resolve_conflict=true,配置后系统会自动使用最新lib库版本。

五、未来展望

展望未来,我们将深度依托鸿蒙系统的“一次开发、多端部署”核心优势,进一步拓展金融服务边界,构建跨设备、无缝连接的“1+8+N”全场景智慧金融服务生态,将服务延伸至PC、电视、智能手表、智能音箱、平板、穿戴设备、车机、耳机以及更多泛IoT设备(即“N”类设备),实现金融服务在各类智能终端上的全面覆盖与深度融合。银行网点服务侧,我们将结合鸿蒙实况窗技术,实现客户在网点排队取号时,可通过手机或智能手表实时查看排队进度,甚至提前线上完成部分业务预办理,提升服务效率与用户体验。此外,通过对接鸿蒙的意图框架,智能识别用户的信用卡还款需求,自动推送还款提醒,减少逾期风险;同时,基于用户的地理位置等信息,精准推送本地化的金融产品与服务,实现金融服务的个性化与精准化。