跨平台应用开发进阶(五十五):uni-app 获取设备信息及 APP 报无相应权限问题分析及解决

一、前言

APP开发过程中,需要获取设备ID信息。在实践过程中,发现不同版本的HBuilderX,在调用uni.getSystemInfoSync()接口后,获取到的结果不一致,导致业务逻辑出现问题。例如:使用3.2.15之前的版本调用uni.getSystemInfo接口获取deviceId,安卓设备获取到的为32位数的字符串,包含数字和英文大写字母,例如20FEE6B89972BF2C5D0C9A03B725818A,更新至3.2.15版本相同的代码获取到的deviceId为16位字符串,数字和小写字母组合,如5d09ed0224ad7e2d

SystemInfo 里的 deviceIdplus.device 并非同一个值。

另外,uniapp初始化时就生成好了 getSystemInfoSync 需要的信息,导致授权后没有重新走逻辑,故没有弹出权限请求弹窗。

在这里插入图片描述

二、系统标识获取方法

Android 平台各大应用商店已经要求 API 等级(targetSdkVersion)为26或以上。高版本Android系统完善了授权系统,获取设备信息(如imei)需要经过用户授权确认,弹出获取设备信息的授权提示框。

如果不在manifest里指定,HBuilder的打包默认targetSdkVersion是21,而HBuilderX已经是26了。targetSdkVersion变高就会引发动态权限问题。

目前5+ API获取设备信息是通过以下属性方式读取。

为了保证以上属性可用,应用需在启动时进行初始化赋值,原生层这时候就需要申请获取设备信息权限读取imeiimsi等信息。

即使应用没有调用以上API,应用启动时仍然执行此初始化赋值逻辑,导致应用启动时弹出设备信息授权提示框。

注意⚠️:为了避免应用启动时弹出设备信息授权提示框,建议使用5+ API的属性方式获取imeiimsiuuid信息的代码调整使用plus.device.getInfo方法。

至于属性和方法的区别,可能普通程序员看不懂,但做底层的会知道,属性就是启动时就必须初始化的。

原来的plus.device.imeiplus.device.imsiplus.device.uuid等属性方式的API不推荐使用,后续会逐步废弃。

为了保证向下兼容,目前还可以使用,但不一定可以获取到正确的值。

取决于应用启动前是否已经获取设备信息权限:

  • 如果应用启动前没有获取设备信息授权(询问或拒绝状态),则无法获取设备信息,按权限被拒绝的逻辑处理。

  • 如果应用获取设备信息授权,则可以获取设备信息。

注意⚠️:调用plus.device.imeiplus.device.imsiplus.device.uuid不会触发授权提示框。

三、无权限问题解决

查看Hbuilderx更新3.6.13的版本记录有:调整 Camera&GalleryBarcodeOrientationRecord等模块从引擎内置调整为独立模块,解决iOS平台隐私合规检测可能报包含麦克风、相机/相册、运动等权限的问题。云端打包默认不再包含以上模块,如需要请手动在 manifest.json -> 模块配置中勾选相应模块。

从官方文档可知,其实从3.6.11就已经进行了上述配置改造。
在这里插入图片描述
总结:

  • 查看版本更新记录还是很有必要的。
  • 升级有风险,降级需谨慎!

四、拓展阅读

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: uni-app-template是一款基于uni-app框架建立的通用模板,可以为开发者提供一个基础的项目结构和功能模块,减少开发的时间和工作量。 该模板的优势在于跨平台性能良好,支持同时开发多个平台的应用程序,并且可以达到近乎原生的用户体验。 在使用uni-app-template时,开发者可以选择不同的开发方式,如HBuilder X、VS Code等,也可以选择不同的UI框架和组件库进行二次开发。该模板还提供了常用的API,如ajax、storage、toast、loading等,方便开发者快速构建应用界面。 总之,uni-app-template是一款十分实用的通用模板,开发者可以通过基于此模板的项目,快速开发出高性能、跨平台的应用程序。 ### 回答2: uni-app-template是一个能够快速构建uni-app项目的通用模板。uni-app是一款跨平台开发框架,可以将一份代码同时转化为多个平台的应用程序,如微信小程序、App Store和Google Play应用商店,以及各种移动设备uni-app-template的特点主要体现在以下几个方面: 1.简单易用 uni-app-template是一个基于uni-app的通用模板,具有简单易用的特点,可以轻松构建平台适配性高、UI风格统一的app。 2.多平台适配 uni-app-template支持多种平台适配,不仅可以生成微信小程序应用,还可以生成iOS和Android应用,无需重新编写代码。因此,采用uni-app-template开发应用程序可以大大提高开发效率和代码复用率。 3.模块化开发 模板支持应用程序的模块化开发,可以将功能实现的代码封装在一个模块中,方便开发者进行管理和维护,并提高代码的可重用性和可维护性。 4.灵活配置 uni-app-template支持灵活配置,可以根据不同的需求选择不同的UI组件、主题颜色、字体、字号等参数,还可以根据具体平台的特点进行适配。 总之,uni-app-template是一个开发者在uni-app框架下快速构建多端应用程序的好选择。借助它,可以迅速构建高效、稳定、具备多端适配能力的app,大大提高开发效率和使用体验。 ### 回答3: Uni-app-template是一种用于uni-app框架的通用模板。uni-app是最近非常受欢迎的移动端应用开发框架,它可以一次编写,多端发布,不仅能够开发微信小程序,还可以开发iOS和安卓应用,还支持H5。 Uni-app-template能够提供一个通用的模板,以便开发者更加高效地完成开发工作。这个模板内置了一些常用的功能,例如页面布局,样式设置,组件引用等。开发者在使用这个模板时,可以根据自己的需要,逐步添加或修改代码,来实现自己的功能。 Uni-app-template中已经内置了很多通用的组件,例如tab栏、navbar、搜索栏等,这些组件可供开发者直接使用,以减少重复开发的工作量。 此外,Uni-app-template还内置了一些常用的插件,例如uni-ui(一个类似于Element UI的移动端UI组件库)、uview(一个为uni-app量身定制的UI库)等,这些插件可以帮助开发者更简单地进行开发工作。 Uni-app-template的另一个优点是它的兼容性。一旦应用开发完成,它将能够直接在各个平台上运行,包括微信小程序、iOS和安卓应用,以及H5网页应用。由于Uni-app框架和Uni-app-template具有良好的兼容性,使得开发者的工作更加高效和简单。 总之,Uni-app-template是一个非常实用和方便的开发工具,它能够帮助开发者更加快速、高效地完成应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

No Silver Bullet

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值