前言

苹果在iOS 16版本系统中增加了实时活动功能,用户可在锁定屏幕实时查看通知。实时活动帮助用户跟踪他们关心的任务和事件,在固定的位置持续地更新信息。例如送餐/跑腿APP可以显示剩余的抵达时间,或者体育 APP 会显示正在进行中的比赛的得分。UU跑腿IOS客户端较早地完成了实时活动与iPhone 14 Pro/Pro Max灵动岛功能的适配,并获得了不错的成果。那么,如何在Android平台下,实现近似“实时活动”的效果呢?

竞品研究

苹果的灵动岛和实时活动发布后,各外卖平台美团、饿了么、盒马、肯德基、麦当劳都不约而同的上架了适配实时活动的版本,包括一些打车软件(如高德)也在锁屏界面利用实时活动展示了打车行程的动态信息;但是很可惜,这些平台的实时活动功能仅在苹果手机上可见,Android上架的版本中均未看到此类功能,所以研究竞品的实现这条路走不通。

技术调研

本着“人无我有,人有我精”的理念,既然从竞品处没有看到应用方案,那就从纯技术的角度触发,要实现类似锁屏界面显示订单实时信息,有哪些可行方案。

一:ColorOS 智慧息屏

ColorOS是OPPO公司基于Android深度定制适配OPPO手机的专属系统,其中ColorOS 13支持了新的“智慧息屏”功能,支持息屏实时查看外卖进度,切换音乐等,如下图所示:

但是这个东西有很多弊端:

  1. 适配性差:只支持oppo手机的ColorOS 13版本,用户量少;
  2. 灵活性不足:不支持自定义设计,只能通过厂商api传递文本消息;
  3. 无法跨端:如相同账号切换设备的场景;

当然最重要的一点,就是不能支持其它设备,单这一条就没法推进使用;

二:自定义锁屏界面

实现锁屏的方式有多种(锁屏应用、悬浮窗、普通Activity伪造锁屏等等),国内比较主流并且被广泛应用的是Activity伪造锁屏方式。

Activity实现自定义锁屏页的思路也很简单,即在需要时(新订单),启动一个service,在service中监听系统SCREEN_OFF的广播。当屏幕熄灭时service监听到广播,开启一个锁屏页Activity在屏幕最上层显示,该Activity创建的同时会去掉系统的锁屏,示意图如下:

滴滴打车使用自定义锁屏界面显示订单行程信息,是一个很成功的案例:

在滴滴打到车后的订单信息界面,辅助功能及相关信息基本是很全面的,例如:报警、取消订单、打电话、发消息、司机状态等。而简化版的接驾锁屏建立在用户锁屏后的动作展示,意味着用户在等待过程中暂时没有其他的使用需求,在这样的一个使用场景下,滴滴提炼出重要的接驾信息成为锁屏界面,可以避免其他信息在视觉上对用户产生的干扰,让用户更清晰的了解当前的一个打车状态,十分人性化,如下图所示:

但是这个东西也有些许弊端:

  1. 权限限制:需要用户授权锁屏显示和解锁权限,很多用户是不愿意给的;
  2. 功能过重:基本将详情页展示的信息全做一遍,只是去掉了交互操作部分,作为锁屏展示的小功能来说有些太重;
  3. 机型适配:自定义锁屏伪造全界面,顶部的时间和底部解锁需要自行实现,不同设备最后适配各自系统交互样式,这样用户才会觉得他看到的是系统锁屏界面;
  4. APP抢占:很多音乐软件、听书软件等都有类似功能,但是锁屏界面层级最高的只能展示一个,可能会出现多APP抢占的问题;

三:自定义通知

我们在自己手机上一定见过这样的界面,类似今日头条、短信、钉钉,在手机锁屏下依然可以显示消息,甚至可以点击展开来查看更多信息,或者快捷操作,这就是锁屏通知

锁屏-钉钉
锁屏-今日头条
通知展开

那么我们是否可以在用户下单后,订单状态变化时,通过这种消息及时地告知用户订单变化呢,我们的消息通知是否可以带上丰富的图片、文字颜色变化呢?

