Android系統的權限從用戶的角度來看有時候的確有點讓人摸不著頭腦。有時候可能你只需要做1些簡單的事情(對聯系人的信息進行編輯),卻申請了遠超你利用所需的權限(比如訪問所有聯系人信息的權限)。
這很難不讓用戶對你保存戒備。如果你的利用還是閉源的那用戶也沒辦法驗證是不是你的利用正在把他的聯系人信息上傳到利用服務器上面去。即便你向用戶解釋你為何申請這個權限,他們最后也可能不會相信你。所以我在過去開發Android利用的時候避免去用1些奇技淫巧,由于這會額外去申請權限,用戶也會對你不信任。
經過1段時間實踐后,我有這樣1個體會:你在完成某些操作的時候其實不1定需要申請權限的。
比如Android系統中有這樣1個權限: android.permission.CALL_PHONE
. 你需要這個權限來讓你從你的利用中調用撥號器,對嗎?下面的代碼就是你如果撥打電話的,對吧?
錯!這個權限可讓你的手機在沒有用戶操作的情況下打電話!也就是說如果我的利用用了這個權限,我可以在你不知情的情況下每天清晨3點去撥打騷擾電話。
其實正確的做法是這樣的――使用 ACTION_VIEW
或 ACTION_DIAL
:
這個方案的動人的地方在于你的利用就不用申請權限啦。 為何不需要權限呢?由于你使用的這個 Intent 會啟動撥號器,并將你設置好的號碼預先撥號。比起之前的方案,現在還需要用戶點擊“撥號”來打電話,沒有用戶的參與,這個電話就打不出了。說實話,這讓我感覺很好,現在很多利用申請的權限讓人有點手足無措。
另外1個例子:我為我的妻子寫了1個叫做 Quick Map 利用,這個利用主要是為了解決她對現有的導航利用的吐槽。她只想要1個聯系人列表和1條導航到這些聯系人所在地的路徑。
看到這里你可能覺得我需要申請訪問所有聯系人信息的申請來完成這個利用:哈哈哈,你又錯了!如果你看了我的源碼,你就知道其實我用了 ACTION_PICK
這個Intent
啟動相干利用來獲得聯系人地址的:
這意味著我的利用不但不需要申請權限,而且還不要額外的UI。這讓利用的用戶體驗也提升了很多。
在我看來,Android系統最酷的部份之1就是 它的 Intent 系統。由于Intent 意味著我不需要任何東西都要自己來實現。每一個利用都會在Android注冊它所善于處理的數據領域,比如電話號碼,短信或聯系人信息。如果甚么事情都要1個利用來解決,那末這個利用會變得10分臃腫。
Android系統另外1個優點就是我可以利用其它利用所申請的權限,這樣我的利用就不需要再次申請了。Android系統中的以上兩點可讓你的利用變得更加簡單。撥號器需要權限來撥打電話,但是我只需要1個撥打電話的intent就好了,不需要權限。由于用戶信任Android自帶的撥號器,但不信任我的利用,這很好啊。
我寫這篇博客的意義在于在你申請權限之前,你應當最少好好讀讀關于Intent的官方文檔,看看是不是可以通過其他利用來完成你的操作。如果你想更深入的了解,你可以研究1下這篇關于權限的官方文檔,里面介紹更多更精細的權限。如果想要取得更好的用戶體驗,有1點也是非常必要的,那就是利用的安全性,關于這1點可以去看看專業的利用安全服務商愛加密的利用安全解決方案
總之,使用更少的權限不但可讓你獲得更多的用戶信任,對用戶來講,也讓他們取得了很好的用戶體驗。