為什麼 Android 不將許可權控制設計成跟 iOS 一樣簡單可靠易用?

iOS 應用的許可權控制包括:推送通知(Notification Center);Privacy 隱私控制裡面的地理位置、聯繫人、日曆、備忘錄、相片、藍牙、麥克風(Microphone)、協處理器(Motion Activity);基站蜂窩數據(Cellular);和社交網路賬號。以上這些 iOS 第三方應用讀寫訪問許可權都可以主動分配或者回收禁止。


@陳松把問題說清楚了

關於這一段我有不同想法:

這樣做的壞處是:一些應用可能盜竊私密資料,產生話費

好處是:盡量保證了優秀app的功能完整性

實際上從4.2(是嗎?)開始,Android在發送(由運營商收取的)付費簡訊時會強制彈出提醒。

在國內,這裡付費簡訊指代向1066開頭的號碼發送的簡訊

使用者總應當能夠選擇不將關鍵數據(聯繫人,位置信息等)暴露給第三方應用,這與第三方的產品質量好壞,是否遵守協議/道德無關。同樣的,應用程序總應當預料到無法使用這些數據的狀況。這是基本權利,體現了用戶對設備的所有。

另一方面,關於一些相對不那麼敏感的信息,使用者依然有權利阻止第三方獲取:

拿微信舉例,它會要這些東西:

getDeviceId

(設備的串號,IMEI或cdma手機的MEID,它們可作為設備的唯一識別符號)

getLine1Number

(手機的電話號碼,不是所有的Android手機都暴露這個)

getNetworkCountryIso

getNetworkOperator

getNetworkOperatorName

(有關當前網路的運營商,國家)

getSubscriberId

(IMSI,國際移動用戶識別碼)

我啟用了微信的賬號保護(在不認識的手機上登陸需要簡訊驗證),它理所應當檢測諸如設備串號以及Android ID的內容,來達成以上功能。但對於多數應用程序,這些信息並非必要。

你的運營商和你用的軟體有關係嗎?

------想建立這種聯繫的它,是廣告公司

軟體提供者需要記住你的手機就是這台獨一無二的手機嗎?

-------大多數時候,想這麼做的還是廣告公司

對於設備,串號終生不變(Wifi模塊的MAC也可作為設備唯一識別符),Android ID只會在刷機(恢復出廠設置)時重置,掌握了這些信息就能掌握到具體的個人。

Umeng的說明

對於友盟來說,它能通過手機上安裝的程序,使用習慣來建立一份關於你的側寫而不直接地包括你的身份信息。然而,這應當是只有執法機關才可掌握的信息。

---------------------------------------------

Android 4.3出現了一個AppOps,並且還暴露了android.app.AppOpsManager這個Class

AppOpsManager

一鍵開啟Android 4.4應用許可權管理:AppOpsKK

Kitkat一方面完善了AppOps,添加了功能,解決了幾個bug

依然處於未完工狀態,Google想了不少辦法隱藏它的入口。不像Android Runtime(ART),所有的4.3/4.4系統里都有AppOps,而且不可禁用。

另一方面,對/sdcard分區做出了更多的限制

KitKat and SD cards

Android試圖隔離應用程序對磁碟的訪問,會比從前更加接近iOS,而達成該功能便需要支持Linux許可權的磁碟分區,如Ext4,這需要使用字型檔(焊在主板上的eMMC介面快閃記憶體)的存儲空間。而實體的SD卡只能用exFAT/FAT32分區,參考三星的手機,它的實體SD卡上只能寫入照片/錄像。

雖然某個參與Android項目的Google員工否認AppOps作為隱私保護工具的存在,但依據上述信息,它實在不太像一個調試工具。

也就是說,我認為AppOps就是那個『將許可權控制設計成跟 iOS 一樣簡單可靠易用』的角色。目前AppOps缺乏「事前告知」的能力。


Google可能認為開發者都是自覺的,既然開發者申請了這些許可權那麼肯定是有用途的,如果用戶關閉這些許可權會破壞程序功能的完整性。只系統在安裝或更新的時候會把需要的許可權給列出來。

但是事實並不是如此,以前我安裝程序的時候經常被程序所要求的長長的許可權列表嚇到了。但是現在Android的各大應用市場都很成熟了,未下載前就能看到程序所需要的許可權,用戶的警覺性也越來越高,流氓軟體生存的空間越來越小。

而且像撥打電話和發送簡訊這些可能會產生扣費的許可權系統在安裝的時候還標了黃色提示。因為Android的開放性,市場上許可權控制軟體也很多,可以自行下載安裝。

我希望開發者自己堅守需要真正需要用到的時候才把許可權加入AndroidManifest.xml中申請,我在自己開發的小軟體加入個讀寫SD卡的許可權,用來緩存下載的網路圖片和存放下載的新版本APK時都是再三考慮。本來加入一些功能的時候想用百度的SDK,結果看到他要求太多許可權了,還是自己花點時間寫。


世界上同樣的東西不需要兩個。眾所周知,安卓的優勢在於其自由性,包括開方的許可權管理機制,內存管理機制,以及開放的系統本身。iOS則恰恰相反,封閉性的優勢在於更安全,最大的例子就是內購系統,誰都不一樣被莫名其妙的扣話費吧。


我認為魯賓最開始設想是好的:

由開發者來處理app中的許可權問題,或者說,這並不太重要(是因為Google本身就是一群Geek嗎),我本身就是個開源的系統,開源其中的一項意味就是自由,那麼說,我在程序最開始的時候(安裝)就告訴你,我的app中可能會有功能使用到你的攝像頭、抓你的通訊錄,然後到時候為你服務;可是現實往往不是這樣,會又更多的Geek用你的信息來做一些奇奇怪怪的事情。以Google的思維講,我們的東西是共享的,我給你做好框架,你來把它實現/使用地更好。

