闲鱼唤端的背后

简介: 唤醒沉睡的你

作者:闲鱼技术——胖仔

背景

众所周知,想要DAU稳步上升,端外引流是一个必不可少的手段,常见的引流方式有:广告投放、分享回流、流量互换等,而他们也有着一个共同的技术问题,就是唤端,本文着重分享一下唤端的相关知识以及闲鱼在唤端体系内的一些方案。

唤端概述

何为唤端?简单概括,唤端就是在某些场景下通过一定的手段打开目标APP并且加载出希望展示给用户的内容,下面是几个常见的例子:

闲来无事你在床上逛淘宝,看到一个二手手机非常便宜,当你想要点开商品详情时,手机自动打开了闲鱼APP并且加载了商品详情页,你可以在闲鱼APP内完成后续的浏览和购买行为,此为唤端。

Ding!你手机收到一条短信,提示你金枕榴莲仅需9.9就能带回家,你抱着试一试的心态点开了短信里的链接,此时手机自动打开了某电商APP并且加载出了金黄诱人的榴莲商品信息,此为唤端。

唤端最直接的意义是为了获得更多的用户流量。但显然,获取用户流量的道路上充满着阻碍,比如某些应用为了更好的锁住用户会禁止打开其他App,这个时候就需要引导用户通过其他方式主动打开App,或者用户压根就没有安装App,则需要引导用户完成下载并且在用户下载完后展示给用户希望看到的内容,所以,唤端并不仅仅是唤端,它还包括了下载和还原两大内容,整个唤端版图示意如下:
image.png

唤端方案

最为常见的唤端方案是url scheme唤端和universal links唤端。

Url Scheme

什么是url scheme

url是统一资源定位符,通俗的说就是网址,有时候也会叫链接、地址。scheme是标识资源的访问方式,比如http、ftp、https都属于一种scheme,在手机系统中,可以通过app的特定scheme来实现app的跳转,比如需要打开短信应用并向10086发送一条信息,就可以使用如下链接,前面的sms就是短信应用的标识,而后面的10086表示发送对象是10086,如果在浏览器中访问这个地址,那么系统就会打开短信应用并且向10086发送一条短信,这是一个比较简单的url scheme。
image.png
稍微复杂一点的url scheme可能是长这样的,这个是跳转闲鱼商品详情页的url scheme,它主要由四个部分组成,前面的fleamarket是闲鱼的标识,后面的item是一个具体的action,再后面就是一系列参数的key值和value值,其中scheme部分将被系统识别并完成app打开行为,后面的参数将由app自身完成解析和处理。
image.png

如何触发唤端

url scheme是一个静态协议,那么要怎么调用来触发唤端呢?常见的有几种方式:

  1. 通过window.location.href 直接跳转链接,IOS中大多用该方案

image.png

  1. 通过iframe跳转链接,安卓中大多使用该方案

image.png

  1. 通过特定js bridge打开APP,此处以支付宝为例

image.png

如何判断唤端成功

大部分情况下,我们希望在唤端失败后引导用户前往下载,那我们如何才能知道唤端是否成功呢?对于公司内部二方APP来说,往往可以通过一些客户端提供的桥梁精准得知唤端是否成功,甚至可以预判断是否已经安装APP,但对于一些三方场景,如系统浏览器、微信客户端等,就没办法精准的知道是否唤端成功了,这时候有两种处理方案:

  1. 不管用户是否已安装APP,在尝试唤端的同时展示下载弹窗,可能会误中部分有端用户,但可以保证链路完整性
  2. 监听页面失焦时间,在特定时间内只要用户离开页面,则认为唤端成功,反之则认为唤端失败,此方法存在一定的错误判断,因为大部分APP在跳转其他APP时会有一个二次确认框,确认框的行为我们是无法感知的,可能用户点了取消但会被认为唤端成功,也有可能用户停留时间过长虽然唤端成功了也被认定为唤端失败

image.png

Universal Links

IOS9以上引入了 universal links,相比于scheme 唤端,universal links是一个直达链接,当用户打开 universal links 时,iOS 会检查目标域名是否注册了任何已安装的设备。如果有,对应App 将立即启动,而不会再加载网页。如果无,则将在浏览器中继续加载对应的 Web 页面,这样保证了比较好的用户体验。universal links 需要客户端配合在系统中注册域名,所以此方案的前提是当前版本的客户端已完成域名注册。js代码示意如下:
image.png

下载方案

