uni.getsysteminfosync()是获取设备基础信息的首选方法,它同步返回完整对象,避免异步问题;model字段反映真实硬件型号但跨平台差异大,system版本号需正则提取不可字符串比较。

直接用 uni.getSystemInfoSync() 拿基础信息,别绕弯
绝大多数场景下,uni.getSystemInfoSync() 就是你要的答案——它同步返回完整对象,不等回调、不处理 Promise,避免了 uni.getSystemInfo() 异步调用中常见的 res 为 undefined 问题。别先调 uni.getDeviceInfo(),它只返回 platform 和极简字段,压根不含 model 或 system。
model 字段怎么识别真实手机型号
model 是唯一能反映设备硬件身份的字段,但各平台填充逻辑完全不同,不能直接字符串全等匹配:
- iOS 返回的是代号型字符串,如
"iPhone15,2"或用户可见名"iPhone 15 Pro"(取决于系统版本和 SDK) - 安卓多数返回 OEM 自定义字符串,比如华为
"ELE-AL00"、小米"2201122C",不是“Mate 60”或“K50”这种营销名 - H5 环境下
model恒为"browser",完全不可用于机型识别 - 真机调试才可靠;HBuilderX 模拟器、浏览器预览返回的都是泛化值,拿来做判断会出错
system 字段提取版本号必须用正则,别直接比字符串
system 值格式不统一:"iOS 17.5"、"Android 14"、甚至小写 "ios 16.4" 都可能出现。直接 res.system > "iOS 15" 会因字符串比较规则出错("iOS 9" > "iOS 15" 为 true)。
正确做法是先判断平台,再提取数字:
const sys = uni.getSystemInfoSync();
if (sys.platform === 'ios') {
const match = sys.system.match(/iOS\s+(\d+)/i);
const version = match ? parseInt(match[1], 10) : 0;
if (version
- 正则加
i标志防大小写异常 - 安卓端也会匹配到数字,所以务必先用
sys.platform === 'ios'做平台隔离 - 不要依赖
platform判断系统——微信内嵌 WebView 中它常误报为"devtools"
需要精确识别?得进 UTS 层,uni.getSystemInfoSync() 不够用
当项目要求区分芯片(如 A17)、Mac 设备类型(M系列)、或读取原始 Build.MODEL(如 "SM-S918B" vs "SM-S918U"),uni.getSystemInfoSync() 的 model 已被规范化,无法满足。
此时必须用 UTS 写原生调用:
- Android:导入
android.os.Build,读Build.MODEL或Build.DEVICE - iOS:用
UTSiOS.UIDevice.currentDevice.model得到"iPhone"/"iPad",再结合NSProcessInfo.processInfo.environment["SIMULATOR_DEVICE_NAME"]辅助判断模拟器 - 鸿蒙:检查
osHarmonySDKAPIVersion >= 14后调@ohos.deviceInfo - 注意:UTS 代码 H5 平台不支持,必须加平台判断或 fallback
真正麻烦的不是怎么写,而是维护安卓代号白名单和 iOS 机型映射表——这部分没法靠 API 自动解决,得自己收口、定期更新。











