uni-app android 获取设备ID不唯一

uni-app android 获取设备ID不唯一

开发环境 版本号 项目创建方式
uniapp/App HBuilderX
## 示例代码:


uni.getSystemInfoSync()  

操作步骤:

uni.getSystemInfoSync()


## 预期结果:


每次执行获取的都是同一个值

实际结果:

出现获取不一样的结果


## bug描述:


uni.getSystemInfoSync()  

通过此方法获取的 deviceId 出现同设备不同值的情况  

864267041746652,864267041746645  
358308090248787,358309090248785  
862762042954711,862762042954703  
354261092203868,354262092203866  
357949104877482,357949104877490  

取出的设备ID 出现上面的结果  
3 回复

你获取的是里面的哪个字段。
移动端如果想要获取与设备绑定的id,两个建议。
一个是oaid, 另外也可以采用楼上说的 push id.

uni-app 中,获取 Android 设备的唯一标识符(如设备 ID)时,可能会遇到不唯一的情况。这通常是由于 Android 系统的限制或隐私政策的变更导致的。以下是可能的原因及解决方案:


1. Android 10 及以上版本的隐私限制

从 Android 10(API 29)开始,Google 加强了对设备标识符的访问限制,以下标识符可能无法获取或变得不唯一:

  • IMEISerial Number 等硬件标识符。
  • ANDROID_ID 可能在不同应用或设备上重复。

解决方案:

  • 使用 Settings.Secure.ANDROID_ID,它是为每个应用和设备组合生成的唯一标识符。
    plus.device.getInfo({
      success: function (res) {
        console.log('ANDROID_ID:', res.androidId);
      },
      fail: function (err) {
        console.error('获取设备信息失败:', err);
      }
    });
  • 如果 ANDROID_ID 不满足需求,可以结合其他信息(如 UUID、设备型号等)生成一个唯一标识符。

2. 使用 UUID 作为替代方案

如果设备标识符无法获取或不唯一,可以生成一个 UUID 并存储在本地(如 localStorageSharedPreferences),作为设备的唯一标识符。

示例代码:

function generateUUID() {
  return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
    const r = (Math.random() * 16) | 0;
    const v = c === 'x' ? r : (r & 0x3) | 0x8;
    return v.toString(16);
  });
}

let deviceId = uni.getStorageSync('deviceId');
if (!deviceId) {
  deviceId = generateUUID();
  uni.setStorageSync('deviceId', deviceId);
}
console.log('设备唯一标识符:', deviceId);

3. 使用第三方插件

uni-app 支持使用原生插件来获取设备信息。你可以使用以下插件:

安装插件:

npm install cordova-plugin-device

使用插件:

document.addEventListener('deviceready', function () {
  const deviceId = device.uuid;
  console.log('设备唯一标识符:', deviceId);
}, false);

4. 结合多种信息生成唯一标识符

如果单一标识符不可靠,可以结合以下信息生成一个唯一标识符:

  • ANDROID_ID
  • 设备型号(plus.device.model
  • 系统版本(plus.device.version
  • 应用包名(plus.runtime.appid

示例代码:

const androidId = plus.device.getInfo().androidId;
const model = plus.device.model;
const version = plus.device.version;
const appId = plus.runtime.appid;

const uniqueId = `${androidId}-${model}-${version}-${appId}`;
console.log('生成的唯一标识符:', uniqueId);
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!