Giter Club home page Giter Club logo

simonbengtsson / airdash Goto Github PK

View Code? Open in Web Editor NEW
479.0 7.0 98.0 5.01 MB

File sharing flutter webrtc app enabling sending files to any device from anywhere

Home Page: https://airdash-project.web.app

License: MIT License

Kotlin 0.53% JavaScript 1.60% Dart 65.39% Ruby 1.37% Swift 8.19% Objective-C 0.01% HTML 9.50% CMake 5.97% C++ 7.16% C 0.29%
flutter flutter-app flutter-apps production-app flutter-ci flutter-desktop app-store-connect firebase-firestore firebase-functions webrtc webrtc-signaling file-sharing file-transfer peer-to-peer

airdash's Introduction

AirDash File Sharing

Transfer photos and files to any device.

Get the app

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_env to 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.

airdash's People

Contributors

brianjbuck avatar erikhellq avatar simonbengtsson avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

airdash's Issues

Airdash Android App Heavy UI Stutter

Hello I noticed a weird bug where after installing and opening arc the apps ui performance rapidly degrades until multiple elements are non functional.

Airdash Version 2.0.146

Device: Oneplus 8

Build Number (OS):
TD1A.221105.001
PixelExperience_Plus_instantnoodle-13.0-20221112-2001-OFFICIAL

Airdash.Stutter.Part.1.mp4
Airdash.Stutter.Part.2.mp4

I've tried clearing device cache and that doesn't seem to work.

Clearing storage or uninstalling and reinstalling does temporarly fix the issue but after 30 seconds issues reoccur.

Not send files in Windows 10/11

When sending a file to another device, the message below appears:

Could not reach the receiving device. Ensure it is connected to the internet ad has AirDash open.

However, the computer is connected to the internet and AirDash is open on the other device.

Failed to build project

Launching lib/main.dart on M2102J20SG in debug mode...
Running Gradle task 'assembleDebug'...
lib/config.dart:3:8: Error: Error when reading 'lib/env.dart': No such file or directory
import 'env.dart';
       ^
lib/config.dart:14:17: Error: Undefined name 'environment'.
    var value = environment[key];
                ^^^^^^^^^^^
Target kernel_snapshot failed: Exception


FAILURE: Build failed with an exception.

* Where:
Script '/home/michael_k/flutter/packages/flutter_tools/gradle/flutter.gradle' line: 1151

* What went wrong:
Execution failed for task ':app:compileFlutterBuildDebug'.
> Process 'command '/home/michael_k/flutter/bin/flutter'' finished with non-zero exit value 1

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 3m 37s
Exception: Gradle task assembleDebug failed with exit code 1

Congratulations + questions ?

Supports nearly every OS and works beautifully.

This may be the ultimate Airdrop alternative for all the operating systems.

Thanks for sharing.

Two questions:

  1. I assume the files are not encrypted before sending. Is there any other encryption involved other than the TLS encryption during file transfer?

  2. Is file transfer always peer to peer without any relays?

Failed to build project

FAILURE: Build failed with an exception.

  • What went wrong:
    Execution failed for task ':app:processDebugGoogleServices'.

File google-services.json is missing. The Google Services Plugin cannot function without it.
Searched Location:
C:\Users\pc\Desktop\airdash-main\android\app\src\debug\google-services.json
C:\Users\pc\Desktop\airdash-main\android\app\src\google-services.json
C:\Users\pc\Desktop\airdash-main\android\app\google-services.json

  • Try:
    Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

  • Get more help at https://help.gradle.org

BUILD FAILED in 10m 2s
Exception: Gradle task assembleDebug failed with exit code 1

Connection Failed

Hello sir.
I cloned your git on my PC and replace firebase configuration and run the project.
The project is running successfully.
After paring two devices, when send file, I am getting connection error.

When create my firestore, I don't know about collection data.
so, I used the below json to set simple_peer settings.

 {
    "provider": "google",
    'iceServers': [
      {'url': 'stun:stun.l.google.com:19302'},
    ],
  }

I don't know what is issue.

Could you help me to run the project successfully?

Thank you

Feature Request: Hide to Menu Bar (Mac OS)

Is it possible to add an option to hide airdash to the mac menu bar? With KDE connect or android, there are options to drag files to the menu bar in order to send the files to another client for easy access.

Examples:
image

image

Different networks

Do the devices have to be on the same network?

I think this is a very restrictive thing. As an example;

PC: WiFi 2.4GHZ
MOBILE: WiFi 5GHZ

File transfer between these devices should be possible.

Pub get failed

I have failed to run pub get after clone the project.
Looks like the path is not existed.

