uni-app 三星、部分小米手机设备id获取不对
uni-app 三星、部分小米手机设备id获取不对
示例代码:
{
"errMsg": "getSystemInfoSync:ok",
"brand": "samsung",
"model": "SM-G970U1",
"pixelRatio": 3,
"screenWidth": 360,
"screenHeight": 712,
"windowWidth": 360,
"windowHeight": 712,
"statusBarHeight": 39,
"language": "zh-CN",
"system": "10",
"version": "1.9.9.80788",
"fontSizeSetting": "",
"platform": "android",
"SDKVersion": "",
"windowTop": 0,
"windowBottom": 0,
"safeArea": {
"left": 0,
"right": 360,
"top": 39,
"bottom": 712,
"width": 360,
"height": 673
},
"safeAreaInsets": {
"top": 39,
"right": 0,
"bottom": 0,
"left": 0
},
"deviceId": "||020000000000|5a679ca9c43dfdd1|040ed427b3714ab183d2fd3d67a31462|"
}
操作步骤:
const res = uni.getSystemInfoSync();
console.log("客户端信息={}",res)
console.log("设备id={}",res.deviceId)
// 设备id
uni.setStorageSync("deviceId", res.deviceId)
预期结果:
获取正常的32位设备id
实际结果:
获取超出32位的字符串:
||020000000000|53c15b920bb26b0c|311f841c4e4941d1b77c809efb8181bf|
||020000000000|f85b1cf4ec16303e|493e1dbd33c24786bc4b5ddf0e710765|
|null|020000000000|f85b1cf4ec16303e|493e1dbd33c24786bc4b5ddf0e710765|
|||c289c23f0a5f5509|df49eb0960b741af990f461a8177348f|
bug描述:
我这边获取设备id,目前直接使用了官方提供的api:uni.getSystemInfoSync().deviceId获取, 使用:此方法在main.js入口文件执行,获取成功后使用uni.setStorageSync去持久化, 部分型号出现了以下情况,andorid机,
||020000000000|f85b1cf4ec16303e|493e1dbd33c24786bc4b5ddf0e710765|
请问下什么情况下获取值是这样?如果出现这种情况,需要自己截取吗?
更多关于uni-app 三星、部分小米手机设备id获取不对的实战教程也可以访问 https://www.itying.com/category-93-b0.html
基座首次安装是这么一长串,然后你再次启动基座,就会正常,我遇见的是这个问题,不知道你遇见的是不是同样的问题,
更多关于uni-app 三星、部分小米手机设备id获取不对的实战教程也可以访问 https://www.itying.com/category-93-b0.html
是的,这种情况我也遇到过;不过不仅仅是基座包,打的正式包我也遇到了这种情况…,再次打包有可能也能解决,但也是概率问题…
回复 1***@qq.com: android设备我目前不管正式包还是基座包,全是这样的,
应该是个bug,官方的没有回复,目前还没解决
暂时没有解决,等官方修复吧,不敢用现在
我也遇到这样问题
plus.device.getInfo({ success: (e) => { console.log(e.uuid); this.$Toast.toast(e.uuid, 2) },
在三星和部分小米手机上获取到异常格式的deviceId,这是由于Android系统底层设备标识符机制差异导致的。
uni.getSystemInfoSync().deviceId 底层调用的是Android系统的ANDROID_ID,不同厂商对此标识符的实现存在差异。你看到的格式包含多个竖线分隔的字段,这是某些厂商自定义的设备标识格式。
对于这种异常格式,建议进行规范化处理:
let deviceId = uni.getSystemInfoSync().deviceId;
// 处理异常格式
if (deviceId && deviceId.includes('|')) {
const parts = deviceId.split('|').filter(part => part && part !== 'null' && part !== '020000000000');
if (parts.length > 0) {
// 取最后一个有效部分作为设备ID
deviceId = parts[parts.length - 1];
}
}
// 验证是否为32位十六进制字符串
if (deviceId && /^[a-fA-F0-9]{32}$/.test(deviceId)) {
uni.setStorageSync("deviceId", deviceId);
} else {
// 备用方案:生成随机设备ID
deviceId = this.generateFallbackDeviceId();
uni.setStorageSync("deviceId", deviceId);
}


