场景描述
HarmonyOS只提供了OAID和AAID,OAID需要权限涉及用户不同意和重置问题,AAID卸载应用或清除数据均会变化。如果需要保持应用在卸载时保证设备ID的持久化,则可用Asset Store Kit(关键资产存储开发服务)包含了关键资产存储服务开放的接口能力集合,提供了用户短敏感数据的安全存储及管理能力。其中,短敏感数据可以是密码类(账号/密码)、Token类(应用凭据)、其他关键明文(如银行卡号)等长度较短的用户敏感数据。
方案描述
场景一
我们在登录账号之后,卸载应用,再重装应用,我们的账号以及ID依旧存在。
效果图
方案
1.在module.json5配置权限ohos.permission.STORE_PERSISTENT_DATA
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