支付宝通知新体验-OPPO 泛在卡片多模交互

简介: 支付宝通知新体验-OPPO 泛在卡片多模交互

本文来源:支付宝体验科技


  1 话题背景


OPPO 在 2022 年发布了智慧跨端系统"潘塔纳尔",系统的定义为“面向万物互融,以人为中心的智慧跨端系统”。支付宝作为第一批合作企业,同时参与编写了 OPPO 潘塔纳尔白皮书 1.0。


泛在服务是潘塔纳尔系统中负责情景感知,服务流转功能,可以理解为直接面向用户展示的一环。泛在卡片是泛在服务的表现形式之一,用官方的解释是:“泛在服务卡片是泛在服务的一种特殊服务形态。具有一次开发,多端适配,支持多设备,多入口流转的特征。通过系统感知和智慧决策,卡片服务能够被精准、实时的分发;卡片内容能够被呈现在桌面等多个入口,提供更加直达的服务呈现。”先看一下整体官方效果图:

在视觉感官上,整个泛在卡片像系统通知的扩展,有更多的入口,有更丰富的表现形式。也有点像通知与桌面小组件的混合,但是与小组件等开发方式不同,泛在卡片具有以下特征:

  • 易开发:采用类 web 前端开发方式,一次开发,多入口自适应;
  • 跨平台:采用跨平台引擎技术,具备自渲染能力;
  • 高性能:基于 web css 子集开发样式,具有更丰富的动效;

在 OPPO 潘塔纳尔系统原设定的实现卡片链路有两种:有宿主和无宿主。有宿主和无宿主的实现和区别会在实现链路章节有详细介绍。支付宝作为 OPPO 厂商三方合作应用,在实现链路上走了一条厂商新建的“独特”链路,属于是厂商合作的新案例。


  2 上机效果


看完了官方效果,回到支付宝看一看真实的上机效果。卡片会在多个入口有所展示,支付宝目前一期已接入了打车,外卖和自提场景,二期有计划接入生活,缴费,信用卡等场景。

  • 桌面主卡
  • 位置位于桌面首页中的小布建议核心展区。当收到 OPPO 泛在服务推送卡片的通知后,由系统智慧大脑决策展现卡片大小,有12,22,2*4三种卡片展现大小,如下图所示(以打车场景为例):

  • 多入口流转
  • 多入口是包括通知栏,状态栏,锁屏,息屏(AOD)入口进行展示。多入口对于三方应用可配置,即三方应用可以控制展示放在哪些入口;

以上主要是支付宝打车场景下各个入口下卡片的展示形态。除了打车场景,支付宝一期还接入了外卖和自提场景,以及深色模式下效果如下图所示:


  3 实现链路


3.1 泛在卡片种类


OPPO 的泛在卡片独立于三方应用 App,由类 Web 前端语言开发。卡片开发完成后,将每个业务场景下的前端卡片代码打包成一个卡片包,也称 UPK 包。UPK区别于三方应用app独立审核,独立上架。OPPO 泛在卡片有两种实现方案:有宿主卡片和无宿主卡片;

  • 有宿主卡片
  • 指的是 UPK 包中,只包含卡片 UI 相关代码,卡片数据由宿主 App 提供。以此方式接入,要求有宿主 App 安装在 OPPO 手机上,在卡片运行时,宿主 APP 保活且与 UPK 卡片通信提供数据,通信方式是通过泛在接入 SDK 。数据交互示意图如下:

  • 无宿主卡片
  • 指的是 UPK 包中,不但包含卡片 UI 代码,也包含卡片数据的逻辑代码。泛在卡片使用 JS 来实现卡片触发,更新逻辑,为卡片提供数据。此方式不依赖宿主 App,数据交互示意图如下:

宿主方式和无宿主的方式对比区别如下:

接入方式 UI 开发 数据开发 UPK 交付方式
有宿主 模板&样式&数据定义 引入 SDK,在宿主 App 实现,提供卡片数据 宿主 App 的 assets 目录
无宿主 模板&样式&数据定义 使用 JS 实现,卡片运行时,通过网络获取数据 OPPO 服务仓库


