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。
  • 微信小程序:不支持直接获取设备标识,需通过微信的 openidunionid 间接标识用户。

建议根据实际平台和需求选择方案,优先考虑生成自定义 UUID 并持久化存储。

回到顶部