云状态同步思路分享(多设备同步)

经验创意 · 1416 次浏览
格物致理 创建于 12天21小时前

 

多设备同步:

云状态名称:动作ID_变量名称

 

1. 运行动作,最开头

判断是否联网,判断本地状态是否为空。

1.1 未联网+本地状态不为空:提示用户,用“弹窗提示确认”:
当前未联网,无法下载云端的最新数据,可能导致数据冲突。
建议联网后运行本动作,是否继续运行动作?(点击取消停止动作)
(如果您只在一个设备上使用本动作,可忽略此信息。)

1.2 未联网+本地状态为空:提示用户,用“弹窗提示确认”:
当前未联网,无法下载云端的最新数据,可能导致数据冲突。
建议联网后运行本动作,是否继续运行动作?(点击取消停止动作)

1.3 联网
1.3.1 如果上一次同步失败,则以本地状态为准,不下载云端状态。

1.3.2 如果上一次同步成功,则下载云端状态。

1.3.2.1 下载成功:如果云端状态与本地状态不同,说明在其它设备进行了修改。(解释:因为本地状态会上传到云端,所以下载下来应该是相同的,如果不同,就说明是在其它设备修改了。)
于是,将本地状态进行备份,然后用云端状态覆盖本地状态,同时清理超过特定天数(如30天)的本地状态备份。(本地状态的备份作为兜底,用于手动进行恢复)(可以使用这个子程序:本地数据备份(子程序) - 子程序信息 - Quicker

1.3.2.2 下载失败:核验错误代码是否为 NoSuchKey,是,说明第一次运行此动作,则继续运行动作;否,则重试1次,如果还是失败,则提示用户——从云端下载数据失败,可能导致数据冲突。若点击确定,则忽略数据同步问题,强制运行动作;若点击取消,则重启本动作。(运行当前动作,后面接上一个“停止”模块)

 

2. 修改本地状态后,上传到云端。

同步时,记录同步成功还是失败,写入一个变量:上一次同步的状态。(默认值为1,因此在首次运行动作时自动下载云端状态)

上传失败处理:将待上传数据重试上传1次。
如果仍失败,则提示用户,用“弹窗提示确认”:
当前设备数据未同步,其他设备可能使用旧数据。是否立即重试?
如果多次同步失败,建议检查网络状态。
(如果您只在一个设备上使用本动作,可忽略此信息,下一次对数据进行修改之后会自动同步。)

 

3.在动作的右键菜单提供一个单独的同步按钮,用于将本地状态上传到云端。

4.在设置中提供“关闭同步”的选项。

 

 

补充:

1. 为何不加入时间戳?因为依然会有问题。

核心规则:新的状态覆盖老的状态。

加入时间戳:固定字符数量,放在云状态的开头,读取固定长度的字符即可提取出时间戳。

时间戳比较:云端状态的时间戳与本地状态的时间戳相减,如果秒数>0,说明前者新于后者,覆盖本地状态;否则,不覆盖本地状态。

以上方法存在的问题:场景:① A设备修改,但是同步失败;② 然后B设备修改了,同步成功;③ A设备再修改,下载云端状态失败,且同步失败。④ A设备再修改,同步成功。
结果:那么B设备的修改就会丢失,因为在第 ③ 步中,A设备的状态变为最新的时间戳,因此B设备的修改无法覆盖A设备的状态。

 

 

鸣谢:

感谢@zdf153大佬的建议:云+本地备份  https://getquicker.net/Sharedaction?code=f1c5f48b-2a19-4fe7-8747-08dce5862d41  基本上应该没问题了 最好就是覆盖云数据时也备份下云

格物致理 最后更新于 2025/5/4

回复内容
暂无回复
回复主贴