- Added automatic cleanup of old notifications after 60 days - Added deduplicateItems function to prevent the same notification to appear multiple times - Fixed timestamp
3.3 KiB
3.3 KiB
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
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
- Clone the repository:
git clone <repository-url>
cd <project-directory>
- Install dependencies:
npm install
-
Copy google-services.json to root directory and delete .gitignore file (or comment out google-services.json)
-
Use EAS to build and follow along
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:
{
"title": "Notification Title",
"body": "Notification message text",
"data": {
"category": "utility",
"link": "https://example.com",
"timestamp": 1760734800
}
}
category- Optional. Defaults to "utility" if not providedlink- Optional. Set to "#" if no link should be showntimestamp- 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 }
- Headers:
-
POST /unregister-token - Unregister device
- Headers:
X-API-Key: <your-api-key> - Body:
{ token, platform, app_ver, locale, topics }
- Headers:


