鸿蒙HarmonyOS开发 (API 12 Beta5版)基于原生能力的设备唯一ID方案

场景描述

HarmonyOS只提供了OAID和AAID,OAID需要权限涉及用户不同意和重置问题,AAID卸载应用或清除数据均会变化。如果需要保持应用在卸载时保证设备ID的持久化,则可用Asset Store Kit(关键资产存储开发服务)包含了关键资产存储服务开放的接口能力集合,提供了用户短敏感数据的安全存储及管理能力。其中,短敏感数据可以是密码类(账号/密码)、Token类(应用凭据)、其他关键明文(如银行卡号)等长度较短的用户敏感数据。

方案描述

场景一

我们在登录账号之后,卸载应用,再重装应用,我们的账号以及ID依旧存在。

效果图

方案

1.在module.json5配置权限ohos.permission.STORE_PERSISTENT_DATA

cke_15305.png

2.在调用add接口时,请设置一下IS_PERSISTENT这个属性为true则可实现卸载时保留数据attr.set(asset.Tag.IS_PERSISTENT, true)。3.将账号密码保存到asset中,读取的时候查询数据库中是否含有ID和Alias,如果没有说明是新设备则弹窗进行信任,信任成功时将id存入进去,如果已经登录过就不用进行弹窗信任,直接展示存入的容。卸载应用,重新安装,我们可以重新登入并且可以看到原来存储的数据且不会弹窗,说明账号以及id都存在,实现了持久化存储。

核心代码

async aboutToAppear(): Promise<void> {

  let query: asset.AssetMap = new Map();

  query.set(asset.Tag.RETURN_TYPE, asset.ReturnType.ATTRIBUTES); //返回关键资产属性,不含关键资产明文。

  try {

  let res = asset.querySync(query)

  let alias = res[0].get(asset.Tag.ALIAS) as Uint8Array //查询出存储的别名alias

  let aliasStr = arrayToString(alias)

  let query2: asset.AssetMap = new Map();

  query2.set(asset.Tag.ALIAS, stringToArray(aliasStr))

  query2.set(asset.Tag.RETURN_TYPE, asset.ReturnType.ALL) //返回关键资产明文及属性

  let res2 = asset.querySync(query2)

  for (let
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值