当直接唤端失败时,我们往往需要引导用户下载来做更多的引流可能,对于不同的手机系统,需要跳转不同的应用市场,IOS相对统一直接跳转App Store即可,大部分APP也不会拦截App Store跳转,安卓市场相对杂多,不同的手机应用市场的地址不同,对于一些非主流机型需要通过直接下载APK包的形式下载APP,流程示意如下:
image.png

还原方案

所见即所得是一项非常重要的技术,如果引导用户打开App后没有做好承接,用户体验会有断层,也很容易造成用户流失,比如用户如果是由端外的9.9包邮商品吸引而来的,就应该自动展示对应商品详情以保证链路完整。在有端直接唤端的场景下,客户端可以直接识别到唤端协议中的参数从而打开对应的承接页,但对于无端场景,场景还原会变得相对困难,闲鱼的还原方案可以归纳为两类

1. 服务端辅助还原

在端外用户跳转下载前,前端主动进行数据上报,在用户下载完打开App后,客户端主动读取相关服务并进行匹配,若存在匹配数据,则打开对应目标页
image.png

2. 本地辅助还原

在端外用户跳转下载前,前端主动进行数据本地存储,在用户下载完打开App后,客户端主动读取本地数据并进行匹配,若存在匹配数据,则打开对应目标页
image.png

唤端数据追踪

数据协议

No Data, No BB!唤端层面我们最关心的数据就是唤端成功率,这个指标可以很好的衡量一个业务的引流价值,想要精准的计算唤端成功率,必然需要统计页面的唤端量和到端量,为了更加精准的识别每一个到端用户的来源,我们设计唤端数据协议如下:

xianyu_growth_channel.spmstr-source-materialId-type.extend
  • xianyu_growth_:固定值,用于标识为闲鱼用户增长域带来的唤端数据
  • channel: 唤端渠道信息,如在淘宝内的唤端可以标识为tb
  • spmstr:spm信息,集团内一种页面的唯一标识符
  • source:自定义来源,如抖音广告卡片可以标识为douyin_card
  • materialId:素材ID,如点击购买按钮的唤端可以为buy_button,点击查看更多的唤端可以为more_click
  • type:唤端类型,用于标识此次唤端是直接唤端还是下载还原间接唤端
  • extend:拓展字段,由业务自行填充想要统计的数据,如商品ID、分享来源等

数据SDK

如果所有的数据都由各个业务方以参数的形式传入,显然费时费力且容易出错,对协议不了解的开发很容易乱传参数值而导致数据统计缺失或者异常,所以需要有一个SDK来尽可能收敛数据内容,下面是几个可以自动判断填充的字段:

  1. channel:大部分渠道都可以通过ua来获取渠道标识,如淘宝、天猫、淘特等
  2. spmstr:可以通过统一方法自动获取到spm值,无需业务传入
  3. type:在唤端SDK执行唤端或下载行为时可以动态修改type值,如直接唤端的赋值为0,通过上报还原的赋值为1,通过剪切板还原的赋值为2,也无需调用方感知

数据上报

有了数据协议,接下去就是数据上报存储了,此链路需要前端、客户端、后端、BI多端的配合,前端负责在链接后面拼接数据协议,客户端在识别到特定标识时解析并上报数据内容,后端拿到数据内容后进行数据存储,BI需要解析数据库中存储的内容并可视化展示各业务各渠道的唤端漏斗。整体链路示意如下:image.png

唤端成功率统计口径

唤端分母:端外点击pv,因端外大概率未登录,所以统计uv意义不大
唤端成功(粗口径):端外直接监听到的唤端成功回调,误差较大
唤端失败(粗口径):端外直接监听到的唤端失败回调,误差较大
到端分子(精准口径):端内直接上报的数据pv,误差较小
唤端成功率公式:到端PV / 唤端PV
各渠道各业务的唤端率:通过channel和spm筛选可以计算出对应成功率

唤端在业务中的应用

为了让唤端更加的简单高效,我们通过链接劫持的形式让业务开发做到唤端无感,开发单点业务的时候该怎么跳就怎么跳,不需要关心当前是在什么渠道、什么场景,也不需要处理引导下载和场景还原,所有的唤端细节都交由统一唤端模块处理。当业务确认当前页面需要用于外投时,仅需要引入下面的唤端模块并进行简单配置即可兼容所有的端外唤端功能,该模块会在劫持到链接跳转时进行一些计算来确认是否需要拦截唤端。
image.png

有端直接唤端效果演示

34A11ED9-9F09-4C4F-B9CB-33A3E10D7A9C.gif

无端下载还原效果展示

