一、引子
最近公司的游戲在做安全性測試,期間也暴露出了不少安全上的問題。雖然我們今天要說的權限申請和安全性相關不大,但是也會影響到游戲的使用體驗等,所以本篇博客中馬三就想和大家談談Android6.0以上版本中的動態權限申請的一些事情。
二、關於動態申請的一些知識點
對於不少Unity程序員來說,可能沒有太多接觸過Android或者iOS的相關開發,所以首先讓我們先來了解一些關於Android動態權限申請的一些知識點。
1.權限概述
Google在 Android 6.0 開始引入了權限申請機制,將所有權限分成了正常權限和危險權限。應用的相關功能每次在使用危險權限時需要動態的申請並得到用戶的授權才能使用。
2.權限分類
系統權限分為兩類:正常權限和危險權限。
- 正常權限不會直接給用戶隱私權帶來風險。如果您的應用在其清單中列出了正常權限,系統將自動授予該權限。
- 危險權限會授予應用訪問用戶機密數據的權限。如果您的應用在其清單中列出了正常權限,系統將自動授予該權限。如果您列出了危險權限,則用戶必須明確批准您的應用使用這些權限。
下面馬三把危險權限進行了羅列,權限是分組的,同一組的權限申請其中一個,同組的權限就全部都申請了。
特殊權限組:
- CALENDAR 日歷
- CAMERA 相機
- CONTACTS 聯系人
- LOCATION 定位
- MICROPHONE 麥克相關,比如錄音
- PHONE 手機狀態
- SENSORS 傳感器
- SMS 短信
- STORAGE 存儲權限

三、Unity中的動態權限申請
那么在Unity開發中,我們又該如何處理Android的動態權限申請呢?對於那些需要動態申請的權限,我們依然還需要在AndroidManifest里面再做聲明。Android 這邊在 target 23 以上時會啟用權限檢查,默認不給敏感權限,比如存儲、語音等,需要 app 自己去申請,但這個的前提是你在 AndroidManifest 中生明了這個權限, 否則會申請失敗,甚至導致崩潰。而這個動態權限的目的其實就是在於APP啟動或者是需要某些權限的時候相當於加了一個二次確認的作用。比如我們需要讀寫SD卡權限,這個權限在Android6.0以上會在程序啟動以后動態的申請,但是我們依然還是需要在Manifest中進行如下的聲明才可以:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<meta-data android:name="unityplayer.SkipPermissionsDialog" android:value="true" />
這個聲明可以寫在<application>或者<activity> Tag之間,建議寫在<application> Tag之間比較好。
在我們使用到Unity一些需要授權的API調用時候(比如獲取網絡狀態或者使用 Microphone Class),Unity會自動地去申請這些權限,毋須我們額外地多寫Android相關的代碼。如果你想了解如何在Android層面中手動地進行一些動態權限申請,推薦去看一下 wuzhang 的這篇《Unity如何管理住Android 6.0 調皮的權限》博客。
四、總結
在本篇博客中,馬三和大家一起了解了Android6.0以上動態權限申請的一些概念以及如何在Unity中進行配置的操作,配置很簡單,就一行代碼的事情,希望可以幫到大家~
如果覺得本篇博客對您有幫助,可以掃碼小小地鼓勵下馬三,馬三會寫出更多的好文章,支持微信和支付寶喲!

作者:馬三小伙兒
出處:https://www.cnblogs.com/msxh/p/10889484.html
請尊重別人的勞動成果,讓分享成為一種美德,歡迎轉載。另外,文章在表述和代碼方面如有不妥之處,歡迎批評指正。留下你的腳印,歡迎評論!
