# 跨应用数据共享 ## 功能简介 跨应用数据共享提供了向其他应用共享以及管理其数据的方法,支持不同应用之间的数据协同。 在许多应用场景中都需要用到数据共享,比如将电话簿、短信、媒体库中的数据共享给其他应用等。当然,不是所有的数据都允许其他应用访问,比如帐号、密码等;有些数据也只允许其他应用查询而不允许其删改,比如短信等。所以针对不同数据共享场景以及数据隐私保护,设计一个安全、便捷的跨应用数据共享机制是十分必要的。 当前,基于跨应用数据共享中涉及的数据提供方应用个数的不同情况,数据管理提供支持一对多跨应用数据共享和多对多跨应用数据共享的能力。 ## 基本概念 在进行跨应用数据共享开发前,先了解以下相关概念。 - **数据提供方**:提供数据及实现相关业务的应用程序,也称为生产者或服务端。 - **数据访问方**:访问数据提供方所提供的数据或业务的应用程序,也称为消费者或客户端。 - **数据集**:用户要插入的数据集合,可以是一条或多条数据。数据集以键值对的形式存在,键为字符串类型,值支持数字、字符串、布尔值、无符号整型数组等多种数据类型。 - **结果集**:用户查询之后的结果集合,其提供了灵活的数据访问方式,以便用户获取各项数据。 - **谓词**:用户访问数据库中的数据所使用的筛选条件,经常被应用在更新数据、删除数据和查询数据等场景。 ## 标准化数据定义 当出现多应用数据共享时,每个应用都有自己的数据定义和数据格式,应用间的的数据交互需做大量的数据格式适配工作。为了降低应用/业务数据交互成本,我们提出标准化数据定义作为OpenHarmony统一的数据语言, 构建OpenHarmony数据跨应用交互标准。 标准化数据定义统一定义了多种常用的数据类型,应用可以使用统一数据管理框架提供的接口创建和使用这些标准化数据类型,具体内容及使用请见[标准化数据定义](unified-data-definition.md)。 ## 一对多跨应用数据共享 基于跨应用一对多数据共享的场景,可通过DataShare实现。DataShare实现数据共享时,包括数据提供方和数据访问方,基于跨应用数据共享是否拉起数据提供方的不同情况,支持两种不同的实现方式。具体相关实现可见下文。 ### 具体实现 数据提供方无需进行繁琐的封装,可直接使用DataShare向其他应用共享数据;对数据访问方来说,因DataShare的访问方式不会因数据提供的方式而不同,只需要学习和使用一套接口即可,大大减少了学习时间和开发难度。 DataShare实现跨应用数据共享有两种方式: - [使用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的不同通道中形成聚合效应,提升开发者跨应用数据协同的效率,同时提升用户的数据体验。