写点什么

微信频繁读取 iOS15 用户的相册?

用户头像
池建强
关注
发布于: 2021 年 10 月 09 日
微信频繁读取 iOS15 用户的相册?

微信又上了热搜。微信上热搜不奇怪,微信做个拍一拍都能上热搜,微信的功能更新写「解决了一些已知问题」都能上热搜。但是微信不告知用户读取隐私信息能上热搜,这我就奇怪了。


我和微信团队有过很多次交流,在我看来微信是非常注重保护用户隐私的团队,于是我决定了解一下这个事情的来龙去脉。


起因是什么呢?有用户开启了 iOS 15 的隐私新特性「纪录 App 活动」,对所有 App 的隐私相关数据行为进行了好几天的监控,同时使用了 App Privacy Insights 进行了日志记录。


App Privacy Insights 是一款 iOS 上的第三方应用隐私查看工具,通过统计 iOS 系统里有记录行为的 App 活动数据,记录每个应用的隐私权限访问情况。


监控发现,微信在未激活的状态下,在后台数次读取用户相册,每次读取时间长达一分钟。微信读用户相册干嘛呢?未经用户允许上传到云端吗?还是去做推荐算法的材料了,想想是不是挺可怕的?


这不是一件小事,所以微信官方也快速给出了回复:


iOS 系统为 App 开发者提供相册更新通知标准能力,相册发生内容更新时会通知到 App,提醒 App 可以提前做准备,App 的该准备行为会被记录成读取系统相册。

在用户授权微信可以读取系统相册权限的前提后,为便于用户在微信聊天中按加号时可以快速发图,微信使用了该系统能力,使用户发送图片体验更快速流畅。上述行为均仅在手机本地完成,最新版本中我们将取消对该系统能力的使用,优化快速发图功能。


这是个合理的解释吗?还是微信悄悄在后台读图,累了之后出来再打打太极呢?或者就是 iOS 的机制导致的。我仔细读了 iOS 的接口文档,也就是这篇:


https://developer.apple.com/documentation/photokit/phphotolibrary/observing_changes_in_the_photo_library/


讲得是 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 和 微信,算是两个最注重隐私保护的产品了吧,也是我使用最多的产品。


就这样,洗洗睡吧。明天又周末了。

发布于: 2021 年 10 月 09 日阅读数: 2110
用户头像

池建强

关注

极客时间创始人,但行好事,莫问前程 2007.10.10 加入

老程序员,编程、写作、做产品、摄影、打羽毛球,是目前的几大爱好。目前在极客邦创业

评论 (1 条评论)

发布
用户头像
微信最注重隐私==Windows是开源系统, 无稽之谈, 用户画像都被采集完了,有啥隐私可言
5 小时前
回复
没有更多了
微信频繁读取 iOS15 用户的相册?