一、引子

  最近公司的游戏在做安全性测试,期间也暴露出了不少安全上的问题。虽然我们今天要说的权限申请和安全性相关不大,但是也会影响到游戏的使用体验等,所以本篇博客中马三就想和大家谈谈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调用时候(比如获取网络状态或者使用 Microphone Class),Unity会自动地去申请这些权限,毋须我们额外地多写Android相关的代码。如果你想了解如何在Android层面中手动地进行一些动态权限申请,推荐去看一下 wuzhang 的这篇《Unity如何管理住Android 6.0 调皮的权限》博客。

四、总结

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

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

       

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

【Unity游戏开发】Android6.0以上的动态权限申请问题的更多相关文章

  1. Android 6.0 超级简单的权限申请 (Permission)

    代码地址如下:http://www.demodashi.com/demo/13369.html 背景描述 随着Android系统的不断升级,谷歌对用户的隐私是越来越注重了,给我们开发者带来了更多的繁琐 ...

  2. 关于《Unity3D/2D游戏开发从0到1》书籍再版说明

    关于<Unity3D/2D游戏开发从0到1>第一版本在2015年7月1日全国发行,累计得到不少国内高校教师.培训机构的好评.但是由于Unity官方对于技术不断的升级与版本的快速迭代,基于U ...

  3. 《Unity3D/2D游戏开发从0到1(第二版本)》 书稿完结总结

    前几天,个人著作<Unity3D/2D游戏开发从0到1(第二版)>经过七八个月的技术准备以及近3个月的日夜编写,在十一长假后终于完稿.今天抽出一点时间来,给广大热心小伙伴们汇报一下书籍概况 ...

  4. 《Unity3D/2D游戏开发从0到1》正式出版发行

    <Unity3D/2D游戏开发从0到1>正式出版发行 去年个人编写的Unity书籍正式在2015年7月正式发行,现在补充介绍一下个人著作.书籍信息:      书籍的名称: <Uni ...

  5. 喵的Unity游戏开发之路 - 互动环境(有影响的运动)

    如图片.视频或代码格式等显示异常,请查看原文: https://mp.weixin.qq.com/s/Sv0FOxZCAHHUQPjT8rUeNw 很多童鞋没有系统的Unity3D游戏开发基础,也不知 ...

  6. Android6.0动态权限申请步骤以及需要注意的一些坑

    因为工作需要,简单研究了一下Android6.0权限申请,在Google提供的sample的基础上,写了一个简单的demo.算是自己的笔记吧,可能会比较混乱,主要是方便以后查看.后期有别的问题,随时更 ...

  7. C# Unity游戏开发——Excel中的数据是如何到游戏中的 (二)

    本帖是延续的:C# Unity游戏开发——Excel中的数据是如何到游戏中的 (一) 上个帖子主要是讲了如何读取Excel,本帖主要是讲述读取的Excel数据是如何序列化成二进制的,考虑到现在在手游中 ...

  8. 2017年Unity游戏开发视频教程(入门到精通)

    本文是我发布的一个Unity游戏开发的学习目录,以后我会持续发布一系列的游戏开发教程,都会更新在这个页面上,适合人群有下面的几种: 想要做独立游戏的人 想要找游戏开发相关工作的人 对游戏开发感兴趣的人 ...

  9. 【Unity游戏开发】浅谈Lua和C#中的闭包

    一.前言 目前在Unity游戏开发中,比较流行的两种语言就是Lua和C#.通常的做法是:C#做些核心的功能和接口供Lua调用,Lua主要做些UI模块和一些业务逻辑.这样既能在保持一定的游戏运行效率的同 ...

随机推荐

  1. 【JPA】开始

    Java SE中使用 实体Bean package cn.ycx.entity; import javax.persistence.Entity; import javax.persistence.I ...

  2. 【同步工具类】CountDownLatch闭锁任务同步

    [同步工具类]CountDownLatch闭锁任务同步 转载:https://www.cnblogs.com/yangchongxing/p/9214284.html 打过dota的同学都知道,多人一 ...

  3. 深入浅出分析 PriorityQueue

    一.摘要 在前几篇文章中,咱们了解到,Queue 的实现类有 ArrayDeque.LinkedList.PriorityQueue. 在上一章节中,陆续的介绍到 ArrayDeque 和 Linke ...

  4. eclipse 代码问题总结

    隐藏控件,在xml文件中写属性 android:visibility="gone"

  5. c++之基础知识

    一.变量 作用:给一段指定的内存空间,方便操作这段内存. 语法:数据类型 变量名 = 初始值.int a = 10; 二.常量 作用:用于记录程序中不可更改的数据 c++定义常量有两种方式: #def ...

  6. Windows 10 - 查看系统剪切板历史

    在之前的Windows版本(1809之前),Windows的剪切板历史一直都是对用户不可见的. 也就是它只保留最后一次的剪切记录,但是这个记录是什么,不知道!只能粘贴出来才知道. 但是现在变了,Win ...

  7. 使用node+express+mongodb实现用户注册、登录和验证功能

    无论是手机端还是pc端,几乎都包含登录注册方面功能,今天就使用node+express+mongodb实现一套登录注册功能,这里需要自己去安装MongoDB环境,如果没有安装可以看这篇关于MongoD ...

  8. CGI environment variables

  9. IT兄弟连 HTML5教程 CSS3属性特效 盒模型阴影

    除了为文字添加阴影,我们还可以为盒模型添加阴影.盒模型阴影的属性名称为box-shadow,此属性与text-shadow一样有4个值,前两个值分别表示水平方向位移距离和垂直方向的位移距离,第三个值表 ...

  10. Postman文件上传

    1:请求Url 2:选择消息体 3:选择表单参数 4:填写参数KEY-VALUE,记得打钩 5:Send发送请求