来源:中国数据分析行业网 | 时间:2021-10-11 | 作者:数据委
(以下文章来源于一个数据玩家的自我修养 ,作者GClover)
《数据安全法》和《个人信息保护法》落地以后,用户隐私越来越被大家所重视。这不,最近微信又上了热搜,起因是有用户开启了iOS 15 的隐私新特性“记录App活动”,对所有App的隐私读取行为进行7天的监控,并使用App Privacy Insights对记录进行读取。
监控发现,微信在用户未主动激活App的情况下,在后台数次读取用户相册,每次读取时间长达1分钟。
对此,微信官方也给出了回应:
iOS系统为App开发者提供相册更新通知标准能力,相册发生内容更新时会通知到App,提醒App可以提前做准备,App的该准备行为会被记录成读取系统相册。
接下来我们一一拆解。首先,来验证一下微信官方说的这个“相册更新通知”能力是什么。
根据iOS官方文档:
https://developer.apple.com/documentation/photokit/phphotolibrary/observing_changes_in_the_photo_library/
在照片相关处理接口里专门有这一节:
这个接口干嘛用的呢,简单来说:
PHPhotoLibraryChangeObserver协议能让我们知道照片相册库中的改变。Photos会发送系统图片改变的消息,我们可以遵守PHPhotoLibraryChangeObserver协议,并通过 PHPhotoLibrary的registerChangeObserver方法将对象注册为观察者,时时接收照片改变的消息。
所以,确实是“iOS提供了这个相册更新通知的能力”没错,相册发生内容更新的时候会通知到 App,让App可以识别到改变的图片,实现原来需要扫描整个相册才能实现的功能。
关键在于,这个观察-通知的行为在iOS15里,被识别成了读取相册,就像是App一直在扫描相册一样。也就是说,iOS 15的隐私新特性“记录App活动”,把iOS自己的接口行为记录成了读取相册。
举个例子,比如用户晚上12:00退出微信,12:05分截了个图,或者拍了个照,然后就睡觉去了。半夜iOS可能会在cpu空闲期间,比如12:30唤醒微信,微信此时可以有几十秒的后台运行时间(这种后台唤醒机制叫background fetch,时机系统定,App无法控制);由于微信订阅了相册更新通知事件,系统会回调微信说相册有更新,同时记录微信在12:30访问了相册。
这个例子大体上还原了上述事件的整个过程。
抛开iOS自己的这个乌龙不说,微信为什么要用到这个能力呢?主要是为了实现这个功能:
刚截的图,或者刚编辑好的图片,进入微信对话框按”+”时,右下角会出现“你可能要发送的照片”,这个功能挺好用,至少对我来说,80%以上的发送图片,不用进入相册再选,直接通过这里就可以发出去。
然而这样一个简单的小功能,要实现起来可不容易。
打个比方,我要知道相册什么时候变化,也就是说,你有一张新产生或者编辑的图片,需要发送,难道我过一段时间就去扫描一遍相册,和上一个试点的相册清单比较一下吗?
这种方式,既要存储上次的相册信息,还要设置一个合理的扫描期限,设置多少才算好呢?
为了解决这类问题,软件开发里有一种设计模式叫做观察者模式。
举个栗子,我关了一群小白鼠在笼子里,但是笼子不太牢靠,有可能会被咬坏,那我就得加固。我想知道哪个笼子坏了,难道要定期巡视一遍吗,那不得累死,觉也睡不成了。
观察者模式,就是帮你雇佣一只猫,由猫来监视(观察)所有的笼子,当笼子被咬坏的时候,大叫一声通知你。
我们回过头来看iOS提供的这个PHPhotoLibraryChangeObserver,名字就是Observer,它就是一个观察者,通过观察相册是否发生改变,来实时的通知App。
有了这个接口,就可以很简单的实现上述功能了。
看到这里有人要说了,就算是使用了这个接口产生了这些相册读取记录,这也不能证明,微信没有趁着调用这个接口的时候,顺便扫描用户相册啊。
先来说说微信做这个事情有没有必要。
现在的摄像头像素越来越高了,屏幕分别率也越来越高了,意味着手机相机拍照和截屏的图片所占空间越来越大,再乘上数亿的活跃用户的量级……
我看了下我刚清理过的相册,约30MB,因为很久没换手机,空间吃紧,所以我这个相册是很少很少的了,按这个大小乘以微信12.5亿的月活,大概是3.5PB,这几乎是一个最小值,因为相册几百MB甚至上G的大有人在。
也就是说,至少需要数十PB的存储来干这件事,还冒着违反刚实行的数据安全法,侵犯用户隐私被巨额罚款的风险,以及企业的声誉风险,为了什么?多分析一些图片,卖点广告?
其实要验证也很简单,要扫描相册,有两种做法,一是直接上传,在云端分析,这会产生巨大的流量;二是本地分析上传,这会产生很大的耗电量。
我自己实验了一下,拍了十几张照片放进相册,然后保持微信在前台。
吃了个饭,微信使用的流量和CPU使用时间都没有明显增加,我用了一上午微信,CPU才用了10分钟,基本都是发图或者放视频这些操作才会用到CPU渲染。
大家如果还有所怀疑,也可以自己实验一下。从我自己的测试结果来看,我认为微信没有扫描相册并上传。
虽然微信不会读取相册全部内容,但是不代表其他App不会读取,我们的相册,信息量还是非常丰富的。
各类的自拍且不说,注册各类平台时,通过OCR扫描的身份证、银行卡照片,几乎都会留在相册里,除非你主动清除。
所以,经常清理相册还是相当有必要的,相册内容被获取的危害,可以参考数据玩家以前的文章。
至于哪些App会扫相册,大家可以按照上文中提到的方法实验一下,以自行实验的结果为准,独立思考,独立判断。