【关键字】
存储 / 卸载 / 重装 / 数据查询
【问题描述】
使用关键资产存储开发服务后,应用卸载重装,存储的数据无法查询。
{ // 允许应用存储持久化的数据
"name": "ohos.permission.STORE_PERSISTENT_DATA",
"reason": "$string:app_name",
"usedScene": {
"abilities": [
"FormAbility"
],
"when":"always"
}
}
let query: asset.AssetMap = new Map();
query.set(asset.Tag.ALIAS, stringToArray('demo_alias')); // 指定了关键资产别名
query.set(asset.Tag.RETURN_TYPE, asset.ReturnType.ALL); // 此处表示需要返回关键资产的所有信息
try {
asset.query(query).then((res: Array<asset.AssetMap>) => {
for (let i = 0; i < res.length; i++) {
// parse the secret.
let secret: Uint8Array = res[i].get(asset.Tag.SECRET) as Uint8Array;
}
}).catch (() => {
console.error(`Failed to query Asset.`);
});
} catch (error) {
console.error(`Failed to query Asset.`);
}
【解决方案】
添加资产时,需要设置 attr.set(asset.Tag.IS_PERSISTENT,true),卸载重装才不会清除,请参考如下代码:
private saveDeviceId(OAID: string) {
let attr: asset.AssetMap = new Map();
attr.set(asset.Tag.SECRET, this.stringToArray(OAID));
attr.set(asset.Tag.ALIAS, this.stringToArray(this.assetAlias));
attr.set(asset.Tag.IS_PERSISTENT,true)
try {
asset.add(attr).then(() => {
console.info(`aaa---Asset added successfully.`)
}).catch((error:BusinessError) => {
console.error(`aaa---Failed to add Asset.1` + error.message);
})
} catch (error) {
console.error(`aaa---Failed to add Asset.2`);
}
}