HarmonyOS 是否有关于Asset敏感资产存储的示例?

如题:HarmonyOS 是否有关于Asset敏感资产存储的示例?

阅读 511
1 个回答

示例参考如下:

import { asset } from '@kit.AssetStoreKit';
import util from '@ohos.util';

function stringToArray(str: string): Uint8Array {
  let textEncoder = new util.TextEncoder();
  return textEncoder.encodeInto(str);
}

function setAttr() {
  let attr: asset.AssetMap = new Map();
  attr.set(asset.Tag.SECRET, stringToArray('demo_pwd'));
  attr.set(asset.Tag.ALIAS, stringToArray('demo_alias'));
  attr.set(asset.Tag.ACCESSIBILITY, asset.Accessibility.DEVICE_FIRST_UNLOCKED);
  attr.set(asset.Tag.DATA_LABEL_NORMAL_1, stringToArray('demo_label'));
  //attr.set(asset.Tag.DATA_LABEL_CRITICAL_1,stringToArray('value1'))
  try {
    asset.add(attr).then(() => {
      console.info(`Asset added successfully.`);
    }).catch(() => {
      console.error(`Failed to add Asset.`);
    })
  } catch (error) {
    console.error(`Failed to add Asset.`);
  }
}

function arrayToString(arr: Uint8Array): string {
  let textDecoder = util.TextDecoder.create("utf-8", { ignoreBOM: true });
  let str = textDecoder.decodeWithStream(arr, { stream: false })
  return str;
}

function getAttr() {
  let query: asset.AssetMap = new Map();
  query.set(asset.Tag.ALIAS, stringToArray('demo_alias')); // 指定了关键资产别名,最多查询到一条满足条件的关键资产
  query.set(asset.Tag.RETURN_TYPE, asset.ReturnType.ALL); // 此处表示需要返回关键资产的所有信息,即属性+明文
  //query.set(asset.Tag.RETURN_TYPE, asset.ReturnType.ATTRIBUTES);  // 此处表示需要返回关键资产的所有信息,即属性
  try {
    asset.query(query).then((res: Array<asset.AssetMap>) => {
      console.info('获取的资产长度为:' + res.length)
      for (let i = 0; i < res.length; i++) {
        // 解析密钥
        let secret: Uint8Array = res[i].get(asset.Tag.SECRET) as Uint8Array;
        // 将 uint8array 解析为字符串
        let secretStr: string = arrayToString(secret);
        console.info('资产信息为:' + secretStr)
      }
    }).catch(() => {
      console.error(`Failed to query Asset.`);
    });
  } catch (error) {
    console.error(`Failed to query Asset.`);
  }
}

@Entry
@Component
struct AttrTest {
  build() {
    Column() {
      Button('设置资产').onClick((event: ClickEvent) => {
        setAttr()
      })
        .height(100)
        .width('100%')
      Button('获取资产').onClick((event: ClickEvent) => {
        getAttr()
      })
        .height(100)
        .width('100%')
    }
  }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进