运行前必须自建 Firebase 项目并启用 Firestore 和匿名认证,否则无法配对;需先部署 pairing 后端云函数,否则设备配对不可用;默认只用 Google STUN,要支持 TURN 需配置 Twilio 并部署 updateTwilioToken 函数。
airdash
simonbengtssonMIT活跃维护基于 Flutter 和 WebRTC 的跨设备文件传输应用,无需数据线或同一局域网,就能把文件从任意设备发到任意设备。
File sharing flutter webrtc app enabling sending files to any device from anywhere
创建 Firebase 项目并启用 Firestore 与匿名认证,复制 .env.sample 为 .env 填入项目 id 和 Web API key,然后运行:dart tools/scripts.dart app_env
cd functions && npm i && npx firebase deploy --only pairing
flutter runREADME 未说明具体硬件或显存要求;应用支持 iOS、macOS、Windows、Linux 和 Android 平台。
基于 Flutter 和 WebRTC 的跨平台文件传输应用,可向任意设备直传文件
基于 Flutter 和 WebRTC 的跨设备文件传输应用,无需数据线或同一局域网,就能把文件从任意设备发到任意设备。
核心能力
- 用 WebRTC 在设备间直接传输文件与数据
- 端到端加密文件并点对点传输保障隐私
- 支持 iOS、macOS、Windows、Linux、Android 全平台
- 借助原生分享面板与桌面拖拽快速发起传输
- 自动选择 wifi、移动网络等最快可用连接
容易踩的坑
- v2.0.158最新正式版2024-09-02 · 2024-09-02 11:16 UTC
- v2.0.1562024-09-01 · 2024-09-01 17:55 UTC
查看更新说明
What's Changed
- Upgraded libraries and compilation targets
Full Changelog: https://github.com/simonbengtsson/airdash/compare/v2.0.155...v2.0.156
- v2.0.1552024-05-02 · 2024-05-02 18:23 UTC
查看更新说明
Minor quality of life fixes and a major fix on iOS: Now screenshots and other cached files files can be received with share intents https://github.com/KasemJaffer/receive_sharing_intent/pull/290.
- v2.0.1462022-11-19 · 2022-11-19 19:52 UTC
查看更新说明
See what's new in the release notes. Some distribution files are included as assets in this release, but the update will soon be available in all supported app stores.
- v2.0.1422022-11-14 · 2022-11-14 21:47 UTC
查看更新说明
See what's new in the release notes. The msix and apk files are included as assets below, but the update will soon be available in all supported app stores.
用户点评
登录用户的真实使用记录,可按版本和硬件筛选还没有人点评。第一个说出真实体验的人最有价值。
AirDash File Sharing
Transfer photos and files to any device.
Get the app
- Apple App Store (iOS & macOS)
- Homebrew (macOS)
- Google Play (Android)
- Microsoft Store (Windows)
- Snap Store (Linux)
Analytics
Key features
- Support for all major platforms and app stores (iOS, macOS, Windows, Linux and Android)
- Free forever to send any number of files of any size
- Maximum privacy and security by fully encrypting files and transferring them directly between devices
- Quickly start transfers using native mobile share sheet and drag and drop on desktop
- Send files anywhere (no need to be on the same network or nearby)
- Automatically uses the best and fastest connection available (wifi, mobile internet, ethernet etc)
Key technologies
- Flutter 3 (iOS, macOS, Android, Linux and Windows apps)
- WebRTC (file and data transfers)
- Firebase Firestore (WebRTC signaling and config storage)
- Firebase Functions (device pairing and config automation)
- Firebase Hosting (website and static files hosting)
- App Store Connect API and Microsoft Store submission API (release automation)
- Mixpanel (web and app analytics)
- Sentry (app monitoring and error tracking)
Run project
- Create a firebase project (https://console.firebase.google.com) and enable firestore and anonymous authentication
- Create a .env file by duplicating the .env.sample file
- Replace the firebase project id and web API key in the .env file with the ones for your project (firebase console -> project settings)
- Run
dart tools/scripts.dart app_envto get a env.dart file - Deploy pairing backend function by
cd functions && npm i && npx firebase deploy --only pairing - Run app using editor or
flutter run
By default a google stun server is used to connect peers. The simplest way to enable turn servers as well is to use https://www.twilio.com/stun-turn. Create functions/.env file similar to the functions/.env-sample file and deploy the updateTwilioToken backend function.
Contribute
Contributions are very much welcome on everything from bug reports to feature development. If you want to change something major write an issue about it first to ensure it will be considered for merge.
Publish guide (for contributors)
Prepare
- Update libraries
- flutter pub get
- cd ios && pod update
- cd macos && pod update
- Update changelog.md and version in pubspec.yaml and snapcraft.yaml
- git commit -am vX.X.X
- git tag "vX.X.X"
- git push && git push -f --tags
macOS
- flutter build macos
- Archive -> Distribute -> Direct Distribution
- npx appdmg appdmg.json ./build/airdash.dmg
- Distribute with transporter
iOS
- flutter build ipa
- Distribute with Transporter
Android
- flutter build appbundle
- cp build/app/outputs/bundle/release/app-release.aab build/airdash.aab
- open https://play.google.com/console/u/0/developers/6822011924129869646/app/4975414306006741094/tracks/production
- App Bundle Explorer -> Download signed apk -> build/airdash.apk
Windows
- Open Windows in VMWare
- Open ~\Documents\airdash in vs code
- git pull -r && flutter pub get
- dart run msix:create
- Copy msix file to build/airdash.msix
- Create new update -> open https://partner.microsoft.com/en-us/dashboard/products/9NL9K7CSG30T
Linux
- Open Ubuntu in VMWare
- Open ~\Documents\airdash in vs code
- git pull -r && flutter pub get
- snapcraft clean --use-lxd # required
- snapcraft --output build/airdash.snap --use-lxd
- snapcraft upload --release=stable build/airdash.snap
- Copy to mac ./build/airdash.snap (send.vis.ee for example)
Create Github release
- open https://github.com/simonbengtsson/airdash/releases/new
- Attach
- build/airdash.apk
- build/airdash.dmg
- build/airdash.msix
- build/airdash.snap