diff --git a/zh-cn/application-dev/database/Readme-CN.md b/zh-cn/application-dev/database/Readme-CN.md index f8593fcbf513360c0f9a71a184311f94ffec8138..b22db236a142b97d468d6d20185ad97e2679b373 100644 --- a/zh-cn/application-dev/database/Readme-CN.md +++ b/zh-cn/application-dev/database/Readme-CN.md @@ -19,8 +19,8 @@ - 跨应用数据共享 - [跨应用数据共享概述](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 diff --git a/zh-cn/application-dev/database/data-share-overview.md b/zh-cn/application-dev/database/data-share-overview.md index 5c550ab6f0442ec003cfb322d5d3549453aced23..5dd7b423acb46e180bfa10c4c4ae8e0f980aa0ba 100644 --- a/zh-cn/application-dev/database/data-share-overview.md +++ b/zh-cn/application-dev/database/data-share-overview.md @@ -6,6 +6,8 @@ 在许多应用场景中都需要用到数据共享,比如将电话簿、短信、媒体库中的数据共享给其他应用等。当然,不是所有的数据都允许其他应用访问,比如帐号、密码等;有些数据也只允许其他应用查询而不允许其删改,比如短信等。所以针对不同数据共享场景以及数据隐私保护,设计一个安全、便捷的跨应用数据共享机制是十分必要的。 +当前,基于跨应用数据共享中涉及的应用个数的不同情况,数据管理提供支持一对多跨应用数据共享和多对多跨应用数据共享的能力。 + ## 基本概念 在进行跨应用数据共享开发前,先了解以下相关概念。 @@ -22,43 +24,25 @@ ## 标准化数据定义 -当出现多应用数据共享时,需要统一的OpenHarmony数据语言,构建OpenHarmony数据跨应用、跨设备交互标准,降低应用/业务数据交互成本,跨应用数据共享遵循以下数据定义: - -**基础数据类型:** 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数据类型示意图 +当出现多应用数据共享时,需要统一的OpenHarmony数据语言,构建OpenHarmony数据跨应用、跨设备交互标准,降低应用/业务数据交互成本。 +标准化数据的具体内容及使用请见[标准化数据定义](unified-data-definition.md)。 -![UDMF_SDT](figures/udmf_type_SDT.png) +## 一对多跨应用数据共享 +基于跨应用一对多数据共享的场景,可通过DataShare实现。DataShare实现数据共享时,包括数据提供方和数据访问方,基于跨应用数据共享是否拉起数据提供方的不同情况,支持两种不同的实现方式。具体相关实现可见下文。 -**应用自定义数据类型(App Defined Type, ADT):** 单个应用自定义的数据,该类数据可以实现应用内的跨平台与跨设备流转,如图4所示为例,应用可自定义MyFile类型文件格式在应用生态内部使用。 - -**图4** UDMF ADT数据类型示意图 - -![UDMF_ADT](figures/udmf_type_ADT.png) - -## 一对多数据共享 +## 具体实现 数据提供方无需进行繁琐的封装,可直接使用DataShare向其他应用共享数据;对数据访问方来说,因DataShare的访问方式不会因数据提供的方式而不同,只需要学习和使用一套接口即可,大大减少了学习时间和开发难度。 -跨应用数据共享有两种方式: +DataShare实现跨应用数据共享有两种方式: -- **使用DataShareExtensionAbility实现数据共享** +- [使用DataShareExtensionAbility实现数据共享](share-data-by-datashareextensionability.md) 这种方式通过在HAP中实现一个extension,在extension中可以实现回调,在访问方调用对应接口时,会自动拉起提供方对应的extension,并调用对应回调。 这种方式适用于跨应用数据访问时有业务的操作,不仅是对数据库的增删改查的情况。 -- **通过数据管理服务实现数据共享静默访问** +- [通过数据管理服务实现数据共享静默访问](share-data-by-silent-access.md) 这种方式通过在HAP中配置数据库的访问规则,在访问方调用对应接口时,会自动通过系统服务读取HAP配置规则,按照规则返回数据,不会拉起数据提供方。 @@ -74,21 +58,28 @@ - 当前仅支持在Stage模型下,进行同设备跨应用数据共享相关能力的开发。 -## 多对多数据共享 +## 多对多跨应用数据共享 -区别于一对多数据共享,统一数据管理框架(Unified Data Management Framework, UDMF)提供一种新的数据共享与交互方式,应用可以根据UDMF提供的标准化接口, -将数据写入UDMF不同的数据通道。写入UDMF中的数据依据应用定义的权限、数据通道定义的权限以及整个UDMF框架定义的权限管理逻辑进行管理, +区别于一对多数据共享,当多个应用之间需要相互进行数据共享时,即多对多的跨应用数据共享场景下,对于数据的定义、流通、权限要求与管理等是十分必要的。统一数据管理框架(Unified Data Management Framework, UDMF) +即提供一种新的数据共享与交互方式,可以实现多对多跨应用数据共享。 +应用可以根据UDMF提供的标准化接口,将数据写入UDMF不同的数据通道。写入UDMF中的数据依据应用定义的权限、数据通道定义的权限以及整个UDMF框架定义的权限管理逻辑进行管理, 写入通道中的数据的生命周期的管理也遵循上述逻辑。这样离散在各个应用的碎片化数据可以在UDMF的不同通道中形成聚合效应,提升开发者跨应用数据协同的效率,同时提升用户的数据体验。 +具体实现与指导,可见[通过标准化数据通路实现数据共享](unified-data-channels.md) + ### 通过标准化数据通路实现数据共享 同时,UDMF提供安全、标准化数据通路,支持标准化数据接入与读取,降低业务跨应用数据交互成本。 UDMF中数据通路以及通路中数据统一管理的URI定义为udmf://intension/bundleName/groupName/guid,其中各组成部分的含义分别为: -**udmf:** 协议名,表示使用UDMF提供的数据通路。 -**intension:** 通道分类,对应不同的业务场景(如数据拖拽)。 -**bundleName:** 数据来源应用的包名称。 -**groupName:** 分组名称,支持批量数据分组管理。 +**udmf:** 协议名,表示使用UDMF提供的数据通路。 + +**intension:** 通道分类,对应不同的业务场景(如数据拖拽)。 + +**bundleName:** 数据来源应用的包名称。 + +**groupName:** 分组名称,支持批量数据分组管理。 + **guid:** 系统生成的数据id,全局唯一。 当前UDMF中的跨应用数据共享通道有: diff --git a/zh-cn/application-dev/database/unified-data-channels.md b/zh-cn/application-dev/database/unified-data-channels.md index 37fa089928a97950df4af042708152e949171c3b..ee223adf85d50c36d06baec4e1ed2709e196a393 100644 --- a/zh-cn/application-dev/database/unified-data-channels.md +++ b/zh-cn/application-dev/database/unified-data-channels.md @@ -1,4 +1,4 @@ -# 标准化数据通路 +# 通过标准化数据通路实现数据共享 ## 场景介绍 @@ -22,7 +22,7 @@ UDMF定义了安全、标准化的数据接入与读取通路,为各种业务 以一次统一数据对象的插入、更新、查询和删除为例,说明开发步骤,示例代码均采用Callback形式,Promise形式请见。 -1. 导入`@ohos.data.UDMF`模块 +1. 导入`@ohos.data.UDMF`模块。 ```js import UDMF from '@ohos.data.UDMF'; diff --git a/zh-cn/application-dev/database/unified-data-definition.md b/zh-cn/application-dev/database/unified-data-definition.md index b4ee4433152f22389c5a58928dd67dc531619ca8..8c295ff3c4ff790065a687ded807fde09e8a8123 100644 --- a/zh-cn/application-dev/database/unified-data-definition.md +++ b/zh-cn/application-dev/database/unified-data-definition.md @@ -6,69 +6,85 @@ 为了构建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支持的标准化数据类型列表,请见接口参考中的[UnifiedDataType](../reference/apis/js-apis-data-udmf.md#UnifiedDataType)。 - -UDMF标准化数据类型均为数据记录[UnifiedRecord](../reference/apis/js-apis-data-udmf.md#UnifiedRecord)的子类,如下表所示, -通过基类的getType方法可以获取具体的数据类型。 +以下是常见的UDMF的接口说明,更多接口和具体说明,请见[ @ohos.data.UDMF(统一数据管理框架)](../reference/apis/js-apis-data-udmf.md)。 | 接口名称 | 描述 | |-------------------|-----------------------------------------------------------------------------------------------| -| getType(): string | 获取当前数据记录对应的具体数据类型,见[UnifiedDataType](../reference/apis/js-apis-data-udmf.md#UnifiedDataType)。 | - -UDMF支持批量数据记录的分组管理,通过统一数据对象[UnifiedData](../reference/apis/js-apis-data-udmf.md#UnifiedData)封装一组数据记录, -UnifiedData的接口如下表所示。 - -| 接口名称 | 描述 | -|----------------------------------------|--------------------------------------------------------------------------| +| getType(): string | 获取当前数据记录对应的具体数据类型。 | | constructor(record: UnifiedRecord) | 用于创建带有一条数据记录的统一数据对象。 | | addRecord(record: UnifiedRecord): void | 在当前统一数据对象中添加一条数据记录。 | -| getRecords(): Array | 将当前统一数据对象中的所有数据记录取出,通过本接口取出的数据为UnifiedRecord类型,需通过getType获取数据类型后转为子类再使用。 | +| getRecords(): Array\ | 将当前统一数据对象中的所有数据记录取出,通过本接口取出的数据为UnifiedRecord类型,需通过getType获取数据类型后转为子类再使用。 | ## 开发步骤 以一次创建数据(包含图片、纯文本、二进制图片三条数据记录)为例,说明开发步骤。 -1. 导入`@ohos.data.UDMF`模块 +1. 导入`@ohos.data.UDMF`模块。 ```js import UDMF from '@ohos.data.UDMF'; ``` -2. 创建图片数据记录,并初始化得到带有该数据记录的UnifiedData对象 +2. 创建图片数据记录,并初始化得到带有该数据记录的UnifiedData对象。 - (1)创建图片数据记录 + (1)创建图片数据记录。 ```js let image = new UDMF.Image(); ``` - (2)修改对象属性 + (2)修改对象属性。 ```js // Image对象包含一个属性imageUri image.imageUri = '...'; ``` - (3)访问对象属性 + (3)访问对象属性。 ```js console.info(`imageUri = ${image.imageUri}`); ``` - (4)创建一个统一数据对象实例 + (4)创建一个统一数据对象实例。 ```js let unifiedData = new UDMF.UnifiedData(image); ``` -3. 创建纯文本数据类型记录,将其添加到刚才创建的UnifiedData对象 +3. 创建纯文本数据类型记录,将其添加到刚才创建的UnifiedData对象。 ```js let plainText = new UDMF.PlainText(); @@ -80,19 +96,19 @@ UnifiedData的接口如下表所示。 }; unifiedData.addRecord(plainText); ``` -4. 创建二进制图片数据类型记录,将其添加到UnifiedData对象 +4. 创建二进制图片数据类型记录,将其添加到UnifiedData对象。 ```js let sdPixelMap = new UDMF.SystemDefinedPixelMap(); sdPixelMap.rawData = new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); unifiedData.addRecord(sdPixelMap); ``` -5. 记录添加完成后,可获取当前UnifiedData对象内的所有数据记录 +5. 记录添加完成后,可获取当前UnifiedData对象内的所有数据记录。 ```js let records = unifiedData.getRecords(); ``` -6. 遍历每条记录,判断该记录的数据类型,转换为子类对象,得到原数据记录 +6. 遍历每条记录,判断该记录的数据类型,转换为子类对象,得到原数据记录。 ```js for (let i = 0; i < records.length; i ++) {