HarmonyOS 4.0 实况窗上线!支付宝实现医疗场景智能提醒

本文转载自支付宝体验科技,作者是蚂蚁集团客户端工程师博欢,介绍了支付宝如何基于 HarmonyOS 4.0 实况窗实现医疗场景履约智能提醒。

1.话题背景

8 月 4 日,华为在 HDC(华为 2023 开发者大会)上推出了新版本操作系统HarmonyOS 4.0,主打个性化与多元化的的口号。在功能介绍环节,支付宝依托HarmonyOS 4.0 能力提供的一项新功能出现在了大会的介绍PPT上。

这个功能乍一看就像一个系统的通知,实际上也确实是一个通知,只不过与通知有很大的区别。在华为的官方文档里,这个被称之为实时活动或者是实况通知。实时活动是最开始的名称,现在官方文档称之为实况窗。

为什么说它是国产灵动岛呢?因为这个实况窗具备多种形态,其中的胶囊态与iOS的灵动岛在UI展示上几乎就是"如出一辙"。除此之外,实况窗具有更加丰富的展示位置,从熄屏,锁屏,到桌面,通知栏,通知中心,都有其身影。我们首先来看一下官方的效果展示:

依次分别是通知栏卡片,桌面胶囊态,桌面胶囊态展开形态,锁屏卡片,胶囊态。

在上方官方的UI展示效果图上,胶囊态不光展示在桌面上,支持点击扩展为通知卡进行操作,同时出现在熄屏界面。熄屏页面的胶囊态文案不支持点击扩展为实时卡片。点击熄屏胶囊态,会进入锁屏卡片页面查看详情。

实况窗本质上是履约类消息的推送展示。华为的官方定义为:帮助用户聚焦任务,进行快速查看和及时处理的通知形体。实况窗具有实效性,阶段性和变化性的特点。实效性是指,整个通知服务会持续一段时间,在用户不主动关闭的前提下,具备自动展示和结束的能力。实效性是指,通知的消息在一段时间内有效。通知具有变化性,它是支持内容动态刷新。

2.成果展示

在了解了华为实况窗的背景和能力之后,我们回到发布会上所展示的支付宝实时活动通知。目前支付宝在最新10.5.10版本已经具备了华为实况窗能力,目前主要接入应用场景在医疗方面,后续会开放更多的应用场景。那我们先来欣赏一下支付宝上的"国产灵动岛"的真实上机形态。

通知栏状态:

左侧展示正常创建实时活动卡片;

右侧展示支持用户对卡片进行更多操作,包括设置和删除卡片。

桌面胶囊态:

左侧展示手机桌面左上角的胶囊文案;

中间侧展示点击胶囊态可展开通知卡片;

右侧展示在胶囊态展开卡片后支持用户更多操作,包括设置和删除卡片。

锁屏状态:

展示用户按下电源键进入锁屏页面展通知卡片(手机拍摄);

熄屏胶囊态:

手机界面进入息屏界面展示胶囊文案(手机拍摄);

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

上述所展示的仅为强调文案类模板在支付宝医疗场景下的UI效果,除了强调文案类模板外,华为还提供了多种展示模板应用于不同的场景,比如说针对打车或者外卖场景下的进度可视化类模板,针对体育赛事的赛事比分模板。

实况窗可以作为一个强提醒通知渠道,对于重要信息可以多方位展示。如果考虑到对于部分用户出现过度打扰,实时活动同样支持减少胶囊态文案透出,只出现通知栏中。

3.实现细节

展示了这么多状态的实况窗UI,大家会比较好奇怎么实现这样一套实况窗通知呢?

刚才在开头已经介绍了实况窗其实是一个通知,本质上是Android通知功能的扩展。HarmonyOS通过解析通知的扩展参数,创建对应的模板并填充数据。对于接入功能的第三方应用而言,不需要绘制UI,只需要定制接口协议与模版参数,即可实现通知活动卡片的创建与展示。另外我们所看到的胶囊态其实不是一种独立的形态,它是卡片形态的扩展形式,依附于具体的卡片模板,这就是为什么在桌面通过点击胶囊态可以展开卡片。

以支付宝接入医疗场景的实况窗为例,简单介绍一下实现细节。

3.1处理链路

在支付宝端内,实现一个实况窗通知,涉及到三个业务团队的合作,包括客户端团队,消息平台服务端团队以及消息Push团队,这三个团队的分工如下:

客户端团队:接收消息平台下发的sync消息(服务端与客户端之间的双向可靠数据同步服务,包括sync上行和下行),创建实况通知,也就是通知“上岛”,并将卡片信息与token信息发送至消息平台团队和Push团队;

