对于客户端来说,权限隐私可以分为权限和隐私两大方面。权限是用户通过app中的弹窗设置或者手机设置中相应app的权限设置方法,赋予相应app相应的权限,如电话权限、位置权限、相机权限等.本文主要关注隐私相关的权限。隐私是指用户在使用app过程中的个人信息,比如位置、Mac地址、设备id等。对于Android端而言,大部分隐私信息只有在相应授权后才能获取,但也有仍然是一些未经授权就可以获取的隐私信息。为什么公众隐私意识被唤醒,权限和隐私安全性差会直接导致用户不愿使用;越来越严格的权限治理和隐私安全治理,受到工信部和市场的严格管控;客户端作为与用户最直接互动的信息采集入口,有义务合规收集和使用用户信息。具体做法1.Android各版本权限适配处理1.1Android6.0(SDK版本23)之前版本提前注册权限,安装应用页面会列出当前应用注册的所有权限,没有同意按钮,仅安装和取消。开发App时,只需在manifest文件中注册所需的相应权限:1.2从6.0(SDK版本为23)开始授予Android的动态权限,权限分为普通权限、危险权限和特殊权限。危险权限需要用户在调用某些系统方法前手动授予,包括PHONE、LOCATION、STORAGE等多个权限组。如果未经授权直接调用相关方法,将被抛出,应用将崩溃。错误消息类似于以下内容:java.lang.SecurityException:getDeviceId:hasandroid.permission.READ_PHONE_STATE。解决上面的错误问题,可以自己封装权限处理工具,或者使用一些开源的权限工具进行处理。核心代码逃不掉://判断某个权限是否被批准ContextCompat.checkSelfPermission(context,perm)==PackageManager.PERMISSION_GRANTED)//请求某个权限,会弹出权限系统弹窗调用ActivityCompat.requestPermissions(((Activity)object,perms,requestCode);后注意:如果用户拒绝权限,不允许再次显示系统权限授权弹窗,最好提供一个权限设置1.3READ_PHONE_STATE权限的变化1.3.1EvolutionREAD_PHONE_STATE权限是允许进入手机状态权限,该权限主要是集中在TelephonyManager类中,控制获取imei、deviceId、Meid、SimSerialNumber等id和其他手机状态。大部分app会参考这些字段单独或组合作为设备唯一代码来标识用户设备,然后服务器将进行数据分析、传递等操作。6.0之前,需要注册后才能使用。Android6.0之后,READ_PHONE_STATE权限变成危险权限,需要用户主动授权后才能使用。所以有些App的操作是授权权限后才允许使用App,未授权则退出App。这显然不是一个很好的解决方案,但在过渡阶段还是可以起到一定作用的。留出时间重新定义在未经授权的情况下如何识别某些设备。适配Android10.0后直接取消了READ_PHONE_STATE权限,取而代之的是系统权限READ_PRIVILEGED_PHONE_STATE,只能在系统App中使用。但是,如果代码处理仍然使用READ_PHONE_STATE权限进行授权,那么手机端不会弹出同样的权限授予弹窗。如果此时仍然调用getDeviceId方法,则会直接抛出SecurityException。源码可以在对应方法的注解中体现:@RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE)publicStringgetDeviceId()@RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE)publicStringgetImei()1.3.2适配处理中设置list文件中READ_PHONE_STATE权限的最大值为28,即Android10以上的设备不获取该权限。getDeviceIdgetImeiBuild.VERSION.SDK_INT