171
android-app/README.md
Archivo normal
171
android-app/README.md
Archivo normal
@@ -0,0 +1,171 @@
|
||||
# ChatRTC - Android WebRTC Chat Application
|
||||
|
||||
A modern Android chat application with WebRTC support for audio/video calling and emoji text messaging.
|
||||
|
||||
## Features
|
||||
|
||||
- **Nickname-based joining**: Users only need to enter their nickname to join the chat
|
||||
- **Text messaging with emoji support**: Full emoji keyboard and rendering support
|
||||
- **Audio/Video calling**: WebRTC-powered audio and video communication
|
||||
- **Modern UI**: Material Design components with beautiful chat bubbles
|
||||
- **Camera controls**: Toggle video, mute audio, and switch between front/back cameras
|
||||
- **Real-time communication**: Instant messaging and WebRTC peer-to-peer connections
|
||||
|
||||
## Project Structure
|
||||
|
||||
```
|
||||
chatrtc/
|
||||
├── app/ # Android application
|
||||
│ ├── src/main/java/com/chatrtc/app/
|
||||
│ │ ├── MainActivity.java # Nickname entry screen
|
||||
│ │ ├── ChatActivity.java # Main chat interface
|
||||
│ │ ├── adapter/
|
||||
│ │ │ └── ChatAdapter.java # RecyclerView adapter for messages
|
||||
│ │ ├── model/
|
||||
│ │ │ └── ChatMessage.java # Message data model
|
||||
│ │ └── webrtc/
|
||||
│ │ └── WebRTCManager.java # WebRTC connection management
|
||||
│ └── src/main/res/ # Android resources
|
||||
└── signaling-server/ # Node.js signaling server
|
||||
├── server.js # Socket.IO signaling server
|
||||
└── package.json # Server dependencies
|
||||
```
|
||||
|
||||
## Setup Instructions
|
||||
|
||||
### 1. Android App Setup
|
||||
|
||||
1. **Prerequisites**:
|
||||
- Android Studio Arctic Fox or later
|
||||
- JDK 8 or later
|
||||
- Android SDK API 24+ (Android 7.0)
|
||||
|
||||
2. **Open the project**:
|
||||
```bash
|
||||
cd chatrtc
|
||||
# Open in Android Studio
|
||||
```
|
||||
|
||||
3. **Configure signaling server URL**:
|
||||
- Open `app/src/main/java/com/chatrtc/app/webrtc/WebRTCManager.java`
|
||||
- Update the `SIGNALING_SERVER_URL` constant with your server URL:
|
||||
```java
|
||||
private static final String SIGNALING_SERVER_URL = "https://your-server.com";
|
||||
// For local development: "http://10.0.2.2:3000"
|
||||
```
|
||||
|
||||
4. **Build and run**:
|
||||
- Connect your Android device or start an emulator
|
||||
- Click "Run" in Android Studio
|
||||
|
||||
### 2. Signaling Server Setup
|
||||
|
||||
1. **Install Node.js**: Download from [nodejs.org](https://nodejs.org/)
|
||||
|
||||
2. **Install dependencies**:
|
||||
```bash
|
||||
cd signaling-server
|
||||
npm install
|
||||
```
|
||||
|
||||
3. **Start the server**:
|
||||
```bash
|
||||
npm start
|
||||
# or for development with auto-restart:
|
||||
npm run dev
|
||||
```
|
||||
|
||||
4. **Server will run on**: `http://localhost:3000`
|
||||
|
||||
## Usage
|
||||
|
||||
1. **Start the signaling server** (see setup instructions above)
|
||||
2. **Install and run the Android app** on your device(s)
|
||||
3. **Enter your nickname** on the welcome screen
|
||||
4. **Grant permissions** for camera and microphone when prompted
|
||||
5. **Start chatting**:
|
||||
- Send text messages with emoji support
|
||||
- Toggle video/audio using the control buttons
|
||||
- Switch cameras using the camera switch button
|
||||
- Multiple users can join the same chat room
|
||||
|
||||
## Key Components
|
||||
|
||||
### Android App
|
||||
|
||||
- **MainActivity**: Handles nickname entry and permissions
|
||||
- **ChatActivity**: Main chat interface with video views and message list
|
||||
- **WebRTCManager**: Manages WebRTC connections, media streams, and signaling
|
||||
- **ChatAdapter**: Handles different message types (own, other, system)
|
||||
- **Emoji Support**: Uses Vanniktech emoji library for full emoji rendering
|
||||
|
||||
### WebRTC Features
|
||||
|
||||
- **Peer-to-peer connections**: Direct audio/video streams between users
|
||||
- **Data channels**: For text message transmission
|
||||
- **STUN servers**: Google's STUN servers for NAT traversal
|
||||
- **Camera management**: Front/back camera switching
|
||||
- **Media controls**: Toggle audio/video streams
|
||||
|
||||
### Signaling Server
|
||||
|
||||
- **Socket.IO based**: Real-time bidirectional communication
|
||||
- **Room management**: Users join a common chat room
|
||||
- **WebRTC signaling**: Handles offer/answer/ICE candidate exchange
|
||||
- **User management**: Tracks connected users and broadcasts join/leave events
|
||||
|
||||
## Dependencies
|
||||
|
||||
### Android
|
||||
- **WebRTC**: `org.webrtc:google-webrtc:1.0.32006`
|
||||
- **Socket.IO**: `io.socket:socket.io-client:2.0.1`
|
||||
- **Emoji Support**: `com.vanniktech:emoji-google:0.16.0`
|
||||
- **Material Design**: `com.google.android.material:material:1.9.0`
|
||||
|
||||
### Server
|
||||
- **Express**: Web server framework
|
||||
- **Socket.IO**: Real-time communication
|
||||
- **CORS**: Cross-origin resource sharing
|
||||
|
||||
## Network Configuration
|
||||
|
||||
For local development, the app includes network security configuration to allow HTTP connections to localhost and common local IP addresses.
|
||||
|
||||
## Permissions
|
||||
|
||||
The app requires:
|
||||
- `CAMERA`: For video calling
|
||||
- `RECORD_AUDIO`: For audio calling
|
||||
- `MODIFY_AUDIO_SETTINGS`: For audio management
|
||||
- `INTERNET`: For signaling server connection
|
||||
- `ACCESS_NETWORK_STATE`: For network status
|
||||
|
||||
## Deployment
|
||||
|
||||
### Android App
|
||||
- Build APK: `./gradlew assembleDebug`
|
||||
- Install: `adb install app/build/outputs/apk/debug/app-debug.apk`
|
||||
|
||||
### Signaling Server
|
||||
- Deploy to any Node.js hosting service (Heroku, Railway, etc.)
|
||||
- Update the `SIGNALING_SERVER_URL` in the Android app
|
||||
- Ensure HTTPS is used for production (required by WebRTC)
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
1. **Connection issues**: Check signaling server URL and network connectivity
|
||||
2. **Permission errors**: Ensure camera/microphone permissions are granted
|
||||
3. **Video not showing**: Check camera availability and permissions
|
||||
4. **Audio not working**: Verify microphone permissions and device audio settings
|
||||
|
||||
## Contributing
|
||||
|
||||
1. Fork the repository
|
||||
2. Create your feature branch
|
||||
3. Commit your changes
|
||||
4. Push to the branch
|
||||
5. Create a Pull Request
|
||||
|
||||
## License
|
||||
|
||||
This project is open source and available under the MIT License.
|
||||
Referencia en una nueva incidencia
Block a user