frontend-app/README.md
Florian ed7c6d630c Fixed notifications not being saved unless you clicked on them
- Added automatic cleanup of old notifications after 60 days
- Added deduplicateItems function to prevent the same notification to appear multiple times
- Fixed timestamp
2025-10-18 19:40:16 +02:00

120 lines
3.3 KiB
Markdown

# Notifier app
A React Native mobile application for receiving push notifications.
## Features
- **Secure API Authentication** - API key-based authentication to connect to the `backend-api`
- **Notification Storage** - Notifications are saved locally and deleted after 60 days
- **Category Organization** - Notifications are organized into categories and a complete history is displayed in Home
- **Drawer Navigation** - Easy navigation between different notification categories
- **Interactive Links** - Tap on notification links to open them in your device's browser
- **Logout Functionality** - Securely unregister your device and clear all local data
<p align="center">
<img src="assets/images/main_menu.jpg" alt="Main Menu" width="30%"/>
<img src="assets/images/sidemenu.jpg" alt="Side Menu" width="30%"/>
<img src="assets/images/rr_category.jpg" alt="RR Category" width="30%"/>
</p>
## Prerequisites
- Node.js (v14 or higher)
- Firebase account with google-services.json
- Expo account with Firebase Admin SDK private key imported
- Installed eas-cli
- Android SDK 36
- Physical Android device (push notifications don't work on simulators/emulators)
- API key
## Building from scratch
1. Clone the repository:
```bash
git clone <repository-url>
cd <project-directory>
```
2. Install dependencies:
```bash
npm install
```
3. Copy google-services.json to root directory and delete .gitignore file (or comment out google-services.json)
4. Use EAS to build and follow along
```bash
eas build --profile release --local --platform android
```
## Configuration
### Backend URL
The app connects to the notification backend at:
```
https://notifier.gansejunge.com
```
To change this, modify the `API_URL` constant in `index.tsx`.
### Categories
Categories are defined in `types/Category.ts`. Special categories:
- **Home** - View all notifications
- **Utility** - Default category for uncategorized notifications
## Technical Details
### Notification Data Structure
Notifications should include the following data fields from your backend:
```json
{
"title": "Notification Title",
"body": "Notification message text",
"data": {
"category": "utility",
"link": "https://example.com",
"timestamp": 1760734800
}
}
```
- `category` - Optional. Defaults to "utility" if not provided
- `link` - Optional. Set to "#" if no link should be shown
- `timestamp` - Optional. Defaults to when the notification was received when empty
## Project Structure
```
├── index.tsx # Main app component
├── hooks/
│ ├── usePushNotifications.ts # Push notification registration
│ └── useNotificationListener.ts # Notification receiving and storage
├── types/
│ ├── Category.ts # Category definitions
│ └── Item.ts # Notification item type
└── styles/
└── styles.ts # App styling
```
## API Endpoints
The app communicates with these backend endpoints:
- **POST /register-token** - Register device for push notifications
- Headers: `X-API-Key: <your-api-key>`
- Body: `{ token, platform, app_ver, locale, topics }`
- **POST /unregister-token** - Unregister device
- Headers: `X-API-Key: <your-api-key>`
- Body: `{ token, platform, app_ver, locale, topics }`