鸿蒙系统-同应用跨设备数据同步(分布式功能)

server/2025/2/24 0:45:42/

一. 场景介绍

跨设备数据同步功能(即分布式功能),指将数据同步到一个组网环境中的其他设备。常用于用户应用程序数据内容在可信认证的不同设备间,进行自由同步、修改和查询。

二. 跨设备同步访问控制机制

在进行开发之前,先要了解一下跨设备同步访问控制机制,数据跨设备同步时,数据管理基于设备等级和数据安全标签进行访问控制,具体如下:

设备安全级别可同步的数据安全标签
SL1S1
SL2S1~S2
SL3S2~S3
SL4S3~S4
SL5S4~S5

手表通常为低安全的SL1设备。若创建数据安全标签为S1的数据库,则此数据库数据可以在这些设备间同步;若创建的数据库标签为S2-S4,则不能在这些设备间同步。
总结:想要开设备同步,设备安全级别需要设置为:S1
具体设置代码:

 const options: distributedKVStore.Options = {//设置安全等级securityLevel: distributedKVStore.SecurityLevel.S1};

三.键值型数据库跨设备数据同步

1. 导入模块
import { distributedKVStore } from '@kit.ArkData';
2. 申请权限

在module.json5中requestPermissions里面配置权限:

  {"name": "ohos.permission.DISTRIBUTED_DATASYNC","reason": "$string:write_permission","usedScene": {"abilities": ["EntryAbility"],"when": "always"}},
3. 创建kvManager对象
  let config: distributedKVStore.KVManagerConfig = {bundleName: context.abilityInfo.bundleName,context: context};try {this.kvManager = distributedKVStore.createKVManager(config);} catch (error) {PhLog.error(`createKvStore createKVManager failed, err=${JSON.stringify(error)}`, 'KvStoreViewModel');reject(`createKvStore createKVManager failed, err=${JSON.stringify(error)}`);return;}
4. 获取并得到指定类型的键值型数据库
    let options: distributedKVStore.Options = {createIfMissing: true,encrypt: false,backup: false,autoSync: true,//自动同步功能kvStoreType: distributedKVStore.KVStoreType.DEVICE_COLLABORATION,securityLevel: distributedKVStore.SecurityLevel.S1//设置安全等级};// this.kvManager.getKVStore(CommonConstants.KV_STORE_ID, options).then((store: distributedKVStore.SingleKVStore) => {this.kvManager.getKVStore(CommonConstants.KV_STORE_ID, options).then((store: distributedKVStore.DeviceKVStore) => {if (store === null) {PhLog.error(`createKvStore getKVStore store is null`, 'KvStoreViewModel');reject(`createKvStore getKVStore store is null`);return;}this.kvStore = store;this.kvStore.enableSync(true).then(() => {resolve(1);PhLog.info('createKvStore enableSync success', 'KvStoreViewModel');}).catch((error: Error) => {reject(`createKvStore enableSync fail, error=${JSON.stringify(error)}`);PhLog.error(`createKvStore enableSync fail, error=${JSON.stringify(error)}`, 'KvStoreViewModel');});this.setDataChangeListener(() => {});}).catch((error: Error) => {reject(`createKvStore getKVStore failed, error=${JSON.stringify(error)}`);PhLog.error(`createKvStore getKVStore failed, error=${JSON.stringify(error)}`, 'KvStoreViewModel');})
5. 订阅、移除分布式数据变化
	try {//订阅kvStore.on('dataChange', distributedKVStore.SubscribeType.SUBSCRIBE_TYPE_ALL, (data) => {console.info(`dataChange callback call data: ${data}`);});} catch (e) {let error = e as BusinessError;console.error(`An unexpected error occurred. code:${error.code},message:${error.message}`);}try {//移除订阅数据变化this.kvStore.off('dataChange');} catch (error) {PhLog.error(`removeDataChangeListener off('dataChange') failed, err=${JSON.stringify(error)}`, 'KvStoreViewModel');}
6. 将数据写入分布式数据库。
 put(key: string, value: string): void {if (this.kvStore === undefined) {return;}this.kvStore.put(key, value).then(() => {PhLog.info(`kvStore.put key=${key} finished}`, 'KvStoreViewModel');}).catch((error: Error) => {PhLog.error(`kvStore.put key=${key} failed, error=${JSON.stringify(error)}`, 'KvStoreViewModel');});}
7. 查询数据
 async get(key: string): Promise<boolean | string | number | Uint8Array> {return new Promise((resolve, reject) => {if (this.kvStore === undefined) {PhLog.info('失败了')reject();return;}this.kvStore.get(key).then((res) => {resolve(res)PhLog.info(`kvStore.put key=${key} finished}`, 'KvStoreViewModel');}).catch((error: Error) => {resolve('')PhLog.error(`kvStore.put key=${key} failed, error=${JSON.stringify(error)}`, 'KvStoreViewModel');});})}
8. 同步数据到其他设备
try {// 1000表示最大延迟时间为1000mskvStore.sync(deviceIds, distributedKVStore.SyncMode.PUSH_ONLY, 1000);} catch (e) {let error = e as BusinessError;console.error(`An unexpected error occurred. Code:${error.code},message:${error.message}`);}```
9.删除数据
  async delete(key: string): Promise<void> {return new Promise((resolve, reject) => {if (this.kvStore === undefined) {PhLog.info('失败了')reject();return;}this.kvStore.delete(key).then( ()=> {resolve();})})}```

到这里整个分布式跨设备数据同步就完成了,可以愉快的进行跨设备数据同步访问了,
PS:过程中需要注意的是安全等级不要忘了设置,要不然不成功哦!!
接下来还会分享分布式跨设备文件访问


http://www.ppmy.cn/server/170225.html

相关文章

黑客利用 Telegram API 传播新的 Golang 后门

Netskope 的网络安全研究人员发现了一种新型的、具备一定功能但可能仍处于开发阶段的基于 Golang 语言编写的后门程序&#xff0c;该程序利用 Telegram 进行指令与控制&#xff08;C2&#xff09;活动。这种恶意软件&#xff08;Trojan.Generic.37477095&#xff09;疑似源自俄…

P2865 [USACO06NOV] Roadblocks G 与最短路的路径可重复的严格次短路

题目大意 给出 n n n 个顶点 m m m 条长度在 1 1 1 ~ 5000 5000 5000 的边的图&#xff0c;求图中从 1 到 n n n 与最短路的路径可重复的严格次短路。&#xff08;严格的含义是&#xff0c;一定比最短路要长&#xff0c;不能相等&#xff09; 分析 我们先将问题简单化&…

BMS保护板测试仪:电池安全与性能的坚实守护者

在新能源汽车、储能系统、电动工具等电池驱动型产品日益普及的今天&#xff0c;电池的安全性和性能成为了人们关注的焦点。而BMS保护板测试仪作为电池管理系统&#xff08;BMS&#xff09;中不可或缺的一部分&#xff0c;为电池的安全运行提供了有力保障。 BMS保护板测试仪的重…

DeepSeek 助力 Vue 开发:打造丝滑的评论系统(Comment System)

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 Deep…

命令执行漏洞 Command Execute

命令执行漏洞&#xff08;Command Injection&#xff09;是一种安全漏洞&#xff0c;指的是攻击者能够在应用程序的命令行中注入并执行恶意命令。简单来说&#xff0c;就是攻击者可以利用这个漏洞让程序执行自己指定的命令&#xff0c;而不是程序原本应该执行的命令。 举个例子…

51单片机介绍

1、单片机基础知识 1.1、单板机 将CPU芯片、存储器芯片、I/O接口芯片和简单的I/O设备(小键盘、LED显示器)等装配到一块印刷电路板上,再配上监控程序(固化在ROM中),就构成了一台单板微型计算机(简称单板机)。 1.2、单片机 在一片集成电路芯片上集成微处理器、存储器…

MyBatis XML映射文件中的批量插入和更新

一、背景 在数据库操作中&#xff0c;批量插入和更新是一种常见的需求&#xff0c;尤其是在处理大量数据时。MyBatis作为一个强大的持久层框架&#xff0c;提供了灵活的方式来实现这些操作。本文将详细介绍如何使用MyBatis XML映射文件来实现批量插入和更新。这样做的好处是不…

Windows 上源码安装 FastGPT

FastGPT 是一个强大的 AI RAG 平台&#xff0c;值得我们去学习了解。与常见的 Python 体系不同&#xff0c;Fast GPT 采用 Node.js/Next.js 平台&#xff08;对于广大 JS 开发者或前端开发者比较亲切友好&#xff09;&#xff0c;安装或部署比较简单。虽然一般情况下推荐简单的…