uniapp 如何获取手机唯一标识
在uniapp开发中,如何获取手机的唯一标识?比如IMEI或设备ID这样的信息。官方文档提到plus.device.uuid,但实际测试在不同平台上结果不一致。是否有跨iOS和Android的可靠方案?需要注意哪些隐私权限问题?求具体代码示例和实现思路。
2 回复
在uni-app中,可以使用plus.device.uuid获取设备唯一标识。注意:iOS和Android的uuid生成规则不同,且可能受系统版本影响。建议配合其他设备信息使用,提高唯一性。
在 UniApp 中,获取手机唯一标识通常使用设备的 IMEI(国际移动设备识别码) 或 UUID(通用唯一识别符)。但由于隐私和安全限制,不同平台有不同支持情况。以下是实现方法:
1. 使用 uni.getSystemInfo 获取设备信息
可获取 deviceId(Android)或 uuid(iOS),但不同平台结果可能不同:
uni.getSystemInfo({
success: (res) => {
console.log('设备信息:', res.deviceId); // Android 设备标识
console.log('UUID:', res.uuid); // iOS 设备标识
}
});
- 注意:
deviceId在部分 Android 设备上可能为空,iOS 的uuid可能随应用重装变化。
2. 使用 plus.device.getInfo(5+ App 原生支持)
仅适用于 App 平台(需在 HBuilderX 中打包):
// 确保在 plus ready 后调用
document.addEventListener('plusready', () => {
plus.device.getInfo({
success: (e) => {
console.log('设备 IMEI:', e.imei); // Android 需权限,iOS 不支持
},
fail: (err) => {
console.error('获取失败:', err);
}
});
});
- 限制:Android 需要
READ_PHONE_STATE权限,iOS 无法获取 IMEI。
3. 生成自定义唯一标识
若无法获取硬件标识,可生成并存储本地 UUID:
function generateUUID() {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
const r = Math.random() * 16 | 0;
const v = c === 'x' ? r : (r & 0x3 | 0x8);
return v.toString(16);
});
}
// 存储到本地,作为设备标识
const uuid = generateUUID();
uni.setStorageSync('deviceUUID', uuid);
注意事项:
- 隐私合规:获取设备标识需用户授权,并遵循 GDPR、个人信息保护法等法规。
- 平台差异:
- Android:可能需动态申请
READ_PHONE_STATE权限。 - iOS:严格限制硬件标识获取,推荐使用
uuid或生成 UUID。
- Android:可能需动态申请
- 微信小程序:不支持直接获取设备标识,需通过微信的
openid或unionid间接标识用户。
建议根据实际平台和需求选择方案,优先考虑生成自定义 UUID 并持久化存储。

