得物删除视频被系统拦截?都是开发不规范惹的祸
  • 来源:呆鸡哥
  • 时间:2022-11-18 15:26:22
  • 次数:304

在刚刚过去的这个双11,想必许多朋友都加入了“买买买”的行列,但有一位得物用户的购物体验却有些糟心。据这位消费者在社交平台发布的视频显示,他双11期间在得物买了东西,但在发现有问题向平台反映、并上传了视频作为证据后,收到了华为手机的系统提示,检测到“得物”APP删除了相关视频,并已成功拦截。

这一视频所描述的事情其实非常简单,那就是得物方面或是在通过删除视频证据的方式,来解决售后问题。而得物这一“店大欺客”的操作,自然也让许多网友感同身受,因此也一石激起了千层浪。眼见着此事逐渐走向了失控的边缘,得物方面在11月13日发布声明称,得物没有动力去做删除用户相册内容等不合规行为,也没有批量识别和定向删除用户相册的权限与能力

随后,得物方面就“华为手机提示得物APP删除照片”一事再次发布说明称,得物从未删除用户手机相册中的原视频,而是为了避免占用用户手机存储空间、删除的是临时缓存文件。得物方面在这一说明中明确,临时缓存文件的清理主要为了不占用手机的存储空间,并且在其从始至终的整个操作流程,用户保存在手机中的原始视频都不会受到任何影响。

除此之外,得物方面在这份说明中也暗示,这一做法是行业通行方案。事实上,在“华为手机提示得物删除照片”事件前,此前在2020年和2021年就曾分别发生了QQ删除照片被华为EMUI拦截,以及vivo手机提示拼多多APP删除相册照片的案例,已经证明了这确实并非孤例。而且不仅仅是得物,拼多多与腾讯方面早前给出的回应,同样将问题归结于“缓存文件”。

从Android应用开发的角度来说,任何一款APP只要在AndroidManifest.xml(Android应用清单)中声明 ,申请关于本地文件读写的预定义的权限,此后再获得了用户的授权,它就有了向本地文件夹中删除或添加文件的权限。但问题是,随着谷歌方面收紧了Android权限机制,APP试图获得这样的权限是一定需要经过用户允许的。

换而言之,目前APP想要进行处理用户存储在手机中的数据这类敏感操作,必然要获得用户的授权。并且事实也确如得物方面所言,是手机系统检测到APP对缓存文件的处理、进而触发了拦截通知。然而这并不是整件事的全貌,得物的相关说明实际上是避重就轻地撇清了自己的责任。

“缓存”无疑是提高手机性能的重要手段,由于手机中的主控、内存、存储等不同元器件的运行速度不同,所以为了平衡各元器件的速度差异,Android系统设计了用于数据交换的缓冲区。而APP在运行时产生的视频、文字、图片等数据就会放在缓存里,能够大幅提升数据的响应速度,当用户有需求的时候即可实现“秒开”的效果。

当然,由于Android手机的内存(RAM)是有限的,目前主流Android旗舰机型通常也只有8GB至16GB的内存,所以出于对内存的高效利用,谷歌为Android设计了名为Low Memory Killer的内存回收机制。其作用,就是当系统发现内存低于警戒线时,可通过对进程重要性的评估,来决定关闭哪些进程释放内存、以确保系统的流畅度。

得物删除视频被系统拦截?都是开发不规范惹的祸,呆鸡哥安装维修平台

但除了Android本身外,APP也会对自己产生的缓存进行处理。比如说,得物APP所采用的方案,就是用户使用其编辑视频时,会将该视频放进缓存,待视频上传完毕后再删除相关文件来释放缓存空间。那么问题就来了,这样的策略既然是业内通行做法,那按理来说应该会出现大范围的误报,可为什么只有得物出现了被华为HarmonyOS拦截的情况呢?

答案可能只有一个,那就是得物方面在APP开发时并没有遵守华为的相关规范。从正常的逻辑上来说,无论华为还是其他Android厂商,它们开发的系统都只会管辖本身所提供的相册目录,而不会关注APP对私有文件目录上的操作。通俗来说,就是手机厂商提供的操作系统只会管理“公共场景”,而对APP自己的内部行为不会“长臂管辖”。

而这一点,在两年前华为消费者业务手机产品线副总裁李小龙回应“华为手机提示拦截QQ删除照片”时,就体现的非常清晰。当时他曾表示,“图片视频删除保护功能,只要有第三方应用删除常用图库目录下的照片或视频,就会通知提醒用户,并能够在图库回收站恢复刚删除的内容。如果第三方应用不想让缓存图片被用户在系统图库下看到,就应该按照安卓规范在该缓存目录下添加.nomedia属性,这样缓存图片就不会被系统扫描到。”

没错,按照Android开发规范,APP产生的临时文件应该被归属在APP文件夹下。并且有一个事实需要说明,那就是Android系统本身其实是没有所谓的“相册”功能,大家看到的“相册”其实是手机厂商利用系统服务MediaProvider(媒体存储器)将存储空间内媒体文件搜集并整理的结果。

“.nomedia属性”则是告诉MediaProvider,这个文件夹中不存在媒体文件,让系统跳过扫描这个文件夹下的媒体文件。当然,开发者将APP产生的缓存文件放到系统的缓存目录下,并将缓存清理工作完全交由系统来负责也是一种策略。

所以,得物方面就是避开了两个正确选项,选择了一个错误的方向。其并没有遵循相关开发规范,既可能是没有为多媒体缓存文件添加.nomedia属性,进而导致相关文件被系统扫描到;也有可能是直接在系统缓存目录下,即APP私有目录外、创建了属于自己的缓存文件夹,却选择由APP进行删除操作。事实上,这两种情况都会导致系统提示,APP尝试删除用户相册内文件的提示。

因此在华为手机的HarmonyOS看来,得物的这番操作显然就相当于是在“破坏公共设施”,因此需要向用户报告这一行为。

归根结底,之所以总是在Android生态内出现类似事件,Android的沙盒机制远逊于iOS是关键。当每一个APP都只能对自己沙盒内的数据进行增删改、对于沙盒外的数据无权过问时,自然用户也就不再需要为APP删除自己的照片、视频而忧心了。