写点什么

关于拼多多被曝删除用户本机照片的一点想法,flutter 弹窗页面缩小

用户头像
Android架构
关注
发布于: 刚刚

不过这个问题,也就只要当事人知道是怎么回事了。


我们在这里讨论一下第二种方式,如果用户使用的是聊天页面的拍摄按钮,拍了一张截图,发送过去,那么这张图片会不会被删除呢?




我用拼多多聊天页面自带的拍照功能,拍了一张照片,但这时还没有点完成按钮发送,去检查手机存储空间的时候,发现这张照片已经被保存到了?DCIM/Pindd/image/16?这个文件目录下面。


当点击发送后,这照片还是存在的,没有被删除。


那么根据 vivo 手机的系统通知,确实有张图片被删除了,这到底是怎么回事呢?



然后再次去看了遍视频,我发现发送的这张图上面有一个很明显的红色标记,再结合上面我拍完的张照片的页面,我们可以发现,拼多多在拍完照片之后是提供图片编辑功能的。


所以我猜测,应该是在应用的聊天页面拍摄的截图,然后通过拍摄后的编辑操作划了红线,然后发送的。


按照正常的逻辑,从拍摄到发送,应该只保留一张图片,这是没问题的。


根据我上面猜测的操作逻辑,其实是拍摄原图并保存,编辑原图生成新的编辑后的图片,然后发送的是编辑后的图片,那么这里的原图其实属于一张临时图片,所以删掉原图保留编辑后的图片,这也是没问题的。


看到这里,做开发的同学应该对这个操作非常熟悉,在大多数有拍照编辑的业务场景中,我们都是这样处理的,因为拍摄的原图相当于一个临时文件,最终编辑后的文件才是最终的文件,这个临时文件对用户来说是无感知且无意义的,所以删掉是正常的行为。


那么哪里有问题?


问题出现在,拼多多删除原图的时候,vivo 手机检测到了图片被删除。为什么 vivo 手机会检测到了图片被删除?


还记得拼多多保存图片的地址吗?DCIM/Pindd/image/16?是在 DCIM 下,DCIM 相当于系统公共的相册目录,在这个目录下做任何图片的保存,删除操作,系统都会得到相册被改动的通知,所以当拼多多删除那张临时文件时,vivo 出现了图片被删除的通知。


真正有问题的地方是,拼多多不应该在 DCIM 保存临时的图片文件,我相信这个问题不止拼多多一个 App 有,很多 App 都可能存在这个问题,归根结底,是对 Android 文件目录使用不规范的问题,应用内的临时文件,应该保存在 App 的私有缓存目录下,Android 的开发文档有明确说明。



根据拼多多官方微博最新的声明,也验证了我的猜想是正确的。



正确的做法其实也很简单,这种临时文件放在内部存储 getCacheDir() 或外部存储 getExternalCacheDir() 这两个缓存文件目录里面就可以了,当真正完成所有的逻辑之后,再将图片同步到公共的相册文件夹中。


相比拼多多,微信的聊天页面也有拍照编辑发送这一场景,反观微信,只有在最后一步发送点击之后,该图片才会被保存到手机里用户可见的图片文件夹中,至于中间的临时文件,用户是无法感知的。


当我


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码


写这篇文章的时候,发现拼多多的 App 里在编辑图片之后,已经不会删掉原图了,大概是通过热修复的方法,把这里的逻辑做了暂时性的处理。


看似解决了问题,不过根本上,还是对 Android 文件目录使用不规范的问题,热修复也是治标不治本的解决方案,希望拼多多之后可以彻底的解决这个问题吧。


况且 Android 10 Google 已经推出了新的 Scoped Storage 规范,虽然在 Android 10 上没有严格执行,但在 Android 11 上是必须适配的,所以看到这篇文章的同学,也希望大家可以检查一下这部分的代码,尽早做适配。

用户头像

Android架构

关注

还未添加个人签名 2021.10.31 加入

还未添加个人简介

评论

发布
暂无评论
关于拼多多被曝删除用户本机照片的一点想法,flutter弹窗页面缩小