uniapp 安卓开发app如何获取设备唯一标识

在uniapp开发安卓应用时,如何获取设备的唯一标识?需要确保该标识在不同应用中保持一致且不会因应用卸载或系统重置而改变。目前尝试过deviceId和IMEI,但发现部分设备获取不到或权限受限。是否有更可靠的方案或推荐的插件?

2 回复

在uniapp中,可以使用plus.device.uuid获取设备唯一标识。注意:不同厂商设备可能返回不同值,且用户重置设备后会变化。建议结合其他设备信息生成唯一标识。


在 UniApp 中获取 Android 设备的唯一标识,推荐使用 设备 IMEI(国际移动设备识别码)Android ID,但需注意权限和限制。以下是实现方法及代码示例:

1. 使用 IMEI(需权限)

IMEI 是设备的唯一标识,但需要申请 READ_PHONE_STATE 权限。

  • 步骤
    1. manifest.json 中配置权限:
      {
        "permissions": {
          "android": {
            "permissions": ["READ_PHONE_STATE"]
          }
        }
      }
      
    2. 通过原生插件或 uni.getSystemInfo 扩展获取(需自行封装原生插件)。

2. 使用 Android ID(无需敏感权限)

Android ID 是系统生成的唯一标识,但可能因设备重置或系统版本变化而改变。

  • 代码示例(通过 Native.js 调用原生方法):
    // 在 UniApp 页面中执行
    if (plus.os.name === 'Android') {
      const Context = plus.android.importClass('android.content.Context');
      const context = plus.android.runtimeMainActivity();
      const settingsSecure = context.getSystemService(Context.CONTEXT_SETTINGS_SERVICE);
      const androidId = settingsSecure.getString(context.getContentResolver(), 'android_id');
      console.log('Android ID:', androidId);
    }
    

3. 使用 UUID(自定义生成)

结合设备信息生成 UUID,但非硬件级别唯一。

  • 代码示例
    function generateDeviceUUID() {
      const deviceInfo = uni.getSystemInfoSync();
      const key = `${deviceInfo.platform}-${deviceInfo.model}-${deviceInfo.system}`;
      // 使用哈希或自定义算法生成 UUID(示例简化)
      return btoa(key).substring(0, 16);
    }
    const uuid = generateDeviceUUID();
    console.log('Generated UUID:', uuid);
    

注意事项:

  • 权限问题:IMEI 需要用户授权,且从 Android 10 开始限制非系统应用获取。
  • 稳定性:Android ID 可能重置,UUID 依赖设备信息,重装应用或重置设备会变化。
  • 合规性:遵循隐私政策,避免收集不必要的用户数据。

根据需求选择合适方案,推荐优先使用 Android ID 或自定义 UUID 以简化流程。

回到顶部