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 加强了对设备标识符的访问限制,以下标识符可能无法获取或变得不唯一:
IMEI
、Serial 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 并存储在本地(如 localStorage
或 SharedPreferences
),作为设备的唯一标识符。
示例代码:
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
支持使用原生插件来获取设备信息。你可以使用以下插件:
- uni-app 官方原生插件
- 第三方插件如
cordova-plugin-device
或cordova-plugin-unique-device-id
。
安装插件:
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);