• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 管理群组关键资产(ArkTS)
2
3<!--Kit: Asset Store Kit-->
4<!--Subsystem: Security-->
5<!--Owner: @JeremyXu-->
6<!--Designer: @skye_you-->
7<!--Tester: @nacyli-->
8<!--Adviser: @zengyawen-->
9
10以下为管理群组关键资产使用示例,请先查看开发指导:
11
12- [新增关键资产(ArkTS)](asset-js-add.md)
13- [删除关键资产(ArkTS)](asset-js-remove.md)
14- [更新关键资产(ArkTS)](asset-js-update.md)
15- [查询关键资产(ArkTS)](asset-js-query.md)
16
17## 前置条件
18
19在应用配置文件app.json5中,配置群组ID:demo_group_id。
20
21```json
22{
23  "app": {
24    // 其他配置项此处省略。
25    "assetAccessGroups": [
26      "demo_group_id"
27    ]
28  }
29}
30```
31
32## 新增群组关键资产
33
34在群组中新增密码为demo_pwd、别名为demo_alias、附属信息为demo_label的关键资产。该关键资产在用户首次解锁设备后可被访问。
35
36```typescript
37import { asset } from '@kit.AssetStoreKit';
38import { util } from '@kit.ArkTS';
39import { BusinessError } from '@kit.BasicServicesKit';
40
41function stringToArray(str: string): Uint8Array {
42  let textEncoder = new util.TextEncoder();
43  return textEncoder.encodeInto(str);
44}
45
46let attr: asset.AssetMap = new Map();
47attr.set(asset.Tag.SECRET, stringToArray('demo_pwd'));
48attr.set(asset.Tag.ALIAS, stringToArray('demo_alias'));
49attr.set(asset.Tag.ACCESSIBILITY, asset.Accessibility.DEVICE_FIRST_UNLOCKED);
50attr.set(asset.Tag.DATA_LABEL_NORMAL_1, stringToArray('demo_label'));
51attr.set(asset.Tag.GROUP_ID, stringToArray('demo_group_id'));
52try {
53  asset.add(attr).then(() => {
54    console.info(`Succeeded in adding Asset to the group.`);
55  }).catch((err: BusinessError) => {
56    console.error(`Failed to add Asset to the group. Code is ${err.code}, message is ${err.message}`);
57  })
58} catch (err) {
59  console.error(`Failed to add Asset to the group. Code is ${err?.code}, message is ${err?.message}`);
60}
61```
62
63## 删除群组关键资产
64
65在群组中删除别名是demo_alias的关键资产。
66
67```typescript
68import { asset } from '@kit.AssetStoreKit';
69import { util } from '@kit.ArkTS';
70import { BusinessError } from '@kit.BasicServicesKit';
71
72function stringToArray(str: string): Uint8Array {
73  let textEncoder = new util.TextEncoder();
74  return textEncoder.encodeInto(str);
75}
76
77let query: asset.AssetMap = new Map();
78query.set(asset.Tag.ALIAS, stringToArray('demo_alias')); // 此处指定别名删除单条群组关键资产,也可不指定别名删除多条群组关键资产
79query.set(asset.Tag.GROUP_ID, stringToArray('demo_group_id'));
80try {
81  asset.remove(query).then(() => {
82    console.info(`Succeeded removing in Asset from the group.`);
83  }).catch((err: BusinessError) => {
84    console.error(`Failed to remove Asset from the group. Code is ${err.code}, message is ${err.message}`);
85  });
86} catch (err) {
87  console.error(`Failed to remove Asset from the group. Code is ${err?.code}, message is ${err?.message}`);
88}
89```
90
91## 更新群组关键资产
92
93在群组中更新别名为demo_alias的关键资产,明文更新为demo_pwd_new,附属属性更新为demo_label_new。
94
95```typescript
96import { asset } from '@kit.AssetStoreKit';
97import { util } from '@kit.ArkTS';
98import { BusinessError } from '@kit.BasicServicesKit';
99
100function stringToArray(str: string): Uint8Array {
101  let textEncoder = new util.TextEncoder();
102  return textEncoder.encodeInto(str);
103}
104
105let query: asset.AssetMap = new Map();
106query.set(asset.Tag.ALIAS, stringToArray('demo_alias'));
107query.set(asset.Tag.GROUP_ID, stringToArray('demo_group_id'));
108let attrsToUpdate: asset.AssetMap = new Map();
109attrsToUpdate.set(asset.Tag.SECRET, stringToArray('demo_pwd_new'));
110attrsToUpdate.set(asset.Tag.DATA_LABEL_NORMAL_1, stringToArray('demo_label_new'));
111try {
112  asset.update(query, attrsToUpdate).then(() => {
113    console.info(`Succeeded in updating Asset in the group.`);
114  }).catch((err: BusinessError) => {
115    console.error(`Failed to update Asset in the group. Code is ${err.code}, message is ${err.message}`);
116  });
117} catch (err) {
118  console.error(`Failed to update Asset in the group. Code is ${err?.code}, message is ${err?.message}`);
119}
120```
121
122## 查询单条群组关键资产明文
123
124在群组中查询别名为demo_alias的关键资产明文。
125
126```typescript
127import { asset } from '@kit.AssetStoreKit';
128import { util } from '@kit.ArkTS';
129import { BusinessError } from '@kit.BasicServicesKit';
130
131function stringToArray(str: string): Uint8Array {
132  let textEncoder = new util.TextEncoder();
133  return textEncoder.encodeInto(str);
134}
135
136function arrayToString(arr: Uint8Array): string {
137  let textDecoder = util.TextDecoder.create("utf-8", { ignoreBOM: true });
138  let str = textDecoder.decodeToString(arr, { stream: false })
139  return str;
140}
141
142let query: asset.AssetMap = new Map();
143query.set(asset.Tag.ALIAS, stringToArray('demo_alias')); // 指定了群组关键资产别名,最多查询到一条满足条件的群组关键资产。
144query.set(asset.Tag.RETURN_TYPE, asset.ReturnType.ALL); // 此处表示需要返回群组关键资产的所有信息,即属性+明文。
145query.set(asset.Tag.GROUP_ID, stringToArray('demo_group_id'));
146try {
147  asset.query(query).then((res: Array<asset.AssetMap>) => {
148    for (let i = 0; i < res.length; i++) {
149      // 解析secret。
150      let secret: Uint8Array = res[i].get(asset.Tag.SECRET) as Uint8Array;
151      // 将Uint8Array转换为string类型。
152      let secretStr: string = arrayToString(secret);
153    }
154  }).catch((err: BusinessError) => {
155    console.error(`Failed to query Asset. Code is ${err.code}, message is ${err.message}`);
156  });
157} catch (err) {
158  console.error(`Failed to query Asset. Code is ${err?.code}, message is ${err?.message}`);
159}
160```
161
162## 查询单条群组关键资产属性
163
164在群组中查询别名为demo_alias的关键资产属性。
165
166```typescript
167import { asset } from '@kit.AssetStoreKit';
168import { util } from '@kit.ArkTS';
169import { BusinessError } from '@kit.BasicServicesKit';
170
171function stringToArray(str: string): Uint8Array {
172  let textEncoder = new util.TextEncoder();
173  return textEncoder.encodeInto(str);
174}
175
176let query: asset.AssetMap = new Map();
177query.set(asset.Tag.ALIAS, stringToArray('demo_alias')); // 指定了群组关键资产别名,最多查询到一条满足条件的群组关键资产。
178query.set(asset.Tag.RETURN_TYPE, asset.ReturnType.ATTRIBUTES); // 此处表示仅返回群组关键资产属性,不包含群组关键资产明文。
179query.set(asset.Tag.GROUP_ID, stringToArray('demo_group_id'));
180try {
181  asset.query(query).then((res: Array<asset.AssetMap>) => {
182    for (let i = 0; i < res.length; i++) {
183      // 解析属性。
184      let accessibility: number = res[i].get(asset.Tag.ACCESSIBILITY) as number;
185      console.info(`Succeeded in getting accessibility, which is: ${accessibility}.`);
186    }
187  }).catch((err: BusinessError) => {
188    console.error(`Failed to query Asset from the group. Code is ${err.code}, message is ${err.message}`);
189  });
190} catch (err) {
191  console.error(`Failed to query Asset from the group. Code is ${err?.code}, message is ${err?.message}`);
192}
193```
194