
AI
在HarmonyOS NEXT里,若要获取设备ID,存在三种方式。第一种是UDID,其获取方式为deviceinfo.udid,不过这种方式仅限系统应用使用。第二种是A
AID,通过a
AId.getA
AID()来获取,但有个情况需要注意,在卸载APP或者将设备恢复出厂设置之后,它是会发生变化的。第三种是O
AID,使用identifier.getO
AID来获取。在同一台设备上,不同的App获取到的O
AID值是相同的。但是如果用户关闭了跟踪开关,那么这个应用就只能获取到全是0的O
AID。并且在使用这个API的时候,需要去申请ohos.permission.APP_TRACKING_CONSENT这个广告跟踪权限,这会触发动态授权弹框,向用户请求授权,只有在用户授权成功之后才能够获取。从这三种方法来看,我们能够发现,想要实现既不需要申请动态权限,又能在App卸载后保持不变的设备ID是做不到的。不过,天无绝人之路,有一个巧妙的办法能够达成这个目的。下面就来说说具体的办法。在HarmonyOS NEXT当中,存在一个名为@ohos.security.asset(关键资产存储服务)的API,这个API和
IOS中的Keych
AIn services类似。它有一个特殊属性IS_PERSISTENT,这个特性能够做到在应用卸载的时候保留关键资产。利用这个特性,我们可以随机生成一个32位的uuid,然后把它存储到ohos.security.asset之中。首先,在module.
JSon5里的requestPermissions当中添加ohos.permission.STORE_PERSISTENT_DATA权限,这里只需要声明就可以了,不需要进行动态申请。其次,如果觉得把上述源码集成到项目里比较麻烦的话,还可以采用远程依赖的方式引入,通过ohpm安装utilcode库来使用。