共计 4685 个字符,预计需要花费 12 分钟才能阅读完成。
本文转载自支付宝体验科技,作者是蚂蚁团体客户端工程师博欢,介绍了支付宝如何基于 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. 将来可期
目前咱们整体性能以及链路流程都是曾经存在的,能够反对疾速接入业务实现上线。咱们反对的能力包含不限于:
- 针对音频播放类,传输进度类等业务场景的根底类型模板:
- 对于打车,外卖等业务场景的进度可视化模板:
- 针对高铁,航班等业务场景的左右文本模板:
- 针对体育赛事等业务场景的赛事分数模板(尤其是支付宝接入了 NBA 赛事,这个能够有):
理解更多详情 >>
拜访华为推送服务联盟官网
获取华为推送服务开发领导文档
拜访 HMS Core 联盟官网
获取 HMS Core 开发领导文档
关注咱们,第一工夫理解 HMS Core 最新技术资讯~