微信频繁读取 iOS15 用户的相册?
微信又上了热搜。微信上热搜不奇怪,微信做个拍一拍都能上热搜,微信的功能更新写「解决了一些已知问题」都能上热搜。但是微信不告知用户读取隐私信息能上热搜,这我就奇怪了。
我和微信团队有过很多次交流,在我看来微信是非常注重保护用户隐私的团队,于是我决定了解一下这个事情的来龙去脉。
起因是什么呢?有用户开启了 iOS 15 的隐私新特性「纪录 App 活动」,对所有 App 的隐私相关数据行为进行了好几天的监控,同时使用了 App Privacy Insights 进行了日志记录。
App Privacy Insights 是一款 iOS 上的第三方应用隐私查看工具,通过统计 iOS 系统里有记录行为的 App 活动数据,记录每个应用的隐私权限访问情况。
监控发现,微信在未激活的状态下,在后台数次读取用户相册,每次读取时间长达一分钟。微信读用户相册干嘛呢?未经用户允许上传到云端吗?还是去做推荐算法的材料了,想想是不是挺可怕的?
这不是一件小事,所以微信官方也快速给出了回复:
iOS 系统为 App 开发者提供相册更新通知标准能力,相册发生内容更新时会通知到 App,提醒 App 可以提前做准备,App 的该准备行为会被记录成读取系统相册。
在用户授权微信可以读取系统相册权限的前提后,为便于用户在微信聊天中按加号时可以快速发图,微信使用了该系统能力,使用户发送图片体验更快速流畅。上述行为均仅在手机本地完成,最新版本中我们将取消对该系统能力的使用,优化快速发图功能。
这是个合理的解释吗?还是微信悄悄在后台读图,累了之后出来再打打太极呢?或者就是 iOS 的机制导致的。我仔细读了 iOS 的接口文档,也就是这篇:
讲得是 Observing Changes in the Photo Library,就是通过注册一个观察者,接受相册变更的通知,其实就是个观察者模式。微信应该是用了这个模式实现微信的「快速发图」功能,导致了开发者观察到的现象。
简单来说,热搜上说的事,和微信的「快速发图」功能有关系。为了更好的使用「快速发图」这个功能,微信需要对相册的更新进行观察,注册了这个「观察者」,对相册的更新进行预观察,这个行为被记录成了 App 主动读取相册的行为。
我的 iOS 和微信都是最新版本,我用网络监控软件长时间观察了自己手机的流量信息,没有发现照片被微信相关的线程传到云端的现象。事实上,如果微信突然把我 130 多 G 照片都传他们家云上,得耗费多少流量和功耗啊。这些异常现象都没有发生。
那这个「快速发图」功能到底是啥呢?其实咱们平时都用。
如果你刚刚截屏,或者编辑好图片,首次进入微信对话框,按右侧的「+」,右下角,也就是加号的上方就会出现你可能要发送的图片。
就是这个功能,可以帮助用户少操作几步,发送自己最可能想要发送的照片。
那为什么微信会多次访问相册,甚至夜间访问呢?其实就是那个注册接口的功劳:
这个协议 PHPhotoLibraryChangeObserver 能让我们通过观察者模式,知道照片相册库的改变,开发者可以基于 PHPhotoLibraryChangeObserver 协议,通过 PHPhotoLibrary 里的这个方法 registerChangeObserver,将某个对象注册为观察者,随时接收照片改变的消息。
iOS 提供了这个相册更新通知的能力,这样可以在照片内容发生更新的时候通知到 App,并识别改变的内容,从而实现需要扫描整个相册才能实现的功能。
关键在于什么呢,在 iOS 15 里,观察 - 通知行为被识别成了读取相册,就像是 App 一直在扫描相册一样。也就是说,iOS 15 的隐私新特性「记录 App 活动」,把 iOS 自己的接口行为记录成了读取相册。
这很可能是个 iOS 的 bug,或者说,iOS 不再建议开发者使用这个观察者接口了。
据我我了解,不少国民 App 都采用了这个接口。
为什么微信会多次访问相册,甚至包括夜间呢?这就和 iOS 系统的调度有关系了,人家是个大管家,它会在系统空闲时间给微信发指令,提醒微信做一些预准备工作。这种后台唤醒机制叫 background fetch,唤醒时机系统定,App 是无法控制的。一般 CPU 空闲的时候更容易收到类似指令。
微信的快速发图功能,其实就是一个预准备,在你想发送最新一张照片的时候,给你准备好,省得再去显示照片库,然后选择。如果你想发的图片不是系统选中的那张,那你再自己选好了。
就这么简单。不过,现在既然 iOS 15 的隐私新特性这么记录这个接口的行为,估计各大厂商不会用这个接口了。最终的结果就是,要么 iOS 改动,要么 App 改用其他方式实现预观察的功能。
在我印象里,iOS 和 微信,算是两个最注重隐私保护的产品了吧,也是我使用最多的产品。
就这样,洗洗睡吧。明天又周末了。
版权声明: 本文为 InfoQ 作者【池建强】的原创文章。
原文链接:【http://xie.infoq.cn/article/c770c1c62ebc6a1597c1cce94】。未经作者许可,禁止转载。
评论 (1 条评论)