而蘋果的ios系統,從最開始講,類似Win的System許可權你就算是Admin也拿不到一樣,本身就是一款商業產品,我們有最好的交互設計師,我們有頂級的程序員,我們有絕佳的產品運營團隊,我設計出來的也許無法直接幫你解決現實問題,但是一定是會「以你為主」的。這也就是蘋果的許可權「不對外開放」的原因。而這樣的做法實際上並無錯誤,而且在普通用戶中很受用。

而且現在也有很多類似的東西在學著蘋果搞,小米和360的許可權控制,在用戶涉及到許可權問題的時候,就會對其進行相關的提示。但是這種東西,其實我認為用處並不大,例如明明不需要,可是你的手機銀行非得要使用你的閃光燈許可權、振動許可權等,你還能真正因為它的許可權而不去用嗎。

話題扯的有點遠,綜上所述吧,我的理解就是Google認為用戶自己是「有分辨能力的使用者」,我們共同努力將和諧社會推動到最高峰;而蘋果認為用戶是「處在危險之中的傻瓜」,所以把許可權搞地那麼敏感,總會彈出各種各樣的提示框,去告知用戶:你這樣的操作是有可能導致你家破人亡的,跟我們一毛錢關係都沒有。

雖然我是Android開發人員,但是不得不說,就從當下用戶的腦殘程度來講,針對純用戶蘋果的這一套還是好一些。


Android跟iOS的出發點完全不同,Android是給手機(或平板)廠家用的,iOS是直接拿給用戶用的。蘋果的盈利模式是賣產品給用戶,用戶付給蘋果利潤。谷歌的盈利模式是賣用戶給廣告僱主,僱主付給谷歌利潤。這就決定了Android必須儘可能討好廠商來提高廠商的積極性,同時也要儘可能給廣告業務提供便利——開放許可權,否則廣告業務會很不方便。這種做法無可厚非,只是後來被攻擊太多,就遮遮掩掩的弄一些許可權管理,安撫用戶一下。


We cannot guarantee that Android is designed to be safe, the format was designed to give more freedom.


首先想想iOS裡面控制的比較敏感的許可權是那些?

- 通訊錄

- 相機

- 定位服務

在安卓裡面,安裝應用的時候,這些相關的敏感許可權也會標記為「隱私許可權」列出來:

- 告訴你這個App用了那些涉及隱私的許可權(讀取電話,簡訊,通訊錄,拍照,GPS)

- 標黃一些可能產生費用的許可權

- 列出其他設備相關的許可權

所以,安卓的做法其實是在你安裝的時候告訴你它申請了什麼許可權,讓你自己去判斷。的確是不如iOS的控制來的靈活。

這樣做的壞處是:一些應用可能盜竊私密資料,產生話費

好處是:盡量保證了優秀app的功能完整性

Google play的審核也是越來越嚴格的。他認為你不應該有某個許可權,不會讓你通過審核並發布(比如說做個手電筒app,然後要發簡訊許可權)。

對於很多人提到的流氓軟體,在國內其實也早已經越來越少了。原因主要是這樣的:

1. 以前安卓市場又多又雜,質量不一。現在已經形成了幾個大平台(豌豆莢,360助手,91,小米什麼的),他們對於應用質量的把控是相對靠譜的

2. 大家對於應用質量也越來越有自己的判斷,知道什麼是好App

最後就是想說,大家對Android的印象不要停留在使用卡頓,交互設計差,廣告推送滿天飛的時候Android的發展早就超出了好多自以為是的人的想像了。


其實是android的許可權管理更細化好吧,只不過它現在還沒有官方推出工具(4.3有隱藏的Activity可以控制),它的細化程度比ios強多了好吧。只不過apple一直把許可權管理當賣點來宣傳,而Android沒有這麼做而已。


手機廠商說啥是啥


android安裝應用時能看到許可權,不同意就不裝了。我猜這種做法可能是想避嫌,避免太像ios,其實大家都知道ios的做法更成熟,android現在雖然不是用戶主動的許可權控制,以後遲早會的


有舍有得。


其實Android許可權控制對程序員來說挺簡單,而且種類很齊全。感覺之所以會覺得ios的許可權管理更簡單,是因為用戶有入口可隨時修改設置許可權,而且僅列出用戶敏感的幾個許可權, 用戶更容易理解。而android用戶大多情況沒關注應用需要什麼許可權,就默認允許了。


裝個應用要一堆許可權,不給不讓裝,太流氓了


理念不同,一個依靠開放的力量擴張,一個依靠封閉的力量圈地。


理念不同,android更開放,把選擇權交給用戶


android和ios很大的不同就是它本身是開源的,雖然說代碼沒有全部開放。現在有很多像車載智能電視都是在安卓的基礎上二次開發的,給你更多的自由,也就讓你更容易定製,能夠更好的控制許可權


對於開發者來說,其實android的許可權控制更簡單、易用,忘掉申請許可權的操作在開發階段運行直接出異常精確提示你沒有啥許可權。


推薦閱讀:

SmartBar是否越來越遠離了「不需定製」的初衷?
如何評價谷歌將把Chrome OS整合進Android這一舉措?
如何在電腦上下載Google play上的應用?
UI的設計與Android規範不符怎麼辦?
Android 上開發國內應用都用什麼推送? 海外可以用 GCM, 國內呢?

TAG:iOS | Android | 模擬器 |