5698AB5F-54CB-49BF-BE18-1FBE4F2CEC6D.gif

总结&展望

以上就是闲鱼在唤端、下载、还原、数据方面的内容,我们致力于打造一个极致收敛、极致简单、开发无感、业务无感、数据自动化的唤端体系,这也将成为接下来半年核心攻打的方向,接下来也会结合端内分享去做全链路数据追踪,希望明年能有一个更加宏大的唤端版图,让唤端发挥出它最大的业务价值。

相关文章
|
存储 网络协议 调度
淘宝移动端统一网络库的架构演进和弱网优化技术实践
本文将介绍淘宝 APP 统一网络库演进的过程,讲述如何围绕体验持续构建南北向从监测到加速一体化的终端网络架构,通过构建 NPM 弱网诊断感知能力,落地原生多通道技术/多协议择优调度手段,贴合厂商附能网络请求加速,实现去 SPDY 及规模化 IPv6/H3 协议簇的平滑过渡,为用户提供弱网更好、好网更优的 APP 加载浏览体验,支撑业务创造更多的可能性。
358 0
闲鱼技术2022年度白皮书-服务端主题-QCon直击|闲鱼推荐大规模应用背后的工程实践(下)
闲鱼技术2022年度白皮书-服务端主题-QCon直击|闲鱼推荐大规模应用背后的工程实践
242 0
|
算法 搜索推荐
闲鱼技术2022年度白皮书-服务端主题-QCon直击|闲鱼推荐大规模应用背后的工程实践(上)
闲鱼技术2022年度白皮书-服务端主题-QCon直击|闲鱼推荐大规模应用背后的工程实践
270 0
|
存储 资源调度 算法
闲鱼技术2022年度白皮书-服务端主题-QCon直击|闲鱼推荐大规模应用背后的工程实践(中)
闲鱼技术2022年度白皮书-服务端主题-QCon直击|闲鱼推荐大规模应用背后的工程实践
298 0
|
机器学习/深度学习 算法 数据可视化
闲鱼触达平台的大杀器-HermesX
基于用户+基于行业+免打扰
408 0
闲鱼触达平台的大杀器-HermesX
|
存储 消息中间件 缓存
电商互动消息如何进行架构演进?
2020年双11,第一次改变节奏,从光棍节变成双节棍,从一个峰变成了两个峰,在新的挑战下,如何做好技术保障,做好技术支撑,所有技术人都进入了一个新的学习过程。新的形势下,显著特点是时间跨度长、活动周期长以及用户互动玩法更多。 从单用户CC分享到群内分享,以及直播间互动消息等,作为电商的消息IM承接着整个互动的场地,用户在整个“互动消息”场景下,可以进行实时分享、聊天、客服沟通、商家优惠、商家优惠活动和红包以及商品秒杀等。
电商互动消息如何进行架构演进?
|
存储 消息中间件 监控
闲鱼消息发展回顾
一直未停止过的脚步
438 0
闲鱼消息发展回顾
|
机器学习/深度学习 存储 编解码
PixelAI : 手淘客户端上的实时视觉算法应用
基于PixelAI上层视频业务可以快速搭建符合自身业务特色的实时交互视觉特效。在LiveVideoStackCon2019上海大会中,淘宝高级算法专家李晓波详细介绍了手淘在实现客户端上基于深度学习的视觉算法应用时如何在资源受限的情况下达到性能与效果之间的平衡。
525 0
PixelAI : 手淘客户端上的实时视觉算法应用
|
SQL 前端开发 JavaScript
|
存储 XML 缓存
OTT端性能优化建设之本地缓存设计 | 《优酷OTT互联网大屏前端技术实践》第七章
目前,做2C业务的应用,更多强调SSR、客户端缓存以及PWA等,以实现首屏加载体验优化、秒开等性能指标,相比较而言,这些策略更加“综合”“强壮”,如果合理运用以及借助端能力,实现冷启动提速、首屏加载优化、秒开等不在话下。 但是笔者业务服务于“OTT端酷喵APP”前端业务,主要是酷喵APP的HTML5投放(目前更换使用Rax),而端内浏览器并不支持service worker(PWA),且受制于端及浏览器内核,并无zcache类似能力。至此,大写的无奈涌上心头,这种情况还能不能抢救一把?答案是:可以,localStorage迂回包抄方案。也介于此,本文方案诞生,虽不完美,但是终究有闪光所在。
1224 0
OTT端性能优化建设之本地缓存设计 | 《优酷OTT互联网大屏前端技术实践》第七章