pub get failed (66; Because airdash depends on simple_peer from path which doesn't exist (could not find package simple_peer at "libs/simple_peer"), version solving failed.)

showing black screen

/FlutterLoader( 5647): Flutter initialization failed.
E/FlutterLoader( 5647): java.util.concurrent.ExecutionException: java.lang.UnsatisfiedLinkError: dlopen failed: library "libflutter.so" not found
E/FlutterLoader( 5647): at java.util.concurrent.FutureTask.report(FutureTask.java:123)
E/FlutterLoader( 5647): at java.util.concurrent.FutureTask.get(FutureTask.java:193)
E/FlutterLoader( 5647): at io.flutter.embedding.engine.loader.FlutterLoader.ensureInitializat
E/FlutterLoader( 5647): at io.flutter.embedding.engine.FlutterEngine.(FlutterEngine.java:207)
E/FlutterLoader( 5647): at io.flutter.embedding.android.FlutterActivityAndFragmentDelegate.setupFlutterEngine(FlutterActivityAndFragmentDelegate.java:271)
E/FlutterLoader( 5647): at io.flutter.embedding.android.FlutterActivityAndFragmentDelegate.onAttach(FlutterActivityAndFragmentDelegate.java:180)
E/FlutterLoader( 5647): at io.flutter.embedding.android.FlutterActivity.onCreate(FlutterActivity.java:498)
E/FlutterLoader( 5647): at android.app.Activity.performCreate(Activity.java:8000)
E/FlutterLoader( 5647): at android.app.Activity.performCreate(Activity.java:7984)
E/FlutterLoader( 5647): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.ja

E/FlutterLoader( 5647): at android.app.Activity.performCreate(Activity.java:7984)
E/FlutterLoader( 5647): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309)
E/FlutterLoader( 5647): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3422)
E/FlutterLoader( 5647): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601)
E/FlutterLoader( 5647): at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
E/FlutterLoader( 5647): at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
E/FlutterLoader( 5647): at android.app.servertransaction.TransactionExecutor.execute(TransactionE
E/FlutterLoader( 5647): at android.os.Handler.dispatchMessage(Handler.java:106)
E/FlutterLoader( 5647): at android.os.Looper.loop(Looper.java:223)
E/FlutterLoader( 5647): at android.app.ActivityThread.main(ActivityThread.java:7656)
E/FlutterLoader( 5647): at java.lang.reflect.Method.invoke(Native Method)
E/FlutterLoader( 5647): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
E/FlutterLoader( 5647): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
FlutterLoader( 5647): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
E/FlutterLoader( 5647): Caused by: java.lang.UnsatisfiedLinkError: dlopen failed: library "libflutter.so" not found
E/FlutterLoader( 5647): at java.lang.Runtime.loadLibrary0(Runtime.java:1087)
E/FlutterLoader( 5647): at java.lang.Runtime.loadLibrary0(Runtime.java:1008)
E/FlutterLoader( 5647): at java.lang.System.loadLibrary(System.java:1664)
E/FlutterLoader( 5647): at io.flutter.embedding.engine.FlutterJNI.loadLibrary(FlutterJNI.java:141
tterLoader( 5647): at io.flutter.embedding.engine.loader.FlutterLoader$1.call(FlutterLoader.java:189)
E/FlutterLoader( 5647): at io.flutter.embedding.engine.loader.FlutterLoader$1.call(FlutterLoader.java:182)
E/FlutterLoader( 5647): at java.util.concurrent.FutureTask.run(FutureTask.java:266)
E/FlutterLoader( 5647): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
E/FlutterLoader( 5647): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
E/FlutterLoader( 5647): at java.lang.Thread.run(Thread.java:923)

showing this warning

Feature Request: Dart Package

Hi,
I know it would be a bigger work, but it would be really nice to have the functions as a dart package, so you can use it to implement in your own app.

Unable to save file after transfer

Successfully paired Linux desktop -> Android phone (Essential PH-1). Transferred a ringtone. (Gave "storage" permission to airdash) Able to play ringtone in airdash on destination device, but unable to store permanent copy of file on device. File disappears when airdash closes.
Am I doing something wrong?

Sending multiple files at once

Noticed the airdash is only able to send one file at a time and sending multiple files in batch tends to only send the first or last files from android to mac.

cannot deploy backend function

Hi!
i cloned your git and did the changes according to the readme file. I successfully run the project. But couldn't deploy the backend function bcz of deploy --only "pairing" cmd.
ERROR SYAS - Cannot understand what targets to deploy/serve. No targets in firebase.json match '--only pairing.
Should i config the json file or did i miss something?
I'm new starting stage to development and this stuff ! sorry if it is a dumb qns !It would be great if you would help me!

change firebase project id and api key show error

FAILURE: Build failed with an exception.

  • What went wrong:
    Execution failed for task ':flutter_webrtc:compileDebugKotlin'.

Error while evaluating property 'filteredArgumentsMap' of task ':flutter_webrtc:compileDebugKotlin'
Could not resolve all files for configuration ':flutter_webrtc:debugCompileClasspath'.
> Failed to transform android-104.5112.03.jar (com.github.webrtc-sdk:android:104.5112.03) to match attributes {artifactType=android-classes-jar, org.gradle.category=library, org.gradle.libraryelements=jar, org.gradle.status=release, org.gradle.usage=java-api}.
https://jitpack.io/com/github/webrtc-sdk/android/104.5112.03/android-104.5112.03.jar

  • Try:
    Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

  • Get more help at https://help.gradle.org

BUILD FAILED in 32s

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.