全平台、开源的 AirDrop:打通跨平台文件传输

本文最后更新于 <span id="expire-date"></span> 天前,文中部分描述可能已经过时。

如果要我选最爱的苹果功能,必定是 AirDrop。

在接触 AirDrop 前,我一直用着笨笨的文件传输方法——以 QQ 作为中转。需要经历「添加好友-上传文件-下载文件」的复杂流程。既耗时,又费力。

AirDrop 有什么好?

同类竞品堆满各式各样的功能;苹果却始终保持克制,一直做减法。相较而言,AirDrop 操作逻辑更符合使用直觉。只需两步:分享文件(一)然后选择对象(二)。

airdrop-screenshot

在《设计心理学》一书说过,「好的设计有两个重要特征:可视性(discoverability)及易通性(understanding)。」AirDrop 符合两个特征。

可视性:所设计的产品能不能让用户明白怎样操作是合理的,在什么位置及如何操作。

易通性:所有设计的意图是什么,产品的预设用途是什么,所有不同的控制和装置起到什么作用。

可视性:

  • 在入口位于点击分享后最显眼的地方。

易通性:

  • 选择 AirDrop 后,立刻出现目标设备选项,设计用意明显。
  • 设计用途就是分享、发送,没有其他功能。

AirDrop 什么都好,易用、速度颇快(33Mbps+)。谈起它,却绕不开仅限苹果设备使用的硬伤。

作者群的 @陳川端 有天提出疑惑,有沒有支持跨平台的 AirDrop 呢?

image-20210607205724533

有个工具不但和 AirDrop 一样好用,还开源全平台支持、免费

它就是我们今天的主角——Snapdrop。

Snapdrop —— 开源、跨平台

受 AirDrop 启发诞生,Snapdrop 功能和界面与 AirDrop 十分相像。

Snapdrop 只保留了最核心特性:

  • 文件传输
  • 开箱即用
  • 跨平台,只要有浏览器便能用(安卓、iOS、Windows、macOS、Linux)
  • 离线使用

开箱即用

只要两个设备在同一个局域网,并且同时打开 snapdrop.net 便能使用。无需任何设置,也不用下载客户端、捣弄端口。这是我看过最简单的文件传输方式之一。

你获得一个暂时名称作为当前设备的识别码。在截图中,本机的识别码是 Lavender Marten,在局域网发现了台 iOS iPad 叫 Gray Hyena。巧合的是,名字组合规律是【颜色 + 动物】。前者是薰衣草貂,后者是灰色鬣狗。或许这就是程序员的情趣吧。

image-20210608150526922

类似 AirDrop,点击设备图标选取发送对象。左键在 macOS 上会弹出 Finder 文件窗口,选中文件即可发送。

如果右键点击设备图标,则会唤出文字输入框,能发送文字到目标设备。还不快发送情话给你的心仪对象,展开轰轰烈烈的爱情?

image-20210608150116142

理论上,需要浏览器支持 WebRTC API 才能使用。Chrome、Firefox 在 2012 年的版本已经支持 WebRTC,市面主流浏览器都支持。现在应该没人还用 IE 了吧?

image-20210608142442085

PWA

在第一次用 Snapdrop 时,Chromium 内核浏览器(e.g. Chrome、Edge)会询问你是否要安装 Snapdrop。PWA 有着轻量化的优势,占用空间小到可以忽略。

image-20210607202322618

在测试过程中,我还发现 Snapdrop 支持 PWA 一个重要的特性——离线使用

Snapdrop 网页会自动进行缓存。之后就算没有连接到互联网,就像一个安装好的 App 一般,你仍然能打开 Snapdrop,进行局域网文件传输。

另外它也支持系统通知,当授予通知权限后,每当有新的文件传输完成,便会以原生通知形式出现。

image-20210608153833915

速度

这个速度和 AirDrop 相比,实在拉胯。AirDrop 能跑满 802.11n 的宽带(33 Mbps),Snapdrop 显然还差得远。不过,又不是不能用对吧?发送一些小文件非常好用。