消息平台服务端团队:查询用户在服务场景下创建的履约订单,按照通信协议通过sync下行通知到客户端,接收客户端sync上行的卡片信息;

Push团队:接收客户端Rpc上报的token信息,并且作为下游,接收上游消息平台传递来的卡片通知更新信息。将更新参数发送至厂商云端,由厂商完成通知卡片的更新以及删除操作;

详细的流程通过甬道图表示:

对于三方应用而言,不需要关心UI绘制。对于客户端团队而言,完成通知卡片的创建之后,无感后续的更新操作。由三方应用云端直接对接厂商云端,厂商平台接收更新数据后直接下发到对应的通知卡片,完成状态与数据更新。下图展示的是通知卡片更新状态下的数据流转:

3.2通信协议

实况窗的通信协议主要包括两方面:

三方应用内的通信协议:数据由消息平台下行到客户端,并在客户端创建通知卡片后,将更新消息发送下游Push平台。

三方应用外与厂商平台的通信协议:Push平台接收上游消息平台的更新消息后,将数据流转对接到厂商平台完成更新;

这两个通信协议其实也是通知卡片生命周期流程。三方应用内的通信协议应用于实况窗通知卡片的创建,三方应用与厂商平台的通信协议是应用于实况窗通知卡片的更新。

3.2.1 应用内通信协议

应用内的通信协议并不是独立的,而是继承自iOS灵动岛在支付宝端内的通信协议。为什么说是继承?为什么说是非独立?

继承是因为华为实况窗的协议是iOS灵动岛在支付宝端内通信协议的扩展版本,及在原有的协议基础上,扩展创建华为实时活动卡片的必须字段。整个协议的创建原则是:最大包容原则,即能复用现有字段则复用现有字段,缺少则通过团队协商后进行扩展。

非独立是指,整个通信协议的确定必须具有前瞻性,包括能满足未来支持华为更多种类模板的实时活动,也能满足后续其他国内厂商跟进同类“灵动岛”功能的需求。

这一套协议目前已经支持iOS灵动岛以及华为实况窗,由客户端团队维护.

3.2.2 应用外通信协议

应用外的通信协议主要是用于Push团队对接厂商进行通知卡片更新操作。这个的复杂在于,需要翻译应用内的通信协议。将翻译后的应用内的通信协议字段请求厂商接口,完成实况窗通知卡片的更新。

如何翻译应用内的协议,主要是将消息平台,客户端,Push三个团队的对接字段关联起来,做成一个三元组参数。

应用外的通信协议目前依然由客户端团队维护。

3.3代码接入

代码接入主要是以客户端的角度来描述。

3.3.1 创建卡片

实况窗是在通知的基础上附加了扩展参数,若是在支持实况窗的设备上发送,则系统会根据这些扩展参数,将通知按照实况窗的样式进行显示。

