【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游戏开发】Android6.0以上的动态权限申请问题

三、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游戏开发】Android6.0以上的动态权限申请问题

  在我们使用到Unity一些需要授权的API调用时候(比如获取网络状态或者使用 Microphone Class),Unity会自动地去申请这些权限,毋须我们额外地多写Android相关的代码。如果你想了解如何在Android层面中手动地进行一些动态权限申请,推荐去看一下 wuzhang 的这篇《Unity如何管理住Android 6.0 调皮的权限》博客。

四、总结

  在本篇博客中,马三和大家一起了解了Android6.0以上动态权限申请的一些概念以及如何在Unity中进行配置的操作,配置很简单,就一行代码的事情,希望可以帮到大家~

如果觉得本篇博客对您有帮助,可以扫码小小地鼓励下马三,马三会写出更多的好文章,支持微信和支付宝哟!

 【Unity游戏开发】Android6.0以上的动态权限申请问题      【Unity游戏开发】Android6.0以上的动态权限申请问题

作者:马三小伙儿
出处:https://www.cnblogs.com/msxh/p/10889484.html 
请尊重别人的劳动成果,让分享成为一种美德,欢迎转载。另外,文章在表述和代码方面如有不妥之处,欢迎批评指正。留下你的脚印,欢迎评论!

上一篇:android 6.0之后动态获取权限


下一篇:spring + springMVC + spring Data + jpa + maven 项目框架搭建