一個Android程序員如何看:拼多多被曝刪除用戶本機照片

相信大家最近都看到了這條新聞《網(wǎng)友稱被拼多多APP遠程刪除照片》。

簡單描述一下事件的過程,一位網(wǎng)友從拼多多的 App 里,得知邀請一名新用戶,可以直接提現(xiàn)100元,當成功邀請后,發(fā)現(xiàn)給予的是隨機金額,并沒有100元提現(xiàn)這件事情,之后與客服聊天,發(fā)送了邀請一名新用戶,可以直接提現(xiàn)100元的截圖,然后在發(fā)送之后,收到了 vivo 手機系統(tǒng)通知,提示相機內(nèi)的照片被刪除,所以他懷疑拼多多遠程操控手機,刪除了那張圖片。

作為一名 Android 工程師,看到這個問題的時候,發(fā)現(xiàn)挺有意思的,所以決定去測試一下,到底拼多多是否真的存在刪除用戶照片的這個行為。

首先我們都知道,Android 的 App 幾乎所有的都會向用戶獲取了存儲空間的讀寫權限,用于保存和讀取相關的數(shù)據(jù),所以從技術的角度來說,只要獲取了這個權限,位于公共存儲空間的任何文件,都是可以被刪除的。

作為開發(fā)人員,我們都知道,隨意刪除用戶公共存儲空間的任意數(shù)據(jù),這絕對是不合理的行為,但有一個需要注意的點是,我們開發(fā) App 的時候,也會在某些時候把用戶在本 App 中產(chǎn)生的數(shù)據(jù)保存到公共存儲空間,例如圖片、文檔,或者其他的媒體資源文件。

在通過觀察拼多多的聊天頁面,我們可以知道,是存在兩種發(fā)送圖片的方式

1. 點擊照片發(fā)送(也就是說點擊照片按鈕,選擇手機本地的圖片發(fā)送)

2. 點擊拍攝發(fā)送(通過拼多多自己的拍照功能,拍攝一張照片發(fā)送)

所以這個事件中,有一個問題我們要搞清楚

被刪除的截圖是原本就存在于這部手機上,還是那名網(wǎng)友在和客服聊天的時候,通過拍攝這個功能,拍了存在于另一部手機上的截圖?

如果是按照第一種方式發(fā)送的圖片,那么這張圖片被刪除了,拼多多這么做顯然是有問題的。

又去翻了視頻,我發(fā)現(xiàn)發(fā)送的圖片并不是原本的截圖,而是拍攝的照片,當然這也不能絕對說就是用戶使用的拼多多聊天內(nèi)的拍照功能拍的,也可能是用手機拍了另一部手機的截圖,然后發(fā)送的圖片,當然這就和第一種發(fā)送方式一樣了。

不過這個問題,也就只要當事人知道是怎么回事了。

我們在這里討論一下第二種方式,如果用戶使用的是聊天頁面的拍攝按鈕,拍了一張截圖,發(fā)送過去,那么這張圖片會不會被刪除呢?

我用拼多多聊天頁面自帶的拍照功能,拍了一張照片,但這時還沒有點完成按鈕發(fā)送,去檢查手機存儲空間的時候,發(fā)現(xiàn)這張照片已經(jīng)被保存到了 DCIM/Pindd/image/16 這個文件目錄下面。

當點擊發(fā)送后,這照片還是存在的,沒有被刪除。

那么根據(jù) vivo 手機的系統(tǒng)通知,確實有張圖片被刪除了,這到底是怎么回事呢?

然后再次去看了遍視頻,我發(fā)現(xiàn)發(fā)送的這張圖上面??有一個很明顯的紅色標記,再結(jié)合上面我拍完的張照片的頁面,我們可以發(fā)現(xiàn),拼多多在拍完照片之后是提供圖片編輯功能的。

所以我猜測,應該是在應用的聊天頁面拍攝的截圖,然后通過拍攝后的編輯操作劃了紅線,然后發(fā)送的。

按照正常的邏輯,從拍攝到發(fā)送,應該只保留一張圖片,這是沒問題的。