答案是肯定的

虽然市面上包括城市服务类产品没有看到在安卓平台上给用户展示订单的实时信息变化,但是滴滴打车的客户端在行程中,可以在锁屏界面看到一个简单的行程提示信息。安卓可以利用高级别通知的功能,在通知栏、在桌面顶部横幅区、在锁屏界面上,由消息通知的形式触达给用户,并在锁屏或者桌面时看到。而且,不同于苹果的灵动岛只有ipone14以上可以体验,此功能几乎可以兼容市面上绝大多数厂商的设备和系统(Android 8.0以上,活跃用户占比99.57%)。

滴滴计费通知

实施方案

根据前面技术调研,发现通过自定义通知的方式来实时显示订单信息,是最适合不过了。

考虑到服务端计算距离和时间调用路径规划额度限制,Android这次采用了和苹果实时活动不同的技术方案:前端轮询拉取+后端极光推送相结合的方案。即轮询拉取订单信息、推送触发更新,客户端计算时间和距离;

通知消息流转(客户端拉取->服务端生成模板->客户端渲染),前端订单通知服务流程图如下:

结合原来的订单状态push通知更新和实时订单通知服务定时刷新:

  • 可实时获取订单配送状态和跑男位置,减少用户焦虑
  • 通知中内容模板由服务端定制,可以灵活变化
  • 距离计算和进度计算由客户端自行通过sdk调用完成,不占用web服务的地图api调用额度
  • 原有的后台订单push服务不需要一丁点变化,完美兼容原有的订单通知

客户端主动拉取订单消息的流程如下:

相较于全部由服务端计算完成再推送,预计可以节省地图路线规调用划 12万次/日,预计节省极光推送调用 14万次/日

成果展示

一、项目成果展示

一些订单状态展示效果如下

底部可交互按钮样式会根据手机系统System UI自适应

整体支持暗黑模式

二、安卓订单实时通知优化的实验报告

经过两周时间随机分流34,730名用户平均分配实验组和对照组,统计数据如下:

实验组:其中50%用户分流到实验组开通订单信息实时通知功能;

对照组:其中50%用户分流到对照组,执行原来的订单push信息通道;

1. 安卓订单通知触达次数统计对照

订单实时通知对比对照组提升30.580%

通知触达得到提升的原因:增加了待支付、待接单场景通知,本地服务通知相比于极光推送触达更及时,触达率更高;

2. 安卓订单通知互动次数统计对照

订单实时通知对比对照组提升409.788%

点击交互次数提升的原因:实时订单通知展示信息更丰富,用户关注度更高;交互次数中刷新按钮点击占比约为40.03%,表明用户更关注订单的实时信息。

3. 安卓订单通知互动/展现率统计对照

订单实时通知对比对照组提升290.403%

相较于交互总次数的对比,互动次数/展现次数的互动展现率更能直观地体现出实时订单通知比原有的push通知更吸引用户,更能引起用户的关注。

三、应用

目前已经覆盖全国所有开通城市,订单实时通知的触达次数正在呈指数型增长,在新版的4.x.x中有针对订单实时通知服务的唤醒进一步优化,预计在未来一个月内实时订单通知的展现最高可达到20W次/日;后续也会根据用户和产品的反馈将展示区域进一步优化,提供更加快捷、智能的信息服务。

4.x.x 安卓订单实时通知触达和交互数据总览:5.22-6.7

思维拓展

减少短信费用:

这样的通知消息对用户的触达非常及时,是否可以代替部分(已开通通知权限)用户的短信发送(比如推送20秒钟内有消息触达回执,不再需要短信发送),即可缩减部分短信费用,又可引导关注公众号等操作;还有一些类似于跑男接单红包、对跑男师傅的定向代驾招募消息、跑男师傅接单形象抽检提醒等,既可以减少短信发送,又可以有按钮作为直接进入活动页面的快捷入口。

横幅通知-验证码
横幅通知-确认码
通知消息-验证码
通知消息-确认码

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注