背景

盒马跟苹果合作,在配送&餐饮场景率先适配支持iOS实时活动&灵动岛,登上Apple中国区官网和App Store Today推荐。不仅获得巨大品牌宣传声量和社区传播,同时也把盒马优质服务透传给消费者,赢得大家认可。具体技术方案参见社区前述文章《盒马iOS Live Activities&灵动岛 配送场景实践》
今年发布的鸿蒙4.0系统,推出的实况窗功能跟苹果灵动岛颇为相似,在盒马的配送&餐饮场景也非常合适;同时以盒马用户分布来看,盒马Android用户中华为手机占比很高,鸿蒙受众体量庞大,因此我们与华为的产品和研发团队进行沟通对接,讨论在盒马的探索落地。

落地场景

跟美团、航旅纵横一起,盒马是第一批支持HarmonyOS 4实况窗功能的三方应用,整个探索落地节奏和时间还是比较紧张的。7月基于华为beta版实况通知API进行联调开发,8月初赶在华为开发者大会前上线,同时进行多轮体验细节优化,8月底华为正式对外开放实况服务。

盒马App版本5.73.0刚上线一周,订单配送和门店取餐实况通知数据表现非常亮眼,通知点击率相比普通push消息高达数十倍,随着App版本升级和鸿蒙4.0系统用户覆盖率上升,实况通知业务数据应该还会有很大增长空间。也欢迎各位技术发烧友们,下载更新盒马App至5.73.0及以上版本,抢先体验华为实况窗功能。

订单配送

用户在盒马App购买即时配送商品,想知道订单配送状态,之前需要频繁打开盒马App进入订单详情查看;通过配送服务接入实况通知,桌面锁屏和胶囊屏订单状态实时感知更便捷。

订单状态

履约状态(前端)

推送域

实况通知文案(变量信息高亮展示)

已付款

待发货

交易

标题:支付成功

内容:订单将于指定时间内配送,请关注

待发货

商品准备中

(开始拣货)

履约

标题:商品准备中

内容:小二正在全力作业,包裹即将出发

配送中

配送中

履约

标题:骑手配送中

【正常】据您2.8公里,预计30分钟送达

【雨】距您300米,骑手正风雨兼程赶来

【雪】距您300米,下雪中,骑手正赶来

【恶劣天气兜底】距您300米,天气恶劣,骑手正赶来

交易完成

配送完成

交易

标题:配送完成

内容:您的订单已成功送达

实况胶囊效果

门店取餐

盒马鲜生门店海鲜岛堂食点餐时,用户付款取号后,之前经常要去服务台问餐品进度,取餐时要给顾客发短信或者打电话,遇到人多或者顾客过号经常会有客诉。通过餐饮服务接入实况通知,锁屏桌面出餐状态更新,菜品制作进度尽在掌握。

订单状态

菜品进度

推送域

实况通知文案

已付款

已点餐

(无取餐码)

交易

标题:Z准备中

内容:点餐成功,请关注实时动态。

配送中

待分料

餐饮

标题:Z准备中

内容:前方N单制作中,预计X分钟出餐

分料完成/加工中

餐饮

标题:Z待加工

内容:已备货完成,即将入锅。

烹饪中

餐饮

标题:Z加工中

内容:厨师正在为您精心烹饪

已出餐

(自动展开)

餐饮

标题:Z已出餐

交易完成

已取餐

餐饮

标题:Z已取餐

交易关闭

已关闭

餐饮

标题:订单关闭

内容:抱歉给您带来不便,感谢支持与理解

技术方案

技术流程

实况通知通用流程

核心流程大致以下三步:

  1. 要先集成Push Android SDK,获取推送服务PushToken。

  2. 构建本地实况通知,并将本地实况通知的需要刷新的数据信息和Token上报到应用服务端。

  3. 应用服务端向Push服务端发送实况通知刷新请求,更新实况通知内容。

盒马业务流程

盒马的业务特点是线下门店+线上App融合的新零售创新业态,在盒马App里面要实现一个实况通知推送,涉及到很多跨团队合作。详细业务流程如上图所示,以生鲜配送为例,各角色核心职责为:

  1. H5前端:判断手机系统是否支持实况,并查询订单信息,与Native端通信创建实况通知卡片。

  2. Native端:集成华为PushSDK,封装实况通知创建、更新、关闭功能。并将订单ID,手机设备PushToken 和通知ID上报至消息服务端。

  3. 消息服务端:作为基础消息中间层,一方面与Native交互,记录订单实况卡片映射关系;一方面与业务服务端交互,接收订单和履约状态的变化,并按照华为消息云端协议封装数据,控制实况卡片更新和关闭。

  4. 交易服务端:下单时创建订单并返回订单信息,通知创建实况通知卡片【已付款】;配送完成后通知到消息服务端,更新实况通知卡片【交易完成】。

  5. 履约服务端:订单下发到仓库后,整个商品的作业状态和配送状态的变化,通知到消息服务端,更新实况通知卡片【商品打包中】【配送中】

技术要点

PushToken获取与更新

