扫码打开虎嗅APP
本文来自知乎问答“今日头条是否存在收集用户数据的行为?”,作者:小爝
对于“今日头条是否存在收集用户数据的行为?”这个问题,最近几周经常在知乎上看见。但大部分的人都是看到表象,我今天说说我个人的一些看法,算是对这个事情的一个技术总结和辟谣:
从技术角度看,监听用户不具可行性
ios下后台静默录音。
android下后台保活和静默录音。
录音功能的上传,语音提取关键词,推荐的实现原理。
为什么我没有浏览的东西,淘宝,头条,微博一些app可以在feed流里给我推荐?
知道了这些东西实现的技术原理,我相信这个谣言就不攻自破了。
一、ios下后台的静默录音:不可能做到偷偷完成
首先无论ios还是android,要开启录音功能在安装或者使用时的第一次一定是要用户授权的,这个大家都知道。
如果你对ios的app进行了录音或者语音授权,之后再次录音确实可以不需要用户相应的二次授权,但是会在前台屏幕的状态栏会显示蓝色、绿色等不同的变化。
绿色代表正在打电话,红色代表正在录音或者录制屏幕。
所以基本上ios上在后台录音偷听的实现在技术上是不可能做到偷偷静默的。
二、android下后台的保活和静默录音:容易出错,容易被发现
首先,android要在退到后台而不被杀死本身就是个黑科技,一般的实现手段分下面几种:
2.1利用订阅android的系统消息进行唤起,比如开机,切换网络等,可以唤醒app,做到后台运行。
2.2 利用一些通用的其他app的sdk协议唤醒自己,比如百度,淘宝,头条这些大厂,一旦打开一个app,可能就会尝试唤起你其他的同厂app在后台运行,甚至下载(一般不敢)。
2.3 启动一个前台的service,比如我们听歌的时候,可以在状态栏里看到后台运行的程序提示。
在android最新的版本中已经禁用了很多的系统消息,但是在一些低版本的国产机型,android确实是可以自己启动一个后台service在保活的后台中。
这个唤醒,哪怕你开机后不开这个app,也是可能被以上的机制唤醒,成功运行的。
所以如果你对android的app在安装时给了录音授权,在一些低版本的android下确实可以通过上述手段做到静默录音,但是android系统中的录音功能(麦克风)是互斥的,比如淘宝或者头条的app真的在后台运行了录音功能,那么你在微信,qq,或者其他app中要使用录音功能就会出现报错提示,这个是非常容易发现的bug,之前也有很多人截取了实际的报错图片,所以从技术层面分析,android低版本某些机型是可以做到,但是确很容易被用户发现,并且关闭掉(可以理解成是系统级bug,比如在淘宝内使用了语音搜索而没有关闭麦克风引用导致的)。
三、录音功能的上传,语音提取关键词,推荐的实现原理
通过上面的分析,其实我们可以得知,大部分的手机都是安全的,如果真的有少部分android用户,安装了恶意的程序,在后台录音,并分析了你的录音记录,技术实现上会是什么样的呢?
首先,分2种情况:
3.1 本地语音识别并提取关键词,把结果上传回服务器。(这里只是一种实现手段,但是一般都不会这么做,后边会按实现方法来分析,可以联想一些语音输入法的实现,都是云端转义的)
3.2 直接把语音上传到服务器,服务器云端解析语音,提取关键词。
我们先看第一种实现的技术手段:
3.1.1 本地进行录音。
3.1.2 本地保存,比如1分钟或者30秒一个分片,然后分析提取关键词,再删除本地录音分片。
首先不说这个有多占存储,很快就能被用户发现。再次是对语音分析的sdk一般都非常的大,比如随便去github上搜索对应的分词库和关键词库,data目录里一个文件就好几MB了。
没错,有人可能会说,这部分功能可以使用动态下发的方式后续下载。那么本地分析一段语音中的关键词,我们需要实现到什么程度才可完整用于推荐呢?
3.1.3 本地语音识别,提取关键字。
首先需要进行“语音转文字”,然后“文字分词”。这要求本地有一个非常大的词库,甚至方言,英语库。然后,这些匹配关键词的程序执行语句开始在用户手机里不间断地执行。本身就是非常损耗机器性能的,而且对比云端实现方式客户端的手机性能很弱,一般这种匹配和分析的事都是在服务端分布式的集群里完成的。
但是这个事情,一个稍微正常点的程序员和产品经理都是不会这么干的,因为这个事太蠢了,也太费电了,现在很多的android手机是可以非常直观的看到各个app的费电耗电情况的,而且android的流量信息也是可以在状态栏里看到的,或者一般的用户安装了移动or联通的流量助手等,或者月底交电话费的时候,都可以查看自己的流量信息,非常容易被用户发现,悄悄上传或者下载了大量的无用语音数据。另外如果一个app的本地计算量这么大,并且不间断上传用户词语分析结果,这是非常难做到“偷偷”录音分析的效果。(手机一定会长时间的烫手)
3.2 直接上传语音去服务器云端做分析。这个就更扯了,语音就算压缩后依然很大,如果不停传输,一个app 24小时不断上传语音到远端,这个方法,同样太容易被用户发现了,比如流量监控软件,或者手机长时间发烫等等。
所以基本上,哪怕是少部分的anroid手机可以实现静默录音,但是无论是本地分析还是远程分析语音,都是一件非常划不来而且容易被用户发现的事。
聊聊为什么广告推荐会这么精准
四、为什么我没有浏览的东西,淘宝,头条,微博一些app可以在feed流里给我推荐?
上面说了这么多实现的技术原理,很多人可能说,那为什么我从来没有搜索过,或者浏览过的东西会出现在我的feed流推荐中?
这就要从广告推荐系统的实现角度,来给大家科普了。
移动APP的广告推荐总体分为两类,一类是程序化广告,一类是基于兴趣推荐的广告。
程序化广告是将广告投放各环节进行信息化处理,并运用技术手段自动化完成广告的投放和管理。这是一种已经被立法所认可、并在全球范围内普遍应用的广告投放形式。
在程序化广告应用中,广告的内容提供、是否展示等,都由广告主(谁投广告谁就是广告主)自主控制和决定。
移动APP仅提供程序化广告对接及展示技术,不参与广告内容的提供,更不会获取你在其他应用内的行为或数据。
举例来说,很多人会说,我在淘宝上搜了一个猫粮,结果关了淘宝,打开了今日头条,就发现今日头条也给我推荐猫粮了,这其实并不是因为头条对你做了什么监控和录音做到的,这是因为淘宝记录了你的关注兴趣,你看的广告也是淘宝投放在这个app中的,淘宝通过程序化广告提供的技术接口把你和你之前淘宝的历史记录和偏好关联之后,才展示出的关联广告。
这个的实现原理并不是app开了后台录音达到的,本质上是手机设备里都有一个供开发者使用的广告标识符,IOS中是IDFA(Identifier For Advertising),android中是基于google Play Service的GAID(Google AdVertising ID) API。
IDFA,GAID它们都是在同一个设备上的,所有App都可以获取到的一个相同的值,是专门给各广告提供商用来追踪用户而设的。广告标示符是由系统存储着的。适用于对外获取,也不是某一个app提供给外部的,实际应用例子如广告推广、换量等跨应用的用户追踪等,上文中说到的淘宝猫粮的例子一般也是利用这个技术来同步不同APP的广告关联信息。
而基于兴趣推荐的这类广告,技术原理是移动APP基于用户和用户关系在APP上的行为,比如阅读、点击等等,然后给用户推荐他可能感兴趣的广告,这一类可以参考微信朋友圈广告。
比如我天天喜欢看NBA的新闻,那可能就给我推荐一个卖NBA球衣的,卖篮球的,可以更精准促进成交。
当然如果你本身淘宝账户里就有你同学或者朋友的好友,基于你好友的兴趣给你推荐你可能喜欢的产品也是一种正常的推荐维度,所以并不能说是因为录音而实现的无关联推荐。
所以说,要实现这种广告推荐,录音的实现成本高了许多,但是利用广告推荐系统技术,可以做得更加方便、准确,为什么人家还要偷偷录音,费劲巴拉地用那么高成本的实现给你推荐商品呢?