最近在学习使用Quasar开发混合平台应用(Hybrid App),一套代码就能编译出各平台应用。苦于各厂商自己的跨平台协作工具都比较封闭,我一直都想要有一个跨平台同步剪贴板的应用,正好拿来练练手。
基本思路是:每隔一小段时间监听系统剪贴板,如果不在历史记录中则记录其内容、时间戳和md5。由于Github已经不再限制个人免费账号私有仓库的数量,对每个仓库的大小也几乎没有限制(只有单个文件100M的大小限制),因此可以把Github作为存储服务器,新建一个私人仓库,将每条记录提交到Github,客户端按需拉取记录并和本地记录比对即可。
说是一套代码即可跨平台,但在实际开发中还是遇到挺多坑的。
首先,Quasar v2基于Vue3,开发出的其实本质上是一个基于js的网页应用,它本身不提供读取系统剪贴板的接口。所以光是对剪贴板的操作,就只能分别使用Electron和Cordova/Capacitor来对桌面端和移动端进行区分操作。Electron和Capacitor都有官方接口或插件支持操作系统剪贴板,Cordova作为Capacitor的前辈,则只能使用第三方提供的插件。
其次,在给用户授权Github登录时,没有找到一个很好的客户端本地验证oAuth2登录的方法,最后只能搭了个服务器,用php+redis来做临时验证。
然后,在使用Github API的时候,提交和拉取纯文本和二进制文件类型令我纠结了好久,最终还不得不修改了使用的API插件的代码。另外,Github获取某个路径下文件目录的方法(repository.getContent)比较简单,无法限制数量也无法排序,只能从最旧的开始获得最多1000个文件列表。无奈之下,只能在每次拉取文件目录后将旧文件删除,只保留最新的500个文件。
最后,手机端很少有能将图片复制进剪贴板的,通常对图片的操作只能使用分享功能。在这方面,能找到的唯一一个比较简单的方法是使用Cordova的第三方插件,接收其他app的分享,也可以将图片分享到其他app。
这些只是目前遇到的坑,后续完善过程中肯定还会遇到其他困难。不过Quasar也是有很多优势的,开发快、提供了很多开箱即用又美观的页面组件和动画、文档也比较完善。
目前这个工具已经有了一个能凑合用的版本,在Github上开源了,需要的可以自取。当前版本还缺少一些设置项,iOS和Linux虽然理论上也支持,但还没有编译和测试,有需要可以自行编译。