// 创建 bundle 保存通知信息,设置 type 为 4,表示强调文本模板类型
Bundle liveNotificationData = new Bundle();
liveNotificationData.putInt("XXXX", 0);
liveNotificationData.putString("XXXX, "Other");
liveNotificationData.putInt("XXXX", 4);
// 创建 bundle 保存强调文本模板类型的通知所需的扩展参数
Bundle feature = new Bundle();
feature.putString("XXXX", "取餐码");
feature.putString("XXXX", "750");
// 将 feature 的 bundle 设置到通知参数 liveNotificationData 中
liveNotificationData.putBundle("XXXX", feature);
// 创建通知,调用 addExtras 添加通知信息
Notification notification = new Notification.Builder(context, channelId)
3.3.2 扩展胶囊

前文讲过胶囊态是卡片的扩展形态,在开发上,设计好胶囊的参数,然后添加至实况窗卡片的扩展参数上。

// 创建 bundle 保存胶囊所需的参数
Bundle capsule = new Bundle();
capsule.putInt("XXXX", 1);
capsule.putInt("XXXX", 1);
capsule.putParcelable("XXXX", Icon.createWithResource(context, R.drawa
ble.xxx));
capsule.putInt("XXXX", Color.parseColor("# FFFF0000"));
capsule.putString("XXXX", "胶囊标题");
capsule.putString("XXXX", "胶囊扩展内容");
// 将胶囊参数设置到通知参数中
liveNotificationData.putBundle("XXXX, capsule);

4.持续优化

目前而言,华为实况窗功能在支付宝端内的的实现方案并非绝对完美,出现的问题主要是包含两个方面:

厂商推送更新能力并非百分之百:目前有数据表明华为在接收三方应用的Push更新的过程中,达到率是92%,也就是说会有8%的数据会丢失在厂商更新用户设备链路的通道上;

用户设备信息存在多业务团队的同时获取:华为实况窗卡片的更新依赖用户设备的PushToken信息,在支付宝端内目前至少存在两个团队需要获取PushToken。但是华为对PushToken的获取频次有限制,有概率会造成某个业务Token信息的获取失败;

4.1 端侧更新

对于第一个问题,厂商推送更新能力存在缺陷时,更新机制需要具有兜底措施,目前在支付宝内部保留了端内更新的能力,该能力与厂商更新有所区别,体现在更新时机以及更新字段协议。

厂商的更新时机主要是在接收到三方应用发起更新接口请求时,端内的的更新时机则是在指定时机内主动请求消息平台数据,对于更新数据采用覆盖更新,即将获取到字段按照协议更新到对应模板参数中。

4.2 PushToken复用

对于第二个问题,是支付宝端内复杂的业务场景导致,毕竟一个团队在需要PushToken时,没办法知晓哪些团队同样需要PushToken,在多个业务同时请求设备PushToken信息时,会存在失败的可能。由于时间节奏比较紧,目前的方案由Push团队收拢,在实时活动未上报PushToken的情况下,获取其他业务上传的PushToken。(在这里需要说明,华为的PushToken信息基本不变,所以区别于iOS灵动岛的Token信息上报)。

在后期的解决方案中,团队打算采用缓存方案,缓存PushToken,做到端内的业务推广,维护一套数据。

5.场景覆盖

整个实况窗的功能已经上线,只不过受限于华为鸿蒙4.0版本正式版本节奏,无法放开线上体验。目前也只接入了医疗场景。我们的业务后续会接入更多的场景。目前医疗场景覆盖的内容包括以下:

通知卡片可以透出:预约医院,预约时间,当前进度等内容。

6.未来可期

目前我们整体功能以及链路流程都是已经存在的,可以支持快速接入业务完成上线。我们支持的能力包括不限于:

  1. 针对音频播放类,传输进度类等业务场景的基础类型模板:

  1. 对于打车,外卖等业务场景的进度可视化模板:

  1. 针对高铁,航班等业务场景的左右文本模板:

  1. 针对体育赛事等业务场景的赛事分数模板(尤其是支付宝接入了NBA赛事,这个可以有):

了解更多详情>>

访问华为推送服务联盟官网

获取华为推送服务开发指导文档

访问HMS Core 联盟官网

获取HMS Core 开发指导文档

关注我们,第一时间了解 HMS Core 最新技术资讯~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/142205.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一文教你学会ArcGIS Pro地图设计与制图系列全流程(2)

ArcGIS Pro做的成果图及系列文章目录: 系列文章全集: 《一文教你学会ArcGIS Pro地图设计与制图系列全流程(1)》《一文教你学会ArcGIS Pro地图设计与制图系列全流程(2)》《一文教你学会ArcGIS Pro地图设计与…

jupyterlab开发环境最佳构建方式

文章目录 背景jupyterlab环境构建运行虚拟环境构建以及kernel映射验证总结 背景 从jupyter notebook切换到了jupyter lab. 这里记录一下本地环境的最佳构建方式. jupyter lab 安装在jupyterlab-local的anaconda 虚拟环境中.建立多个其他虚拟环境安装各种python包实现环境隔离,…

【实战详解】如何快速搭建接口自动化测试框架?Python + Requests

摘要: 本文主要介绍如何使用Python语言和Requests库进行接口自动化测试,并提供详细的代码示例和操作步骤。希望能对读者有所启发和帮助。 前言 随着移动互联网的快速发展,越来越多的应用程序采用Web API(也称为RESTful API&…

python 探索分形世界|曼德布洛特|np.frompyfunc()

文章目录 分形的重要特征曼德布洛特集合曼德布洛特集合有一个以证明的结论:图像展示np.ogrid[]np.frompyfunc()集合转图像 julia集合 无边的奇迹源自简单规则的无限重复 ---- 分形之父Benoit B.Mandelbrot 分形的重要特征 自相似性无标度性非线性 曼德布洛特集合…

8+单基因+细胞凋亡+WGCNA+单细胞+实验验证

今天给同学们分享一篇单基因细胞凋亡WGCNA实验验证的生信文章“RASGRP2 is a potential immune-related biomarker and regulates mitochondrial-dependent apoptosis in lung adenocarcinoma”,这篇文章于2023年2月3日发表在Front Immunol期刊上,影响因…

订阅《复现SCI文章系列教程》

写在前面 《小杜生信笔记》准备开启新的订阅专栏**《复现期刊文章系列教程》,本专栏小杜会寻找一些自己感兴趣的文章进行复现(不说百分之百的复现,但是也会百分之八十进行复现)。本期刊的教程代码会全部进行公开(通过订…

孙哥Spring源码第26集

第26集、AnnotationAwareAspectJAutoProxyCreator源码 【视频来源于:B站up主孙帅suns Spring源码视频】【微信号:suns45】 26.1、postProcessAfterInitialization分析 26.2、wrapIfNecessary分析 26.3、createProxy分析 26.4、getProxy 26.5、BeanPost…

Deep Span Representations for Named Entity Recognition

原文链接: https://aclanthology.org/2023.findings-acl.672.pdf ACL 2023 介绍 问题 作者认为,一个好的span表征对于NER任务是非常重要的,而之前的工作都是将第一个或最后一个的表征简单的进行组合后,没有进行充分的交互就送入到…

linux 查看CPU架构是AMD还是ARM

要查看 Linux 系统的 CPU 架构是 AMD 还是 ARM,可以使用以下命令: 使用 lscpu 命令并查找 Architecture 字段: lscpu | grep Architecture如果输出结果中包含 x86_64 或 i686,则表示系统的 CPU 架构是 AMD(或者是 x86…

android去掉 原生锁屏

1. /frameworks/base/core/java/com/android/internal/widget/LockPatternUtils.java 直接 return true 2./packages/apps/Settings/src/com/android/settings/password/ScreenLockType.java 都改成 none 类型

软件定义网络-OpenvSwitch

软件定义网络(SDN)。它主要有以下三个特点: 控制与转发分离:转发平面就是一个个虚拟或者物理的网络设备,就像小区里面的一条条路。控制平面就是统一的控制中心,就像小区物业的监控室。它们原来是一起的&…

xxl-job分布式调度框架

课程目标 1、 掌握xxl-job部署以及开发的方式 2、 掌握xxl-job特性以及架构设计 3、 掌握xxl-job运行原理 内容定位 适合已经掌握了Quartz的同学 quartz这节课是本节课的基础,这个要求大家一定掌握,因为xxl-job早期就是使用quartz改造的&#xff0…

基于微信小程序的高校就业招聘系统设计与实现(源码+lw+部署文档+讲解等)

前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 👇🏻…

【OLSR路由协议】链路状态路由(OLSR)协议中选择多点中继节点算法研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

Simulink 封装

快捷键: Edit Mask:CtrlM Look Under Mask:CtrlU 封装之后的模型: Edit Mask界面: 双击模块后的提示界面: 封装的模块内部:

软件测试-测试用例

软件测试-测试用例 1.什么是测试用例 为了实施测试而向被测系统提供的一组集合。这组集合包括测试环境、操作步骤、测试数据、预期结果等要素。 举例:对一个垃圾桶设计测试用例 2.设计测试用例的万能公式 设计测试用例的万能公式:功能测试性能测试界…

国产手机芯片4G方案_紫光展锐安卓核心板虎贲4G智能模块方案定制

元器件清单即BOM物料清单,不同行业领域的BOM表侧重点不一样。安卓主板的BOM表则侧重点在于元器件物料的清单,也就是安卓电路板的PCBA清单,精密的安卓板有上千个物料,可以帮助我们估算物料成本,建立生产计划&#xff0c…

单日 5000 亿行 / 900G 数据接入,TDengine 3.0 在中国地震台网中心的大型应用

小T导读:为满足地震预警数据存储、检索和处理的建设与集成需求,以及响应国家国产软件自主可控的号召,中国地震台网中心决定选用国产数据库 TDengine 来存储和处理地震波形数据。本文将针对 TDengine 3.0 在地震领域的应用展开详细讲解。 关于…

Tensorflow Federated Framework 谷歌联邦学习框架

目录 Tensorflow Federated Framework 谷歌联邦学习框架 1、TensorFlow Federated Framework 数据为主 整体训练 新的语言 Federated Learning (FL) API 安装TFF库(conda) 2、数据类型 3、完整代码 Tensorflow Federated Framework 谷歌联邦学习…

系统架构设计师(第二版)学习笔记----软件工程

【原文链接】系统架构设计师(第二版)学习笔记----软件工程 文章目录 一、软件工程1.1 软件危机的表现1.2 软件工程的内容 二、软件过程模型2.1 软件的声明周期2.2 瀑布模型2.3 瀑布模型的缺点2.4 原型模型2.5 原型模型开发阶段2.6 开发原型的途径2.7 螺旋…