Smartsapp
A fully cross-platform messenger app with End to End Encryption (E2EE).
Demo
NOTE: The features shown in the demo is not exhaustive. Only the core features are showcased in the demo.
Platforms Supported
- Desktop: Windows, Linux, MacOS
- Mobile: Android, iOS
- Website: Any device with a browser
Back-end Setup
The back-end of the app is handled by Firebase
.
Basic Setup
- Go to firebase console and create a new project with the name
Smartsapp
- Enable
Google Analylitics
App Setup
- Create an
App
for the project from the overview page - Copy and paste the configurations in the required location (given in the readme of the respective apps)
Auth Setup
- Go to the project
Authentication
section - Select
Sign-in method
tab - Enable
Email/Password
andGoogle
sign in
Firestore Setup
- Go to the project
Firestore
section - Create firestore provisions for the project (choose the server nearest to your location)
- Go to the
Rules
tab and use the fillowing rules:rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /contacts/{uid} { allow read, create, update: if request.auth != null; } match /keys/{uid} { allow read, create: if request.auth != null && request.auth.uid == uid; } match /messages/{msg} { allow read, create: if request.auth != null; } match /users/{uid} { allow read: if request.auth != null; allow create, update: if request.auth != null && request.auth.uid == uid; } } }
- Go to the
Indexes
tab and create the following index:{ collection: "messages", fields: { users: Ascending, timestamp: Descending, }, queryScope: Collection }
Storage Setup
- Go to the project
Storage
section - Create storage provisions for the project (choose the server nearest to your location)
- Go to the rules tab and use the fillowing rules:
rules_version = '2'; service firebase.storage { match /b/{bucket}/o { match /profilepic/{uid} { allow read: if request.auth != null; allow create, update: if request.auth != null && request.auth.uid == uid && request.resource.size < 1024 * 1024 && request.resource.contentType.matches('image/.*'); } match /media/{media} { allow read: if request.auth != null; allow create: if request.auth != null && request.resource.size < 1024 * 1024 && request.resource.contentType.matches('image/.*'); } } }
Note
Running the E2EE Key Generator Server is necessary for all Platforms