盒马App跟集团淘系其他App一样,消息服务接入集团统一Agoo推送平台。端侧AccsSDK封装了华为Push SDK的初始化和服务注册能力,对外并不暴露获取华为PushToken的接口。我们采取了一些hack办法复写AccsSDK部分代码逻辑,在初始化时 调用getToken方法获取PushToken;在消息接收服务中调用onNewToken方法刷新PushToken。并且把它做成全局通用方法,避免不同场景对PushToken过度获取与更新,导致华为推送服务的不稳定。

实况通知创建时机

为了用户体验,实况通知的创建时机选择很重要,对于即时配送订单,最佳时机是下单支付;对于门店海鲜区点餐,最佳时机是门店扫码付款。两者最终路径都是支付成功页,但是盒马支付成功页是前端H5页面,因此需要Native提供JSBridge到H5,判断当前手机系统是否支持创建鸿蒙实况通知,以及真正的创建实况通知。

支付成功接口返回实况通知数据示例:

"liveActivityDTOs": [      {        "content": {          "itemPic": "//img.alicdn.com/bao/uploaded/i3/3991285532/O1CN011qjhdMs6GYWlIaI_!!3991285532.gif",          "title": "支付成功",          "content": "订单将于指定时间内配送"        },        "id": "3447600912033344233",        "scenario": "fulfill_delivery_track"      }    ]

实况通知ID生成逻辑

Android 应用可以调用 NotificationManager notify 接口创建实况通知,开发者可以指定id和Notification对象。Id即为实况通知activityId,由开发者生成,在设备内要保持唯一,以免影响到实况通知的正确更新。

在盒马实际场景,我们可以使用订单号来创建activityId,实际情况下配送订单和点餐订单两种场景生成activityId的逻辑是不一样的。具体为:

  1. 配送订单通常是只生成一个主单,当然对于不同业态合并下单场景会拆分多个主单,我们从中过滤出生鲜即时配送订单,只针对此类型订单创建实况通知,activityId采用主单号生成。

  2. 餐饮订单通常是生成一个主单多个子单,因为顾客会点多个菜品,它们的处理加工烹饪方式不一样,餐饮订单创建实况通知,activityId采用每道菜的子单号生成更为合理。

辅助区内容更新

盒马不同用户购买的商品往往不一样,辅助区的商品图片需要根据用户订单商品个性化展示。但是华为官方技术和设计文档对辅助区做了限制:44*44vp,支持展示:图片、胶囊带文字、icon & logo、纯文本”。这意味着不支持网络图片的渲染,我们采取做法是 对服务端返回的商品图片链接进行处理,其中对于普通商品图,通过Phenix图片库直接下载到本地,转成Bitmap;对于Gif动图,通过网络库下载获取Gif图片第一帧,再转成Bitmap;最后调用华为原生API更新到辅助区。

体验细节优化

配送订单限制

  1. 触发对象,必须满足下述所有条件的订单:

    • O2O-鲜生业态订单(不包含云超、会员店、NB)

    • 订单类型为普通订单(不包含预售、团餐订单)

    • 含配送信息,且履约结束时间-支付时间≤8h

  2. 异常CASE

    • 若订单的实际履约时间超过2h,或触发逆向流程导致交易/履约单中断,需要关闭提醒。

    • 手机内存不足时,支付成功页回收后自动恢复,或导致同一笔订单创建2个实况通知,需要过滤掉。

    • 深圳政府限塑令,要求生鲜订单收取0.01元包装费,下单后会自动拆成两单。交易返回数据时过滤掉此类型订单,避免创建无效通知。

胶囊形态适配

  • 配置文案支持滚动

  • 底色采用盒马蓝

  • 字数限制,以3个字符最佳

样例

场景

映射关系

示例

配送

配置文案:取‘标题信息’

骑手配送中

餐饮

配置文案:取‘标题信息’

500g小青龙已出餐

小折叠屏手机外屏适配

样例

场景

映射关系

补充说明

配送

图标→盒马LOGO

主文本→标题

副文本→部分内容

状态&部分内容取值:

  1. 支付成功:请实时关注

  2. 商品准备中:您的包裹即将出发

  3. 骑手配送中:距您300米

  4. 配送完成:您的订单已成功送达

餐饮

图标→盒马LOGO

主文本→标题

副文本→取餐码


未来展望

进一步到体验细节

  • 在实际配送场景,因为天气变化等不可抗因素,配送经常延迟。如果在通知上表达天气,可以更好体现盒马的服务温度,降低用户负面情绪。实况通知当前并不支持背景设置和个性化,与华为沟通后待支持。

  • 在实际配送场景,盒马有一定比例用户选择预约配送,目前华为侧不支持预约场景(非即时发生的持续性服务,如未来的航班、未来的配送等)指定时间创建实况通知。与华为沟通后待支持。

  • 在实际餐饮场景,有顾客反馈取餐码更新不及时,取餐服务刷新机制优化;取餐提醒通知不一致,按照实时消息>PUSH>短信>外呼(仅判定存在项)的顺序,进行优先级触发。

更多场景拓展

  • 后续会基于盒马“多业态、平台化、商业化”的大方向,做更多的尝试;包含不限于:茅台抢购、尝新试吃开奖、菜谱跟做提醒、平台商家OMS系统接入、生活服务场景探索、用户生命周期&高潜会员的重要触达手段。

  • 更多终端设备的联动,比如将盒马App配送实况通知流转到华为手表、汽车显示屏,让服务触点更加多元化。



继续阅读
阅读原文