文件大小 / 类型 第一次测试用时 第二次测试用时 平均速度
160MB 的 .pkg 文档 65 s 60 s 20.48 Mbps
50MB .RAW 格式照片 27 s 40 s 11.92 Mbps
1.6MB .HEIC 照片 2 s 1.3 s 7.76 Mbps

奇怪的是,从 iPhone 发送 .HEIC 照片到 macOS 电脑时,会自动转换成 .JPEG。 好像是 Safari 为了保证兼容性做的自动转换。要避免格式转换,把照片存到 iOS 的文档 App,在选择文件的时候,别选照片,而是选文件。

隐私

Snapdrop 在隐私方面让我颇为放心。

第一,它是开源的。

第二,Snapdrop 承诺 他们不会存储任何用户资料。

第三,技术上用户隐私得以保护。WebRTC 在文件传输时自行加密,防止其他人(包括 Snapdrop 团队)窥探用户文档。

如果以上无法打动你,你甚至可以托管你的 Docker 映像,建立私人的 Snapdrop 网页。

客户端

虽然我觉得 PWA 已经足够好用,你仍然能使用开源社区为 Snapdrop 开发的第三方客户端。

  1. 基于 Electron 的 桌面端
  2. 安卓端:GitHubGoogle Play
  3. Node App

原理

Snapshare 使用 WebRTC 协议提供的 P2P[1] 功能。

WebRTC 受 Apple、Google、Microsoft、Mozilla、Opera 支持,是 W3C 下的开源、免费标准。开发者利用简单的 API 接口,就能在浏览器开发端对端实时通信的网络应用。

WebRTC 定义了三个常用的 Javascript API:

  • getUserMedia 获取用户机器上的多媒体文档。
  • RTCPeerConnection 建立 P2P 连接。负责信号处理、编码、端对端通信、安全、宽带管理。
  • RTCDataChannel 双向传输数据。

两个 peers 之间,不会「嘛哩嘛哩哄」神奇地便连接起来了。能看到原理图中,两个客户端之外,还有一个节点称作 Signaling 服务器。

mermaid-diagram-20210608164039

说好的 P2P 去中心化,怎么冒出来一个服务器呢?这个 Signaling 服务器还不归 WebRTC 标准管。

Signaling 服务器的作用类似相亲里的媒人。一开始,两个客户端互不认识。他们需要一个中介人去介绍,才知道另一方的存在,而后使用 WebRTC 定义的 API 进行 P2P 连线及数据传输。就像相亲中,通过媒人相识,而后才能约出来吃饭。

没相亲过,应该是这样吧。(逃

两个客户端发现对方后,文档传输的过程确实是 P2P,不像使用公有云(e.g. 百度网盘、iCloud)一般依赖中央服务器上传下载。

结语

Snapdrop 是我目前找到最简单的跨平台文件传输方式。过去好的文件传输要不就要下载客户端,要不就要使用命令行。对普通用户的学习成本不低。它并非一个速度快的传输方式,却是最容易上手的方法。很适合一些日常场景中文件大小不高的文件发送。

参考

  1. 30-26之 WebRTC 的 P2P 即時通信與小範例
  2. 30-27之 WebRTC 的 Signaling Server
  3. 题图:Computer Vectors by Vecteezy

  1. 对等式网络(英語:peer-to-peer, 简称P2P),又称点对点技术,是无中心服务器、依靠用户群(peers)交换信息的互联网体系,它的作用在于,减低以往网路传输中的节点,以降低资料遗失的风险。与有中心服务器的中央网络系统不同,对等网络的每个用户端既是一个节点,也有服务器的功能,任何一个节点无法直接找到其他节点,必须依靠其户群进行信息交流。摘自维基百科「对等网络」 词条 ↩︎

本文作者:Hays Chan | 陈希

本文链接: https://blog.haysc.tech/snapdrop-for-all/

本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!

评论

您所在的地区可能无法访问 Disqus 评论系统,请切换网络环境再尝试。