【Unity游戏开发】Android6.0以上的动态权限申请问题
⼀、引⼦
  最近公司的游戏在做安全性测试,期间也暴露出了不少安全上的问题。虽然我们今天要说的权限申请和安全性相关不⼤,但是也会影响到游戏的使⽤体验等,所以本篇博客中马三就想和⼤家谈谈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"/>
马雅舒结婚照
  Unity会默认地对⼀些敏感权限在APP启动的时候⼀股脑地⼀起申请,那些普通的权限则会直接放⾏。但是在游戏启动的时候⼀下就申请了4-5项暂时可能⽤不到的权限,这个操作对⽤户来说是不友好的。⽐如我只想在游戏启动的时候申请⼀个存储的权限,⽽语⾳、定位那些权限我只想在游戏中需要的时候再进⾏⼆次确认怎么办?也就是希望将动态权限的申请进⾏延迟处理。
  那我们可以通过下⾯的这个配置,关闭APP启动的时候就默认申请敏感权限的⾏为,配置这个不影响通过代码去动态申请权限的,只是去掉了⼀开始申请,只需要在Manifest中中添加下⾯这⾏声明就可以了:
<meta-data android:name="unityplayer.SkipPermissionsDialog" android:value="true"/>
这个声明可以写在<application>或者<activity> Tag之间,建议写在<application> Tag之间⽐较好。
  在我们使⽤到Unity⼀些需要授权的API调⽤时候(⽐如获取⽹络状态或者使⽤  Class),Unity会⾃动地去申请这些权限,⽏须我们额外地多写Android相关的代码。如果你想了解如何在Android层⾯中⼿动地进⾏⼀些动态权限申请,推荐去看⼀下 wuzhang 的这篇《》博客。
四、总结
  在本篇博客中,马三和⼤家⼀起了解了Android6.0以上动态权限申请的⼀些概念以及如何在Unity中
防晒隔离霜进⾏配置的操作,配置很简单,就⼀⾏代码的事情,希望可以帮到⼤家~
如果觉得本篇博客对您有帮助,可以扫码⼩⼩地⿎励下马三,马三会写出更多的好⽂章,⽀持和⽀付宝哟!