uni.getSystemInfoSync()返回的model字段需模糊匹配或白名单判断,system字段须用正则提取数字版本号;安卓model多为硬件代号,应结合brand、screenWidth等交叉识别;iOS版本比较必须转数字,不可直接字符串比较。

uni.getSystemInfoSync 返回的 model 和 system 字段怎么用
直接调用 uni.getSystemInfoSync() 就能拿到设备基础信息,但要注意:不同平台返回值差异大,不能只看字段名就认为内容一致。
比如 iOS 设备的 model 是 "iPhone 14" 或 "iPad Air (5th generation)",而安卓多数返回的是厂商定制字符串,像华为可能返回 "ELE-AL00"(对应 Mate 30),小米可能是 "2201122C"(对应 Redmi K50)。system 字段在 iOS 是 "iOS 17.5",安卓则是 "Android 14" —— 注意中间空格和大小写不统一。
- 必须对
model做模糊匹配或白名单判断,别用全等 -
system解析版本号时建议用正则提取数字部分:system.match(/(\d+)\.(\d+)/) - H5 环境下该 API 返回的是浏览器 UA 模拟值,
model恒为"browser",不可用于真实机型识别
安卓端无法准确识别具体型号?这是正常现象
安卓 OEM 厂商普遍屏蔽或篡改系统属性,uni-app 通过 WebView 或原生桥接获取的信息受限于底层能力。你看到的 model 很可能只是硬件代号,不是用户认知里的“小米14”或“vivo X100”。
真正可行的方案是结合多字段交叉判断:
- 先看
brand(如"Xiaomi"、"HUAWEI")缩小范围 - 再用
model匹配已知代号表(需自己维护,例如{"2201122C": "Redmi K50"}) - 必要时补充
deviceOrientation或屏幕尺寸(screenWidth/screenHeight)辅助区分平板/手机 - 不要依赖
platform判断系统——它在安卓微信内嵌 WebView 中常误报为"devtools"
判断 iOS 版本低于 15 怎么写才可靠
直接比字符串会出错,因为 "iOS 9" > "iOS 15"(字符串比较逻辑)。必须提取主版本号再转数字。
const sys = uni.getSystemInfoSync()
const iosVersionMatch = sys.system.match(/iOS (\d+)/)
const iosVersion = iosVersionMatch ? parseInt(iosVersionMatch[1], 10) : 0
if (iosVersion < 15) {
// 执行兼容逻辑
}
注意点:
- 正则要加
i标志以防大小写异常(某些环境返回"ios 16.4") - 安卓设备也会匹配到
system里的数字,所以务必先判断sys.platform === 'ios' - 真机调试时记得清缓存——旧版 SDK 可能缓存了错误的
system值
微信小程序里 uni.getSystemInfo 拿不到完整型号?
是的,微信小程序限制严格:model 在 iOS 上仅返回 "iPhone" 或 "iPad",安卓上基本是空或通用代号(如 "Android")。这是微信主动脱敏的结果,任何 hook 或自定义插件都无法绕过。
如果业务强依赖机型(比如适配某款折叠屏的展开逻辑),只能换思路:
- 用
screenWidth+screenHeight+pixelRatio推算物理尺寸区间 - 监听
uni.onWindowResize捕捉折叠屏展开事件(仅限支持该 API 的新版基础库) - 放弃精确识别,改为按功能可用性检测(例如尝试调用
uni.addPhoneContact看是否报错)
越想拿准型号,越容易掉进平台策略的坑里。实际项目中,80% 的“机型适配”需求靠屏幕尺寸+系统版本+能力检测就能覆盖。



















