iPhone 和安卓之间传文件,怎么就这么难
做移动端开发时经常需要跨设备传文件,iPhone 和安卓之间传文件特别痛苦。用 WebRTC 做了一个局域网 P2P 传输工具,两周迭代了 18 个 commit。
传个文件怎么就这么难
做移动端开发的时候,我经常需要在电脑和手机之间传文件。在 Mac 和 iPhone 之间有 AirDrop,还算方便。但如果是 iPhone 和安卓之间呢?
- 蓝牙太慢
- 微信传文件有大小限制,还会压缩
- 邮件附件也有限制
- USB 线在手边不一定有
每次遇到这个场景我都很烦。明明两台设备就在手边,传个文件却要折腾半天。
我决定在 metool 上做一个 局域网文件传输工具。
浏览器端 P2P 传输
技术方案用了 WebRTC:两台设备打开同一个网页,通过邀请码建立点对点连接,文件直接在设备之间传输,不经过服务器。

第一版做了基础功能:
- 4 位数字邀请码配对
- 二维码扫码连接(手机扫一下就行)
- 文件和文本都能传
- 传输过程加密
但发布后发现,真实场景比想象的复杂得多。
两周,18 个 commit
从 11 月 12 日到 11 月 21 日,这个功能我迭代了 18 个 commit。是 metool 里单个功能迭代密度最高的一次。
大文件分块传输 — 大文件不能一次性发送,要分块。每块用 Map 追踪接收状态,某一块失败了自动重传,不用重发整个文件。
批量文件支持 — 不只传一个文件,要能一次选多个文件发送。
iOS 兼容 — iOS Safari 对多文件传输有限制,需要特殊处理。还要提示用户调整浏览器的自动下载设置。
校园网/办公网 — 这类网络可能限制 P2P 连接。加了网络限制检测和提示,建议用户开手机热点作为替代方案。
代理环境 — 开了代理的设备连接行为不同,加了说明。
连接体验 — 邀请码从 6 位简化到 4 位纯数字,合并了扫码和手动输入的 UI,优化了连接状态的实时反馈。
一个功能的极致打磨
这两周的经历让我体会到一个道理:做一个功能"能用"很快,做到"好用"要花十倍的时间。
初版半天就做完了,但覆盖各种边界场景、各种设备兼容性、各种网络环境,花了两周。每次觉得"应该差不多了",真实使用的时候又会冒出新问题。
但这也是个人项目的好处:没有人催进度,可以把一个功能打磨到自己满意为止。
评论
评论基于 GitHub Discussions,请先 登录 GitHub 后发表评论。