3.2 对接实现方案


区别厂商提供的方案,支付宝在已经接入苹果,华为厂商的背景下,OPPO 厂商方案与支付宝内实现方案存在巨大 gap。支付宝依赖端内触发卡片,云端链路更新卡片,OPPO 厂商仅支持二选一。在经过了多轮技术方案讨论,最终采用有宿主和无宿主折中方案,即通过支付宝端内接入泛在 SDK 触发卡片,后续卡片的更新由支付宝云端推送厂商云端数据更新。整体的实现链路甬道图如下所示:

image.png

主要实现链路包括以下:

  • 支付宝客户端接受服务端订单消息;
  • 支付宝客户端通过泛在接入 SDK 感知对应业务场景泛在服务开关,例如打车场景下 OPPO 出行泛在服务开关是否打开;
  • 支付宝客户端根据商定协议,通过泛在接入 SDK 发送订单数据,由系统指挥决策后展示出卡;
  • 订单节点更新数据由支付宝服务端流转,推送至厂商云端;
  • 厂商云端在接收到推送来的更新数据,由唯一 ID 标识用户,推送并刷新用户手机桌面卡片数据;

整体的实现链路,不仅做到了触发可控,由支付宝端侧控制;而且更新不需要支付宝客户端活跃,用户不必频繁打开支付宝保证后台活跃。


  4 代码实现


泛在卡片在支付宝 App 端侧主要包含两部分,一部分是前端卡片即 UPK 包中包含的代码,主要是进行 UI 展示以及数据更新;另一部分是通过泛在接入 SDK 然后感知服务开关,发送数据到系统触发卡片。


4.1 前端卡片


OPPO 前端页面提供的文件格式为 oml,oml 代码中包含<template>, <style>, <data>标签,分别为模板、样式、事件和数据定义。

image.png

UPK卡包中包含无宿主类型中seedling.js文件,该文件作为全局数据提供者,接收数据更新卡片。seedling.js文件包含的主要代码是在不同的生命周期下控制卡片的数据展示,如下图所示:

image.png

4.2 SDK接入

支付宝端侧内部的泛在接入SDK的作用的主要有两个:1.感知业务场景对应的泛在服务开关状态;2.向泛在服务发送卡片数据,触发卡片展示;伪代码如下图所示:

image.png


  5 方案特点

支付宝线上已经支持友商类似功能,如 iOS 的灵动岛,华为的实况通知。作为国内的四大厂商,华为和 OPPO 在整体的实现链路上是存在差异性,这里将 OPPO 的实现方案的特点罗列出来,如下图所示;

image.png

OPPO 的泛在卡片在实现上更多元化,采用前端+客户端的方式。卡片可以通过支付宝端侧触发,也可以通过支付宝云侧直接推送卡片到用户手机端。卡片对于三方应用是白盒,可感知生命周期。


  6 优化思考

在连续接入华为和 OPPO 两个厂商之后,在整体的功能架构上,出现了一些新思考,包括:除了支付宝自用,是否可以提供给支付宝内的三方小程序使用?功能是否可以供用户查询,让用户主动知晓支付宝有此项功能?如何降低接入成本?以此总结为模块的架构优化。

6.1 模块优化

模块优化的目的有两个,一个是为了支付宝内三方应用小程序可以快速接入厂商新特性,二是为了其他厂商类似功能在支付宝内的快速接入。

image.png

在实现上划分为四个模块:

  • 功能注册:是整个功能的入口,无论是其他三方小程序还是支付宝自己的业务使用都由此入口注册,注册后,需要绑定数据回调接口;
  • 路由:路由的作用主要是不需要上层业务感知是哪个厂商,直接定向用户当前的手机厂商所对应的功能。例如针对打车业务,某打车三方小程序接入支付宝厂商新特性后,用户下单后,OPPO 手机的用户会触发泛在卡片,而华为手机用户会触发实况通知;
  • 数据分发:数据分发主要是将功能注册绑定的数据接口传入的数据解析,将解析后的数据发送至对应厂商的卡片触发接口;
  • UI 渲染:UI 渲染是底层厂商能力,对接每个厂商提供的新特性;

