uni-app 开发 APP 时,uni.getSystemInfoSync() 是一个常用的好方法
uni.getSystemInfoSync() 是一个重要的 API,本文来说明有哪些重要的用途以及注意事项。
API 介绍和作用
uni.getSystemInfoSync()
是 uni-app 官方封装的用于获取系统信息的一个通用 API,无论是开发 APP 还是小程序,甚至是 H5 都能获取到一些常用的信息。由于国内各家小程序平台以及手机机型太多,本文就重点讨论开发 APP 时,uni.getSystemInfoSync()
应该如何使用。
简单用法:
const systemInfo = uni.getSystemInfoSync();
console.log(systemInfo); // 打印各种系统信息
APP 开发中几个重要且常用的信息
调用这个 API 后,系统信息返回的内容很多,各操作系统、各家小程序、各浏览器对它们的定义也不相同。而在 APP 开发中,下面这几个信息是很重要的。
uniPlatform
这个属性值是字符串 “app”,用于区分是哪个平台。
值 | 生效条件 |
---|---|
app | App |
web | Web |
mp-weixin | 微信小程序 |
mp-alipay | 支付宝小程序 |
mp-baidu | 百度小程序 |
mp-toutiao | 抖音小程序 |
mp-lark | 飞书小程序 |
mp-qq | QQ小程序 |
mp-kuaishou | 快手小程序 |
mp-jd | 京东小程序 |
mp-360 | 360小程序 |
quickapp-webview | 快应用通用(包含联盟、华为) |
quickapp-webview-union | 快应用联盟 |
quickapp-webview-huawei | 快应用华为 |
romName
这个属性值是安卓或 iOS 系统版本号,比如 MIUI、HarmonyOS,不同 rom 的版本号规则不同,比如MIUI
版本号是 V130
,而 HarmonyOS
的版本号是 2.0.0
,这在数据统计和 bug 反馈功能用于定位客户端的手机系统非常重要。
safeArea
这个属性值是全面屏手机的安全区域大小,用于计算和适配 iOS 的刘海屏、安卓手机的挖孔、美人尖屏幕。
参数 | 类型 | 说明 |
---|---|---|
left | Number | 安全区域左上角横坐标 |
right | Number | 安全区域右下角横坐标 |
top | Number | 安全区域左上角纵坐标 |
bottom | Number | 安全区域右下角纵坐标 |
width | Number | 安全区域的宽度,单位逻辑像素 |
height | Number | 安全区域的高度,单位逻辑像素 |
deviceId
这也是一个重要的系统信息,这个属性得到的是一个设备的唯一标识。不过 iOS 属于对用户隐私保护比较严格的平台,很难获取有效的设备唯一标记。
而 Android 也已经改进了用户隐私保护。在稍老的手机上,获取 imei 等隐私信息时需要弹框让用户授权。新的 Android 手机( Android10 以上)已经完全获取不到 imei 了。
所以这个 API 返回的 deviceId ,原理是在本地存储一个随机数。所以安卓手机在下面两种情况,会导致 deviceId 失效:
- 用户卸载了 App;
- 安卓手机在应用详情里清除了 App 数据。
作用一致的异步 API
uni.getSystemInfoSync
是一个同步的 API,另个异步 API uni.getSystemInfo
作用是完全一样的,只是代码写法不一样。
uni.getSystemInfo({
success: function (res) {
console.log(res) // 打印系统信息
}
});
注意事项
uni-app 新旧版本返回的信息会不一样,为了向下兼容也保留了原来的信息内容,为了安全,使用时一般要以最新版的为主。