本文來自極客公園
近期,小米 MIUI 的一次更新,引起了軒然大波。
小米手機(jī)最新版操作系統(tǒng)——MIUI12 中,有一個(gè)叫做‘照明彈’的功能。顧名思義,這個(gè)功能是要把一些之前在黑暗中的東西暴露在強(qiáng)光下,讓用戶一目了然。
在‘照明彈’里,用戶可以看到某一應(yīng)用‘自啟動’、被其他應(yīng)用啟動以及讀取設(shè)備數(shù)據(jù)等具體行為,手機(jī) App 原本不為人知的動作一覽無余。
MIUI12 照明彈功能部分截圖,左側(cè)為App自啟動情況,右側(cè)為App被喚醒情況 | MIUI
個(gè)別應(yīng)用在后臺‘反復(fù)橫跳’,頻繁啟動各種‘全家桶’應(yīng)用,讀取用戶隱私信息,這些問題在社交網(wǎng)絡(luò)上引起了很多數(shù)碼圈和產(chǎn)品圈人士的討論。這些應(yīng)用為什么要在后臺反復(fù)刷數(shù)據(jù)?對開發(fā)廠商來說,自啟動和讀數(shù)據(jù)會帶來哪些好處?普通用戶又該如何防范呢?
刷用戶、收數(shù)據(jù),APP 啟動為了什么?
App 自啟動其實(shí)不是什么新鮮事,安卓平臺也賦予開發(fā)者這種能力,只是很多時(shí)候在商業(yè)背景下,這一能力被濫用了。
要想搞明白 App 的自啟動,首先要清楚安卓的核心。它是一個(gè)開放開源的平臺,追求的是被盡可能多的設(shè)備使用。因此對于安卓來說,它想要覆蓋的,并不僅僅是手機(jī)市場,像廣告機(jī)、自助購票機(jī)等很多場景化的設(shè)備也是安卓的獵物。
想要收獲更多的應(yīng)用場景,就要有足夠多的接口支持。對于廣告機(jī)等設(shè)備來說,開機(jī)自動進(jìn)入應(yīng)用程序、即插即用是剛需,因此安卓在設(shè)計(jì)之初就支持應(yīng)用程序自啟動,有需求的 App 只需調(diào)用 API 接口即可實(shí)現(xiàn)。
安卓的本意是好的,但卻被部分開發(fā)者用壞了。由于可以自啟動,一些 App 就開始利用這個(gè) API 接口暗戳戳地自己啟動自己,一方面刷 DAU(日活用戶),另一方面在后臺收集數(shù)據(jù)。
不要小看你手機(jī)里的數(shù)據(jù),它們在應(yīng)用程序開發(fā)商那里可是寶貝。地理位置、錄音、通訊錄、剪貼板、相冊等等都是有料可挖的數(shù)據(jù)金礦。
以打車應(yīng)用為例。很多時(shí)候,為了讓用戶體驗(yàn)更好,平臺會設(shè)置一項(xiàng)貼心功能,用戶在打開 App 的同時(shí),系統(tǒng)自動猜出用戶想要去的目的地。比如用戶早上在家附近打開叫車 App,系統(tǒng)會自動推薦目的地是公司所在地。傍晚用戶在公司附近打開 App,系統(tǒng)猜測用戶是要接小孩放學(xué),自動推薦孩子的學(xué)校地址。
這一功能的實(shí)現(xiàn)主要基于用戶在平臺上的交易記錄,但如果用戶的交易數(shù)據(jù)不足夠多時(shí),系統(tǒng)就需要更豐富的用戶地理位置數(shù)據(jù)來預(yù)測用戶的生活軌跡。這一問題有一個(gè)簡便可行的解決方案,那就是每隔一段時(shí)間在后臺喚醒 App,自動收集用戶的地理位置。
又如,現(xiàn)在支付 App 都有免密支付的功能。用戶在經(jīng)?;顒拥奈恢眠M(jìn)行小額交易,是不需要輸入密碼或者刷臉驗(yàn)證的。這背后也需要 App 定期喚醒,獲得用戶的地理位置數(shù)據(jù),從而進(jìn)行風(fēng)險(xiǎn)控制。
從 App 自啟動中受益的不僅僅是打車、支付這兩個(gè)場景。事實(shí)上,對于大多數(shù) App 來說,擁有自啟動的能力都是一個(gè)零本萬利的事。甚至為了以防哪天萬一用得到,很多 App 在開發(fā)之初就預(yù)留了這一能力。
一般而言,大公司的 App 受到更多的監(jiān)管,會相對規(guī)范,自啟動的目的更多是為了更好地服務(wù)用戶。相較之下,一些小公司的應(yīng)用程序路子會更野一些。
比如偷偷啟動麥克風(fēng)監(jiān)聽或錄音,或者訪問相冊獲取隱私照片等等。這些用戶數(shù)據(jù)會被打包售賣,甚至有可能被賣給黑產(chǎn)。這樣一來,用戶不僅面臨著隱私泄漏的風(fēng)險(xiǎn),更有可能遭受人身和財(cái)產(chǎn)安全的威脅。
互相喚醒:卡頓、發(fā)熱的元兇
安卓的開放帶來了非常多的‘玩法’,其中最為典型的要數(shù) App 的雙進(jìn)程。簡單的理解是,當(dāng)用戶啟動 App 時(shí),同時(shí)啟動了這一 App 的兩個(gè)進(jìn)程。當(dāng)用戶關(guān)掉 App 時(shí),一個(gè)進(jìn)程被殺死,另一個(gè)仍在后臺運(yùn)行。
這一操作的目的其實(shí)和自啟動一樣:刷 DAU,拿用戶數(shù)據(jù)。二者對用戶帶來的困擾也是相同的:隱私泄漏。另外,由于這個(gè)‘殺不死’的進(jìn)程一直在后臺運(yùn)行,導(dǎo)致用戶手機(jī)很快就會發(fā)燙、卡頓,需要關(guān)機(jī)重啟,使用感受直線下降。
事實(shí)上,‘進(jìn)程?;睢恢笔?App 開發(fā)人員與安卓系統(tǒng)的對抗焦點(diǎn)。對于從草莽時(shí)期長出的很多 App 來說,如果后臺進(jìn)程被殺死,那么其‘商業(yè)模型’將受到根本性的動搖。但是安卓希望對終端用戶友好,所以在每一個(gè)版本的升級中,都在更新阻礙開發(fā)者‘進(jìn)程?;睢姆椒ā?/p>
魔高一尺,道高一丈。在長期與安卓抗?fàn)幍倪^程中,App 開發(fā)人員開始抱團(tuán)取暖。同一生態(tài)下的 App 互相合作,一個(gè)被殺死了,另一個(gè)再把它拉起來。在技術(shù)社區(qū)內(nèi),這一方法被稱為‘進(jìn)程永生技術(shù)’。
在開篇的‘照明彈’截圖中,你會發(fā)現(xiàn)有些 App 會在后臺喚起另一個(gè) App,有很大可能是在互相?;?。另外,一個(gè) App 喚醒另一個(gè) App,也可能是為了廣告刷量。
比如 A 公司在 B 公司的 App 上投廣告,那么通過 B 向 A 導(dǎo)流的每一次點(diǎn)擊都會為 B 帶來營收。所以 B 在后臺假裝用戶點(diǎn)擊 A,那么在 A 看來就是一個(gè)‘真實(shí)用戶的點(diǎn)擊’。B 欺騙 A,從廣告效果來說,肯定會對 A 造成損失。
除?;詈退⒘恐猓珹pp 之間互相喚醒還有交換數(shù)據(jù)的可能。舉例而言,社交 App 的數(shù)據(jù)對網(wǎng)購 App 來說很有用。通過關(guān)系鏈的拉取,能夠精準(zhǔn)進(jìn)行用戶畫像,識別購買需求。
不過,這種數(shù)據(jù)交換的操作在巨頭們沒有形成生態(tài)之前,是通過 API 接口發(fā)生在用戶手機(jī)上的。在有了生態(tài),特別是各公司紛紛開始建立中臺之后,用戶數(shù)據(jù)的交換就慢慢地轉(zhuǎn)移到服務(wù)器層面了。
‘照明’之后,接下來怎么辦?
玩法這么多,感覺防不勝防?事實(shí)上,最基本也是最有效的防范,是用戶對 App 權(quán)限的控制。如果 App 沒有訪問權(quán)限,那么它每天自啟動多少次都是徒勞。
但并不是所有的人都有意識有能力關(guān)注手機(jī)的權(quán)限管理,對于上了年紀(jì)的人來說更似如此。因此,監(jiān)管方和平臺方需要共同負(fù)起責(zé)任。
平臺方是否有動力負(fù)這個(gè)責(zé)任,其實(shí)是需要打個(gè)問號的。要想識別違規(guī) App 并督促其下架整改,需要成本投入。目前國內(nèi)很多應(yīng)用商店的背后,是手機(jī)硬件廠商。如果手機(jī)廠商抱著‘賣一臺算一臺’的想法,后續(xù)服務(wù)就很難跟上。
MIUI 是小米商業(yè)化的重要支點(diǎn),因此從商業(yè)角度來說,小米有動力做這件事?!彰鲝棥δ芤泊_實(shí)給 MIUI 平臺上 App 的合規(guī)性帶來了提醒。誰自啟動了,誰啟動了誰,誰的啟動請求被系統(tǒng)拒絕了。。。。。。 這些原本就應(yīng)該讓用戶知道的信息如今被清晰地展現(xiàn)出來。
‘照明彈’推出之后,小米獲得了不少好評,但也有人說是個(gè)噱頭,因?yàn)椴]有從根本上解決問題。即便是小米,可能也沒勇氣徹底讓違規(guī)的 App 整改后再上架。另外,大部分人或許根本沒有意識到這照明彈到底照亮了什么。所以,關(guān)于用戶數(shù)據(jù)保護(hù)和商業(yè)倫理的提升,靠企業(yè)的自我約束只是起點(diǎn),這件事最終只有靠更多用戶的覺醒來完成。