• 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新增密码demo_pwd(别名demo_alias),附属信息为demo_label,支持同步的关键资产。
13
14```typescript
15import { asset } from '@kit.AssetStoreKit';
16import { util } from '@kit.ArkTS';
17import { BusinessError } from '@kit.BasicServicesKit';
18
19function stringToArray(str: string): Uint8Array {
20  let textEncoder = new util.TextEncoder();
21  return textEncoder.encodeInto(str);
22}
23
24let attr: asset.AssetMap = new Map();
25attr.set(asset.Tag.SECRET, stringToArray('demo_pwd'));
26attr.set(asset.Tag.ALIAS, stringToArray('demo_alias'));
27attr.set(asset.Tag.DATA_LABEL_NORMAL_1, stringToArray('demo_label'));
28attr.set(asset.Tag.SYNC_TYPE, asset.SyncType.TRUSTED_DEVICE); // 需指定在可信设备间同步(如新旧设备间克隆)。
29
30try {
31  asset.add(attr).then(() => {
32    console.info(`Succeeded in adding Asset with sync.`);
33  }).catch((err: BusinessError) => {
34    console.error(`Failed to add Asset with sync. Code is ${err.code}, message is ${err.message}`);
35  })
36} catch (err) {
37  console.error(`Failed to add Asset with sync. Code is ${err?.code}, message is ${err?.message}`);
38}
39```
40
41## 接入备份恢复扩展能力
42
43为触发应用数据备份恢复,需要[应用接入数据备份恢复](../../file-management/app-file-backup-extension.md)。
44
45## 查询关键资产同步结果
46
47### 接口介绍
48
49通过API文档查看查询关键资产同步结果接口[asset.querySyncResult](../../reference/apis-asset-store-kit/js-apis-asset.md#assetquerysyncresult20)。
50
51在查询关键资产同步结果时,关键资产属性的内容(AssetMap)参数如下表所示。
52
53| 属性名称(Tag)        | 属性内容(Value)                                             | 是否可选  | 说明                                                         |
54| --------------------- | ------------------------------------------------------------ | -------- | ------------------------------------------------------------ |
55| REQUIRE_ATTR_ENCRYPTED<sup>14+</sup> | 类型为boolean。 | 是 | 是否查询业务自定义附属信息被加密的关键资产同步结果。true表示查询业务自定义附属信息加密存储的关键资产同步结果,false表示查询业务自定义附属信息不加密存储的关键资产同步结果。默认值为false。|
56| GROUP_ID<sup>18+</sup> | 类型为Uint8Array,长度为7-127字节。 | 是 | 待查询的关键资产所属群组,默认查询不属于任何群组的关键资产同步结果。|
57
58### 代码示例
59
60```typescript
61import { asset } from '@kit.AssetStoreKit';
62import { BusinessError } from '@kit.BasicServicesKit';
63
64let query: asset.AssetMap = new Map();
65asset.querySyncResult(query).then((res: asset.SyncResult) => {
66  console.info(`Succeeded in querying sync result: ${JSON.stringify(res)}`);
67}).catch((err: BusinessError) => {
68  console.error(`Failed to query sync result of Asset. Code is ${err.code}, message is ${err.message}`);
69});
70```
71
72## 约束和限制
73
74在可信设备间同步过程中,新旧设备的关键资产均需处于可访问的状态,否则可能出现关键资产无法同步的情况。
75
76- 仅设置密码时可访问的关键资产,如果新旧设备中任意一台设备未设置锁屏密码,则无法同步成功。
77
78- 仅屏幕处于解锁状态时可访问的关键资产,如果新旧设备中任意一台设备的屏幕未处于解锁状态,则无法同步成功。
79
80- 仅用户认证通过后可访问的关键资产,如果旧设备未设置锁屏密码,则无法同步成功。
81
82