首页 APP开发 正文内容

uni-app 开发 APP 时,uni.getSystemInfoSync() 是一个常用的好方法

2023年10月01日 , , 277

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”,用于区分是哪个平台。

生效条件
appApp
webWeb
mp-weixin微信小程序
mp-alipay支付宝小程序
mp-baidu百度小程序
mp-toutiao抖音小程序
mp-lark飞书小程序
mp-qqQQ小程序
mp-kuaishou快手小程序
mp-jd京东小程序
mp-360360小程序
quickapp-webview快应用通用(包含联盟、华为)
quickapp-webview-union快应用联盟
quickapp-webview-huawei快应用华为
uniPlatform 返回值枚举

romName

这个属性值是安卓或 iOS 系统版本号,比如 MIUI、HarmonyOS,不同 rom 的版本号规则不同,比如MIUI版本号是 V130,而 HarmonyOS 的版本号是 2.0.0,这在数据统计和 bug 反馈功能用于定位客户端的手机系统非常重要。

safeArea

这个属性值是全面屏手机的安全区域大小,用于计算和适配 iOS 的刘海屏、安卓手机的挖孔、美人尖屏幕。

参数类型说明
leftNumber安全区域左上角横坐标
rightNumber安全区域右下角横坐标
topNumber安全区域左上角纵坐标
bottomNumber安全区域右下角纵坐标
widthNumber安全区域的宽度,单位逻辑像素
heightNumber安全区域的高度,单位逻辑像素
safeArea 返回值结构

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 新旧版本返回的信息会不一样,为了向下兼容也保留了原来的信息内容,为了安全,使用时一般要以最新版的为主。