根據(jù)我上面猜測的操作邏輯,其實是拍攝原圖并保存,編輯原圖生成新的編輯后的圖片,然后發(fā)送的是編輯后的圖片,那么這里的原圖其實屬于一張臨時圖片,所以刪掉原圖保留編輯后的圖片,這也是沒問題的。

看到這里,做開發(fā)的同學應該對這個操作非常熟悉,在大多數(shù)有拍照編輯的業(yè)務場景中,我們都是這樣處理的,因為拍攝的原圖相當于一個臨時文件,最終編輯后的文件才是最終的文件,這個臨時文件對用戶來說是無感知且無意義的,所以刪掉是正常的行為。

那么哪里有問題?

問題出現(xiàn)在,拼多多刪除原圖的時候,vivo 手機檢測到了圖片被刪除。為什么 vivo 手機會檢測到了圖片被刪除?

還記得拼多多保存圖片的地址嗎?DCIM/Pindd/image/16 是在 DCIM 下,DCIM 相當于系統(tǒng)公共的相冊目錄,在這個目錄下做任何圖片的保存,刪除操作,系統(tǒng)都會得到相冊被改動的通知,所以當拼多多刪除那張臨時文件時,vivo 出現(xiàn)了圖片被刪除的通知。

真正有問題的地方是,拼多多不應該在 DCIM 保存臨時的圖片文件,我相信這個問題不止拼多多一個 App 有,很多 App 都可能存在這個問題,歸根結(jié)底,是對 Android 文件目錄使用不規(guī)范的問題,應用內(nèi)的臨時文件,應該保存在 App 的私有緩存目錄下,Android 的開發(fā)文檔有明確說明。??

根據(jù)拼多多官方微博最新的聲明,也驗證了我的猜想是正確的。

正確的做法其實也很簡單,這種臨時文件放在內(nèi)部存儲 getCacheDir() 或外部存儲 getExternalCacheDir() 這兩個緩存文件目錄里面就可以了,當真正完成所有的邏輯之后,再將圖片同步到公共的相冊文件夾中。

相比拼多多,微信的聊天頁面也有拍照編輯發(fā)送這一場景,反觀微信,只有在最后一步發(fā)送點擊之后,該圖片才會被保存到手機里用戶可見的圖片文件夾中,至于中間的臨時文件,用戶是無法感知的。

當我寫這篇文章的時候,發(fā)現(xiàn)拼多多的 App 里在編輯圖片之后,已經(jīng)不會刪掉原圖了,大概是通過熱修復的方法,把這里的邏輯做了暫時性的處理。

看似解決了問題,不過根本上,還是對 Android 文件目錄使用不規(guī)范的問題,熱修復也是治標不治本的解決方案,希望拼多多之后可以徹底的解決這個問題吧。

況且 Android 10 Google 已經(jīng)推出了新的 Scoped Storage 規(guī)范,雖然在 Android 10 上沒有嚴格執(zhí)行,但在 Android 11 上是必須適配的,所以看到這篇文章的同學,也希望大家可以檢查一下這部分的代碼,盡早做適配。

現(xiàn)在再回看這個問題,你說這個問題嚴重嗎?

從技術的角度來說,確實是一個小問題,但從事件發(fā)酵的角度來說,它是一個大問題,任何一個小問題都有可能帶來嚴重的后果,所以說寫代碼是需要時刻保持嚴謹?shù)?,不只是簡單的完成需求,更要仔細想想,它真的沒問題了嗎?

再次推薦大家,無論你的技術如何,時不時的去翻閱一下 Android 的官方文檔,總會找到一些你過去忽略或理解有錯的知識。

作者:wanbo
鏈接:https://juejin.cn/post/6917417541195268104

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,443評論 6 532
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,530評論 3 416
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 176,407評論 0 375
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,981評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,759評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,204評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,263評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,415評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,955評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,782評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,983評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,528評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,222評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,650評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,892評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,675評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,967評論 2 374

推薦閱讀更多精彩內(nèi)容