HarmonyOS(54) 获取设备标志符UUID和ODID

UUID和ODID简介

在APP开发过程中,经常需要一些唯一标识符作为留痕使用,HaymonyOS也提供了UUID和ODID来满足类似的工作。

  • UUID:应用卸载重新安装时会重新生成UUID
  • ODID:手机恢复出厂设置或者同一设备上同一个开发者的应用全部卸载后重新安装时会重新生成。

UUID生成规则

调用util.generateRandomUUID方法生成,该方法使用加密安全随机数生成器生成随机的RFC 4122版本4的string类型UUID。调用此函数会生成两个UUID,其中一个UUID进行缓存,一个UUID用于输出,首次调用时,参数是true或false无区别;下次调用时,如果参数是true,依旧缓存上次UUID,并生成新的UUID;如果参数是false,将生成两个UUID,其中一个UUID进行缓存,一个UUID进行输出

ODID生成规则

  • 同一设备上运行的同一个开发者的应用,ODID相同。

  • 同一个设备上不同开发者的应用,ODID不同。

  • 不同设备上同一个开发者的应用,ODID不同。

  • 不同设备上不同开发者的应用,ODID不同。

相关代码

  import { deviceInfo } from '@kit.BasicServicesKit';
  let odid: string = deviceInfo.ODID;
  let uuid:string =  util.generateRandomUUID(true);
  console.info('the value of the deviceInfo odid is :' + odid);
  console.info('the value of the deviceInfo uuid is :' + uuid:string );

输入log如下:

I     the value of the deviceInfo odid is :c1f970f6-123d-84bf-d39a-c93117b2b9c4
I     the value of the deviceInfo uuid is :b267cef1-03ed-4d9a-847f-71a2c3a932c9

使用场景举例

app都有收集crash的功能,可以帮助修复生产问题。在这里我们就可以把ODID设置给HarmonyOS的bug收集插件,代码如下:

 APMS.getInstance().setUserIdentifier(deviceInfo.ODID);

关于crash的收集,详见HarmonyOS(37) APP crash崩溃日志收集插件@hw-agconnect使用指南

参考资料

@ohos.deviceInfo (设备信息)
util.generateRandomUUID
HarmonyOS(37) APP crash崩溃日志收集插件@hw-agconnect使用指南

### 如何在鸿蒙虚拟机中查看UUID鸿蒙虚拟机环境中,可以通过多种方式来获取设备的唯一标识符(UUID)。以下是几种常见的方法: #### 方法一:通过命令行工具`uuidgen` 如果系统已经安装了`util-linux`包,则可以使用`uuidgen`命令生成一个新的UUID。此命令通常用于创建随机或时间戳为基础的UUID。 ```bash uuidgen ``` 该命令会返回一个类似于以下格式的新UUID[^1]: ``` 123e4567-e89b-12d3-a456-426614174000 ``` 需要注意的是,这个方法生成的是新的UUID而不是当前系统的固有UUID。 --- #### 方法二:读取文件中的UUID信息 某些情况下,UUID可能存储于特定的配置文件中。例如,在Linux环境下,磁盘分区或者网络接口可能会分配固定的UUID。这些UUID可通过如下命令查询: 对于磁盘分区: ```bash lsblk -o NAME,UUID ``` 对于网络接口: ```bash cat /sys/class/net/eth0/address ``` 上述命令适用于部分场景下的硬件绑定型UUID检索[^2]。 --- #### 方法三:编程实现UUID获取 假如需要通过程序代码的方式获取UUID,可以参考以下示例代码片段。这里以TypeScript为例展示一种基于类定义的方式来封装UUID逻辑: ```typescript class Device { private static uuid: string; public static getUUID(): string { if (!this.uuid) { this.uuid = 'your-generated-or-stored-uuid'; // 替换为实际生成或读取逻辑 } return this.uuid; } } console.log(Device.getUUID()); ``` 以上代码展示了如何利用静态成员变量保存并提供访问全局唯一的UUID实例[^3]。 另外,也可以采用更简洁的设计模式直接暴露实例化对象作为自身的引用点: ```typescript class UUIDProvider { getInstance(): UUIDProvider { return this; } generateUUID(): string { return 'generated-unique-id'; } } const provider = new UUIDProvider().getInstance(); console.log(provider.generateUUID()); ``` 这种方法强调了单例设计原则的应用价值[^4]。 --- ### 注意事项 由于不同版本的操作系统可能存在差异,因此具体操作前需确认所使用的环境支持哪些功能特性以及是否存在权限限制等问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

郭梧悠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值