另外考虑提供功能查询入口,功能查询考虑将路由模块再封装一层,路由模块可以作为中间层。整体的对外表现形式可以是一个小程序,也可以是面向开发的 JSAPI。通过对外表现形式,查询路由可以得到当前手机所支持的厂商特性,用户或开发者可以根据当前的厂商特性进行选择是否打开以及关闭。


  7 致谢

整个支付宝与 OPPO 泛在卡片的实现周期为 2 个月,目前在支付宝的 10.5.36 版本已上线,目前正在灰度中。整个开发周期内坎坷不断,连 OPPO 厂商合作同学都不得不感慨:“这是我们实现过的最复杂的通知链路”,里面有太多大家付诸的时间和心血,正所谓“关关难过关关过”,感谢所有参与到其中的同学们的付出。


谨此感谢:我们美丽的产品小姐姐一芽,事事回应的商务东来,消息服务端逸洲,Push 服务端卓农,以及客户端的唯敬和博欢。同时对厂商所有对接同学表示感谢!

相关文章
|
移动开发 搜索推荐 API
DingTalk「开发者说」钉钉工作台-业务数字化转型第一门户
钉钉把工作台定义为业务数字化转型门户,从钉钉目前工作台的业务体量、用户量及评价来讲,都应该承担企业数字化转型的重要责。
1993 0
DingTalk「开发者说」钉钉工作台-业务数字化转型第一门户
|
Android开发 芯片 开发者
adb 查看安卓手机 CPU 类型(armeabi、armeabi-v7a、arm64-v8a ...)
adb 查看安卓手机 CPU 类型(armeabi、armeabi-v7a、arm64-v8a ...)
5086 0
|
缓存 监控 NoSQL
redis 缓存穿透 击穿 雪崩 的原因及解决方法
redis 缓存穿透 击穿 雪崩 的原因及解决方法
|
机器学习/深度学习 人工智能 自然语言处理
AI技术深度解析:从基础到应用的全面介绍
人工智能(AI)技术的迅猛发展,正在深刻改变着我们的生活和工作方式。从自然语言处理(NLP)到机器学习,从神经网络到大型语言模型(LLM),AI技术的每一次进步都带来了前所未有的机遇和挑战。本文将从背景、历史、业务场景、Python代码示例、流程图以及如何上手等多个方面,对AI技术中的关键组件进行深度解析,为读者呈现一个全面而深入的AI技术世界。
1995 10
|
Java 数据库连接 数据库
Spring 与【MyBatis 】和【 pageHelper分页插件 】整合
Spring 与【MyBatis 】和【 pageHelper分页插件 】整合
469 0
|
机器学习/深度学习 人工智能 安全
魔搭社区模型速递(3.9-3.15)
魔搭ModelScope本期社区进展:1066个模型,153个数据集,125个创新应用,13篇内容
387 1
|
Ubuntu 安全 Docker
【DevOps】Docker 最佳实践指南(绝对干货)
祝您的 Docker 之旅一切顺利!
673 4
|
敏捷开发 存储 数据可视化
产品经理的效率秘籍:科学梳理产品需求
产品梳理旨在解决信息混乱、需求不清等问题,使产品架构清晰、目标明确、执行高效。通过厘清产品定位、优化需求管理、提高执行效率和加强团队协作,企业可以减少沟通成本,提升整体效率。关键步骤包括确定产品架构、规范需求管理和建立任务管理机制。借助工具如板栗看板,可实现需求可视化、高效任务拆解及顺畅的团队协作,确保产品梳理顺利落地。定期复盘和优化,引导团队使用协同工具,并加强跨部门协同,是成功的关键。
|
机器学习/深度学习 缓存 算法
深度学习之代码优化
基于深度学习的代码优化是一种使用深度学习技术来提升编程代码性能、减少运行时间或资源消耗的方式。通过模型学习大量代码的特征和结构,深度学习可以帮助自动化地识别和应用优化策略。
369 4
|
数据处理
正则表达式详解:解析星号的含义
【4月更文挑战第3天】
2613 1
正则表达式详解:解析星号的含义