未验证 提交 5b344ca3 编写于 作者: O openharmony_ci 提交者: Gitee

!20333 UDMF开发指南合入

Merge pull request !20333 from dboy190/master
......@@ -16,8 +16,11 @@
- [数据库备份与恢复](data-backup-and-restore.md)
- [数据库加密](data-encryption.md)
- [基于设备分类和数据分级的访问控制](access-control-by-device-and-data-level.md)
- 同设备跨应用数据共享(仅对系统应用开放)
- [同设备跨应用数据共享概述](share-device-data-across-apps-overview.md)
- [通过DataShareExtensionAbility实现数据共享](share-data-by-datashareextensionability.md)
- [通过数据管理服务实现数据共享静默访问](share-data-by-silent-access.md)
- 跨应用数据共享
- [跨应用数据共享概述](data-share-overview.md)
- [标准化数据定义](unified-data-definition.md)
- 一对多跨应用数据共享(仅对系统应用开放)
- [通过DataShareExtensionAbility实现数据共享](share-data-by-datashareextensionability.md)
- [通过数据管理服务实现数据共享静默访问](share-data-by-silent-access.md)
- 多对多跨应用数据共享
- [通过标准化数据通路实现数据共享](unified-data-channels.md)
\ No newline at end of file
......@@ -16,7 +16,7 @@
## 运作机制
数据管理模块包括用户首选项、键值型数据管理、关系型数据管理、分布式数据对象和跨应用数据管理。Interface接口层提供标准JS API接口,定义这些部件接口描述,供开发者参考。Frameworks&System service层负责实现部件数据存储、同步功能,还有一些SQLite和其他子系统的依赖。
数据管理模块包括用户首选项、键值型数据管理、关系型数据管理、分布式数据对象、跨应用数据管理和统一数据管理框架。Interface接口层提供标准JS API接口,定义这些部件接口描述,供开发者参考。Frameworks&System service层负责实现部件数据存储、同步功能,还有一些SQLite和其他子系统的依赖。
**图1** 数据管理架构图  
......@@ -33,4 +33,6 @@
- 跨应用数据管理(DataShare):提供了数据提供者provider、数据消费者consumer以及同设备跨应用数据交互的增、删、改、查以及订阅通知等能力。DataShare不与任何数据库绑定,可以对接关系型数据库、键值型数据库。如果开发C/C++应用甚至可以自行封装数据库。在提供标准的provider-consumer模式基础上,同时提供了静默数据访问能力,即不再拉起provider而是直接通过DatamgrService代理访问provider的数据(目前仅关系型数据库支持静默数据访问方式)。
- 统一数据管理框架(UDMF):提供了数据跨应用、跨设备交互标准,定义了跨应用、跨设备数据交互过程中的数据语言,提升数据交互效率。提供安全、标准化数据流通通路,支持不同级别的数据访问权限与生命周期管理策略,实现高效的数据跨应用、跨设备共享。
- 数据管理服务(DatamgrService):提供其它部件的同步及跨应用共享能力,包括RelationalStore和KV-Store跨设备同步,DataShare静默访问provider数据,暂存DataObject同步对象数据等。
# 同设备跨应用数据共享概述
# 跨应用数据共享
## 功能简介
数据共享(DataShare) 提供了向其他应用共享以及管理其数据的方法,支持同个设备上不同应用之间的数据共享。
跨应用数据共享提供了向其他应用共享以及管理其数据的方法,支持不同应用之间的数据协同。
在许多应用场景中都需要用到数据共享,比如将电话簿、短信、媒体库中的数据共享给其他应用等。当然,不是所有的数据都允许其他应用访问,比如帐号、密码等;有些数据也只允许其他应用查询而不允许其删改,比如短信等。所以针对不同数据共享场景以及数据隐私保护,设计一个安全、便捷的跨应用数据共享机制是十分必要的。
在许多应用场景中都需要用到数据共享,比如将电话簿、短信、媒体库中的数据共享给其他应用等。当然,不是所有的数据都允许其他应用访问,比如帐号、密码等;有些数据也只允许其他应用查询而不允许其删改,比如短信等。所以对于各种数据共享场景,DataShare这样一个安全、便捷的可以跨应用的数据共享机制是十分必要的
当前,基于跨应用数据共享中涉及的数据提供方应用个数的不同情况,数据管理提供支持一对多跨应用数据共享和多对多跨应用数据共享的能力
## 基本概念
在进行同设备跨应用数据共享开发前,先了解以下相关概念。
在进行跨应用数据共享开发前,先了解以下相关概念。
- **数据提供方**:提供数据及实现相关业务的应用程序,也称为生产者或服务端。
......@@ -21,30 +22,50 @@
- **谓词**:用户访问数据库中的数据所使用的筛选条件,经常被应用在更新数据、删除数据和查询数据等场景。
## 具体实现
## 标准化数据定义
当出现多应用数据共享时,每个应用都有自己的数据定义和数据格式,应用间的的数据交互需做大量的数据格式适配工作。为了降低应用/业务数据交互成本,我们提出标准化数据定义作为OpenHarmony统一的数据语言,构建OpenHarmony数据跨应用交互标准。
标准化数据定义统一定义了多种常用的数据类型,应用可以使用统一数据管理框架提供的接口创建和使用这些标准化数据类型,具体内容及使用请见[标准化数据定义](unified-data-definition.md)
## 一对多跨应用数据共享
基于跨应用一对多数据共享的场景,可通过DataShare实现。DataShare实现数据共享时,包括数据提供方和数据访问方,基于跨应用数据共享是否拉起数据提供方的不同情况,支持两种不同的实现方式。具体相关实现可见下文。
### 具体实现
数据提供方无需进行繁琐的封装,可直接使用DataShare向其他应用共享数据;对数据访问方来说,因DataShare的访问方式不会因数据提供的方式而不同,只需要学习和使用一套接口即可,大大减少了学习时间和开发难度。
跨应用数据共享有两种方式:
DataShare实现跨应用数据共享有两种方式:
- **使用DataShareExtensionAbility实现数据共享**
- [使用DataShareExtensionAbility实现数据共享](share-data-by-datashareextensionability.md)
这种方式通过在HAP中实现一个extension,在extension中可以实现回调,在访问方调用对应接口时,会自动拉起提供方对应的extension,并调用对应回调。
这种方式适用于跨应用数据访问时有业务的操作,不仅是对数据库的增删改查的情况。
- **通过数据管理服务实现数据共享静默访问**
- [通过数据管理服务实现数据共享静默访问](share-data-by-silent-access.md)
这种方式通过在HAP中配置数据库的访问规则,在访问方调用对应接口时,会自动通过系统服务读取HAP配置规则,按照规则返回数据,不会拉起数据提供方。
这种方式适用于跨应用数据访问仅为数据库的增删改查或托管数据到数据管理服务,没有特殊业务的情况。
如果你的应用是系统签名,最佳实践方式是以上两种方式一起用。首次创建数据时使用DataShareExtensionAbility拉起创建,后续访问和修改数据通过数据管理服务实现数据共享,即可实现只有首次访问会拉起数据提供者。
## 约束限制
### 约束限制
- DataShare受到数据提供方所使用数据库的一些限制。例如支持的数据模型、Key的长度、Value的长度、每个应用程序支持同时打开数据库的最大数量等,都会受到使用的数据库的限制。
- 因DataShare内部实现依赖于IPC通信,所以数据集、谓词、结果集等的载荷受到IPC通信的约束与限制。
- 当前仅支持在Stage模型下,进行同设备跨应用数据共享相关能力的开发。
## 多对多跨应用数据共享
区别于一对多数据共享只有一个数据提供方,当多个应用之间需要相互进行数据共享时,即多对多的跨应用数据共享场景下,对于数据的定义、流通和权限管理等是十分必要的。统一数据管理框架(Unified Data Management Framework, UDMF)即提供一种新的数据共享与交互方式,可以实现多对多跨应用数据共享,具体相关实现可见下文。
### 具体实现
[通过标准化数据通路实现数据共享](unified-data-channels.md)
应用可以根据UDMF标准化数据通路提供的数据接入与读取接口,将符合标准化数据定义的数据写入UDMF不同的数据共享通路,并提供多应用进行读取。写入UDMF中的数据依据应用定义的权限、数据通路定义的权限以及整个UDMF框架定义的权限管理逻辑进行管理,写入通路中的数据的生命周期的管理也遵循上述逻辑。这样离散在各个应用的碎片化数据可以在UDMF的不同通路中形成聚合效应,提升开发者跨应用数据协同的效率,同时提升用户的数据体验。
......@@ -7,7 +7,7 @@
例如:当设备1上的应用A在分布式数据库中增、删、改数据后,设备2上的应用A也可以获取到该数据库变化。可在分布式图库、备忘录、联系人、文件管理器等场景中使用。
不同应用间订阅数据库变化通知,则请参考[同设备跨应用数据共享](share-device-data-across-apps-overview.md)实现。
不同应用间订阅数据库变化通知,则请参考[跨应用数据共享](data-share-overview.md)实现。
根据跨设备同步数据生命周期的不同,可以分为:
......
# 通过标准化数据通路实现数据共享
## 场景介绍
在多对多跨应用数据共享的场景下,需要提供一条数据通路能够接入多个不同应用的数据并共享给其他应用进行读取。
UDMF针对多对多跨应用数据共享的不同业务场景提供了标准化的数据通路,提供了标准化的数据接入与读取接口。
## 标准化数据通路的定义和实现
标准化数据通路是为各种业务场景提供的跨应用的数据接入与读取通路,它可以暂存应用需要共享的符合标准化数据定义的统一数据对象,并提供给其他应用进行访问,同时按照一定的策略对暂存数据的访问权限和生命周期进行管理。
标准化数据通路通过UDMF提供的系统服务实现,应用(数据提供方)需要共享公共数据时可以通过UDMF提供的插入接口将数据写入到UDMF的数据通路中,并且可以通过UDMF提供的更新和删除接口对已经存入UDMF数据通路的数据进行更新和删除操作。在完成必要的权限校验后,目标应用(数据访问方)可以通过UDMF提供的读取接口进行数据的访问,数据被读取后,UDMF会统一对数据的生命周期进行管理。
统一数据对象UnifiedData在UDMF数据通路中具有全局唯一URI标识,其定义为udmf://intention/bundleName/groupId,其中各组成部分的含义分别为:
+ **udmf:** 协议名,表示使用UDMF提供的数据通路。
+ **intention:** UDMF已经支持的数据通路类型枚举值,对应不同的业务场景。
+ **bundleName:** 数据来源应用的包名称。
+ **groupId:** 分组名称,支持批量数据分组管理。
当前UDMF中的跨应用数据共享通路有:**公共数据通路**
**公共数据通路**:应用共享的公用数据共享通路,应用均可写入和读取数据,对应的Intention枚举类型为DATA_HUB。
## 接口说明
以下是UDMF标准化数据通路的相关接口,均为异步接口。异步接口均有callback和Promise两种返回形式,下表均以callback形式为例,更多接口及使用方式请见[统一数据管理框架](../reference/apis/js-apis-data-udmf.md)
| 接口名称 | 描述 |
|-----------------------------------------------------------------------------------------|---------------------------------------------|
| insertData(options: Options, data: UnifiedData, callback: AsyncCallback\<string>): void | 将数据写入UDMF的公共数据通路中,并生成数据的唯一标识符,使用callback异步回调。 |
| updateData(options: Options, data: UnifiedData, callback: AsyncCallback\<void>): void | 更新已写入UDMF的公共数据通路的数据,使用callback异步回调。 |
| queryData(options: Options, callback: AsyncCallback\<Array\<UnifiedData>>): void | 查询UDMF公共数据通路的数据,使用callback异步回调。 |
| deleteData(options: Options, callback: AsyncCallback\<Array\<UnifiedData>>): void | 删除UDMF公共数据通路的数据,返回删除的数据集,使用callback异步回调。 |
## 开发步骤
以一次多对多数据共享的过程为例说明开发步骤,数据提供方可以通过UMDF提供的接口将数据写入公共数据通路,并对其进行更新和删除操作。数据访问方可以通过UDMF提供的查询接口获取数据提供方共享的数据。
### 数据提供方
1. 导入`@ohos.data.UDMF`模块。
```ts
import UDMF from '@ohos.data.UDMF';
```
2. 创建一个统一数据对象并插入到UDMF的公共数据通路中。
```ts
let plainText = new UDMF.PlainText();
plainText.textContent = 'hello world!';
let unifiedData = new UDMF.UnifiedData(plainText);
// 指定要插入数据的数据通路枚举类型
let options = {
intention: UDMF.Intention.DATA_HUB
}
try {
UDMF.insertData(options, unifiedData, (err, data) => {
if (err === undefined) {
console.info(`Succeeded in inserting data. key = ${data}`);
} else {
console.error(`Failed to insert data. code is ${err.code},message is ${err.message} `);
}
});
} catch(e) {
console.error(`Insert data throws an exception. code is ${e.code},message is ${e.message} `);
}
```
3. 更新上一步骤插入的统一数据对象。
```ts
let plainText = new UDMF.PlainText();
plainText.textContent = 'How are you!';
let unifiedData = new UDMF.UnifiedData(plainText);
// 指定要更新的统一数据对象的URI
let options = {
key: 'udmf://DataHub/com.ohos.test/0123456789'
};
try {
UDMF.updateData(options, unifiedData, (err) => {
if (err === undefined) {
console.info('Succeeded in updating data.');
} else {
console.error(`Failed to update data. code is ${err.code},message is ${err.message} `);
}
});
} catch(e) {
console.error(`Update data throws an exception. code is ${e.code},message is ${e.message} `);
}
```
4. 删除存储在UDMF公共数据通路中的统一数据对象。
```ts
// 指定要删除数据的数据通路枚举类型
let options = {
intention: UDMF.Intention.DATA_HUB
};
try {
UDMF.deleteData(options, (err, data) => {
if (err === undefined) {
console.info(`Succeeded in deleting data. size = ${data.length}`);
for (let i = 0; i < data.length; i++) {
let records = data[i].getRecords();
for (let j = 0; j < records.length; j++) {
if (records[j].getType() === UDMF.UnifiedDataType.PLAIN_TEXT) {
let text = <UDMF.PlainText>(records[j]);
console.info(`${i + 1}.${text.textContent}`);
}
}
}
} else {
console.error(`Failed to delete data. code is ${err.code},message is ${err.message} `);
}
});
} catch(e) {
console.error(`Delete data throws an exception. code is ${e.code},message is ${e.message} `);
}
```
### 数据访问方
1. 导入`@ohos.data.UDMF`模块。
```ts
import UDMF from '@ohos.data.UDMF';
```
2. 查询存储在UDMF公共数据通路中的统一数据对象。
```ts
// 指定要查询数据的数据通路枚举类型
let options = {
intention: UDMF.Intention.DATA_HUB
};
try {
UDMF.queryData(options, (err, data) => {
if (err === undefined) {
console.info(`Succeeded in querying data. size = ${data.length}`);
for (let i = 0; i < data.length; i++) {
let records = data[i].getRecords();
for (let j = 0; j < records.length; j++) {
if (records[j].getType() === UDMF.UnifiedDataType.PLAIN_TEXT) {
let text = <UDMF.PlainText>(records[j]);
console.info(`${i + 1}.${text.textContent}`);
}
}
}
} else {
console.error(`Failed to query data. code is ${err.code},message is ${err.message} `);
}
});
} catch(e) {
console.error(`Query data throws an exception. code is ${e.code},message is ${e.message} `);
}
```
# 标准化数据定义
## 场景介绍
为了构建OpenHarmony数据跨应用交互的标准定义,降低应用/业务数据交互成本,促进数据生态建设,UDMF提供了标准化的数据定义,统一定义了多种常用的数据类型。应用可以使用统一数据管理框架提供的接口创建和使用这些标准化数据类型。
## 标准化数据类型
UDMF提供的标准化数据类型主要包括以下几类:
**基础数据类型:** File、Text等,能够进行跨应用与跨平台流转,如图1和图2所示。
**图1** UDMF File数据类型示意图
![UDMF_FILE](figures/udmf_type_File.png)
**图2** UDMF Text数据类型示意图
![UDMF_TEXT](figures/udmf_type_Text.png)
**系统相关数据类型(System Defined Type, SDT):** 与具体的平台/操作系统绑定,如Form(UI卡片信息)、AppItem(App描述信息)、PixelMap(缩略图格式)等,该类数据可以实现系统/平台内的跨应用流转,如图3所示。
**图3** UDMF SDT数据类型示意图
![UDMF_SDT](figures/udmf_type_SDT.png)
**应用自定义数据类型(App Defined Type, ADT):** 单个应用自定义的数据,该类数据可以实现应用内的跨平台流转,如图4所示为例,应用可自定义MyFile类型文件格式在应用生态内部使用。
**图4** UDMF ADT数据类型示意图
![UDMF_ADT](figures/udmf_type_ADT.png)
## 约束限制
- UDMF中每条数据记录大小不超过2MB。
- UDMF支持批量数据记录的分组管理,每个分组整体大小不超过4MB。
## 接口说明
UDMF提供了统一数据对象UnifiedData,用于封装一组数据记录UnifiedRecord。数据记录UnifiedRecord则是对UDMF支持的数据内容的抽象定义,例如一条文本记录、一条图片记录等。数据记录中的数据内容类型对应为各数据类型UnifiedDataType。
以下是常见的UDMF的接口说明,更多接口和具体说明,请见[统一数据管理框架](../reference/apis/js-apis-data-udmf.md)
| 类名称 | 接口名称 | 描述 |
|---------------|-------------------|-----------------------------------------------------------------------------------------------|
| UnifiedRecord | getType(): string | 获取当前数据记录对应的具体数据类型。 |
| UnifiedData | constructor(record: UnifiedRecord) | 用于创建带有一条数据记录的统一数据对象。 |
| UnifiedData | addRecord(record: UnifiedRecord): void | 在当前统一数据对象中添加一条数据记录。 |
| UnifiedData | getRecords(): Array\<UnifiedRecord> | 将当前统一数据对象中的所有数据记录取出,通过本接口取出的数据为UnifiedRecord类型,需通过getType获取数据类型后转为子类再使用。 |
## 开发步骤
以一次创建统一数据对象(包含图片、纯文本两条数据记录)为例,说明开发步骤。
1. 导入`@ohos.data.UDMF`模块。
```ts
import UDMF from '@ohos.data.UDMF';
```
2. 创建图片数据记录,并初始化得到带有该数据记录的UnifiedData对象。
(1)创建图片数据记录。
```ts
let image = new UDMF.Image();
```
(2)修改对象属性。
```ts
// Image对象包含一个属性imageUri
image.imageUri = '...';
```
(3)访问对象属性。
```ts
console.info(`imageUri = ${image.imageUri}`);
```
(4)创建一个统一数据对象实例。
```ts
let unifiedData = new UDMF.UnifiedData(image);
```
3. 创建纯文本数据类型记录,将其添加到刚才创建的UnifiedData对象。
```ts
let plainText = new UDMF.PlainText();
plainText.textContent = 'this is textContent of plainText';
plainText.abstract = 'abstract of plainText';
plainText.details = {
plainKey1: 'plainValue1',
plainKey2: 'plainValue2',
};
unifiedData.addRecord(plainText);
```
4. 记录添加完成后,可获取当前UnifiedData对象内的所有数据记录。
```ts
let records = unifiedData.getRecords();
```
5. 遍历每条记录,判断该记录的数据类型,转换为子类对象,得到原数据记录。
```ts
for (let i = 0; i < records.length; i ++) {
// 读取该数据记录的类型
let type = records[i].getType();
switch (type) {
case UDMF.UnifiedDataType.IMAGE:
// 转换得到原图片数据记录
let image = <UDMF.Image>(records[i]);
break;
case UDMF.UnifiedDataType.PLAIN_TEXT:
// 转换得到原文本数据记录
let plainText = <UDMF.PlainText>(records[i]);
break;
default:
break;
}
}
```
......@@ -484,13 +484,13 @@ let unifiedData = new UDMF.UnifiedData(record);
## Intention
已接入UDMF的系统服务能力的枚举类型。其主要用途是标识用户向UDMF写入的数据的用途,同时也标明了当前系统内哪些系统服务已经接入了UDMF,通过UDMF实现应用间数据传递的业务
UDMF已经支持的数据通路枚举类型。其主要用途是标识各种UDMF数据通路所面向的不同业务场景
**系统能力:** SystemCapability.DistributedDataManager.UDMF.Core
| 名称 | 值 | 说明 |
|----------|-----------|---------|
| DATA_HUB | 'DataHub' | 公共数据通。 |
| DATA_HUB | 'DataHub' | 公共数据通。 |
## Options
......@@ -499,9 +499,9 @@ UDMF提供的数据操作接口可选项,包含intention和key两个可选参
**系统能力:** SystemCapability.DistributedDataManager.UDMF.Core
| 名称 | 类型 | 可读 | 可写 | 必填 | 说明 |
|-----------|-------------------------|----|----|----|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| intention | [Intention](#intention) | 是 | 是 | 否 | 表示数据操作相关的业务标签。 |
| 名称 | 类型 | 可读 | 可写 | 必填 | 说明 |
|-----------|-------------------------|----|----|----|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| intention | [Intention](#intention) | 是 | 是 | 否 | 表示数据操作相关的数据通路类型。 |
| key | string | 是 | 是 | 否 | UDMF中数据对象的唯一标识符,可通过[insertData](#udmfinsertdata)接口的返回值获取。<br>由udmf:/、intention、bundleName和groupId四部分组成,以'/'连接,比如:udmf://DataHub/com.ohos.test/0123456789。<br>其中udmf:/固定,DataHub为对应枚举的取值,com.ohos.test为包名,0123456789为随机生成的groupId。 |
......@@ -510,7 +510,7 @@ UDMF提供的数据操作接口可选项,包含intention和key两个可选参
insertData(options: Options, data: UnifiedData, callback: AsyncCallback&lt;string&gt;): void
将数据写入UDMF的公共存储中,并生成数据的唯一标识符,使用callback异步回调。
将数据写入UDMF的公共数据通路中,并生成数据的唯一标识符,使用callback异步回调。
**系统能力:** SystemCapability.DistributedDataManager.UDMF.Core
......@@ -552,7 +552,7 @@ try {
insertData(options: Options, data: UnifiedData): Promise&lt;string&gt;
将数据写入UDMF的公共存储中,并生成数据的唯一标识符,使用Promise异步回调。
将数据写入UDMF的公共数据通路中,并生成数据的唯一标识符,使用Promise异步回调。
**系统能力:** SystemCapability.DistributedDataManager.UDMF.Core
......@@ -596,7 +596,7 @@ try {
updateData(options: Options, data: UnifiedData, callback: AsyncCallback&lt;void&gt;): void
更新已写入UDMF的公共存储的数据,使用callback异步回调。
更新已写入UDMF的公共数据通路的数据,使用callback异步回调。
**系统能力:** SystemCapability.DistributedDataManager.UDMF.Core
......@@ -638,7 +638,7 @@ try {
updateData(options: Options, data: UnifiedData): Promise&lt;void&gt;
更新已写入UDMF的公共存储的数据,使用Promise异步回调。
更新已写入UDMF的公共数据通路的数据,使用Promise异步回调。
**系统能力:** SystemCapability.DistributedDataManager.UDMF.Core
......@@ -683,7 +683,7 @@ try {
queryData(options: Options, callback: AsyncCallback&lt;Array&lt;UnifiedData&gt;&gt;): void
查询UDMF公共存储的数据,使用callback异步回调。
查询UDMF公共数据通路的数据,使用callback异步回调。
**系统能力:** SystemCapability.DistributedDataManager.UDMF.Core
......@@ -729,7 +729,7 @@ try {
queryData(options: Options): Promise&lt;Array&lt;UnifiedData&gt;&gt;
查询UDMF公共存储的数据,使用Promise异步回调。
查询UDMF公共数据通路的数据,使用Promise异步回调。
**系统能力:** SystemCapability.DistributedDataManager.UDMF.Core
......@@ -778,7 +778,7 @@ try {
deleteData(options: Options, callback: AsyncCallback&lt;Array&lt;UnifiedData&gt;&gt;): void
删除UDMF公共存储的数据,返回删除的数据集,使用callback异步回调。
删除UDMF公共数据通路的数据,返回删除的数据集,使用callback异步回调。
**系统能力:** SystemCapability.DistributedDataManager.UDMF.Core
......@@ -824,7 +824,7 @@ try {
deleteData(options: Options): Promise&lt;Array&lt;UnifiedData&gt;&gt;
删除UDMF公共存储的数据,返回删除的数据集,使用Promise异步回调。
删除UDMF公共数据通路的数据,返回删除的数据集,使用Promise异步回调。
**系统能力:** SystemCapability.DistributedDataManager.UDMF.Core
......
......@@ -540,10 +540,14 @@
- [数据库备份与恢复](database/data-backup-and-restore.md)
- [数据库加密](database/data-encryption.md)
- [基于设备分类和数据分级的访问控制](database/access-control-by-device-and-data-level.md)
- 同设备跨应用数据共享(仅对系统应用开放)
- [同设备跨应用数据共享概述](database/share-device-data-across-apps-overview.md)
- [通过DataShareExtensionAbility实现数据共享](database/share-data-by-datashareextensionability.md)
- [通过数据管理服务实现数据共享静默访问](database/share-data-by-silent-access.md)
- 跨应用数据共享
- [跨应用数据共享概述](database/data-share-overview.md)
- [标准化数据定义](database/unified-data-definition.md)
- 一对多跨应用数据共享(仅对系统应用开放)
- [通过DataShareExtensionAbility实现数据共享](database/share-data-by-datashareextensionability.md)
- [通过数据管理服务实现数据共享静默访问](database/share-data-by-silent-access.md)
- 多对多跨应用数据共享
- [通过标准化数据通路实现数据共享](database/unified-data-channels.md)
- 文件管理
- [文件管理概述](file-management/file-management-overview.md)
- 应用文件
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册