feat: Implement Firebase Cloud Messaging (FCM) integration documentation for push notifications docs: Outline remaining tasks for complete FCM integration in the project fix: Resolve WebSocket connection issues after user registration
7.0 KiB
7.0 KiB
🔔 Что еще нужно для полной интеграции FCM (Push-уведомления)
✅ Уже реализовано
-
Android клиент:
- ✅ Firebase SDK добавлен в dependencies
- ✅
RosettaFirebaseMessagingService- обработка уведомлений - ✅
MainActivity- инициализация Firebase и отправка токена - ✅ Packet
PacketPushToken(0x0A) для отправки токена на сервер - ✅ Разрешения
POST_NOTIFICATIONSв AndroidManifest - ✅ Сервис зарегистрирован в манифесте
-
Документация:
- ✅
FCM_SETUP.mdс полной архитектурой и примерами - ✅
google-services.json.example- пример конфига
- ✅
⚠️ Нужно сделать
1. Firebase Console Setup
-
Получить google-services.json:
# 1. Зайти на https://console.firebase.google.com/ # 2. Создать/выбрать проект # 3. Добавить Android приложение # 4. Указать package name: com.rosetta.messenger # 5. Скачать google-services.json # 6. Положить в rosetta-android/app/ -
Важно: Файл
google-services.jsonдолжен быть в gitignore (уже есть пример .example)
2. Серверная часть
Нужно реализовать на сервере:
2.1 Обработка PacketPushToken (0x0A)
// Сервер должен сохранить FCM токен для пользователя
when (packetType) {
0x0A -> { // PacketPushToken
val pushToken = PacketPushToken.deserialize(stream)
// Сохранить в базе данных:
// user_fcm_tokens:
// - public_key (primary key)
// - fcm_token (string)
// - platform ("android")
// - updated_at (timestamp)
saveFcmToken(
publicKey = pushToken.publicKey,
fcmToken = pushToken.pushToken,
platform = pushToken.platform
)
}
}
2.2 Отправка Push-уведомлений
Когда приходит новое сообщение для пользователя:
// Псевдокод для сервера
fun onNewMessage(toPublicKey: String, fromPublicKey: String, message: String) {
// 1. Получить FCM токен получателя
val fcmToken = getFcmToken(toPublicKey) ?: return
// 2. Отправить уведомление через Firebase Admin SDK
val notification = Message.builder()
.setToken(fcmToken)
.setNotification(
Notification.builder()
.setTitle(getSenderName(fromPublicKey))
.setBody(message)
.build()
)
.putData("sender_public_key", fromPublicKey)
.putData("message", message)
.build()
FirebaseMessaging.getInstance().send(notification)
}
2.3 Firebase Admin SDK (Node.js пример)
// На сервере установить:
// npm install firebase-admin
const admin = require("firebase-admin");
const serviceAccount = require("./serviceAccountKey.json");
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
});
async function sendPushNotification(fcmToken, senderName, messageText) {
const message = {
token: fcmToken,
notification: {
title: senderName,
body: messageText,
},
data: {
sender_public_key: senderPublicKey,
message: messageText,
},
android: {
priority: "high",
notification: {
sound: "default",
channelId: "rosetta_messages",
},
},
};
try {
const response = await admin.messaging().send(message);
console.log("✅ Push sent:", response);
} catch (error) {
console.error("❌ Push failed:", error);
}
}
3. Тестирование
3.1 Проверка получения токена
# После запуска приложения проверить в logcat:
adb logcat -s RosettaFCM
# Должно быть: 🔔 FCM token: ...
3.2 Отправка тестового уведомления
Через Firebase Console:
- Зайти в Firebase Console → Cloud Messaging
- Создать тестовое уведомление
- Указать FCM token из logcat
- Отправить
3.3 Проверка работы сервера
- Запустить приложение
- Убедиться что
PacketPushTokenотправился на сервер (логи протокола) - Отправить сообщение с другого аккаунта
- Проверить что пришло push-уведомление
4. Оптимизации (опционально)
-
Обработка обновления токена:
- FCM токен может меняться
onNewToken()вRosettaFirebaseMessagingServiceуже обрабатывает это- Сервер должен обновлять токен в БД
-
Разные типы уведомлений:
// Можно добавить в PacketPushToken поле notification_settings data class NotificationSettings( val showPreview: Boolean = true, // Показывать текст сообщения val vibrate: Boolean = true, val sound: Boolean = true ) -
Проверка валидности токена:
- Сервер может проверять что токен валиден через Firebase Admin API
- Удалять невалидные токены из БД
📝 Чеклист готовности
- Android: Firebase SDK добавлен
- Android: FCM Service создан
- Android: PacketPushToken добавлен
- Android: MainActivity отправляет токен
- Firebase: google-services.json получен и добавлен
- Сервер: Обработка PacketPushToken
- Сервер: Firebase Admin SDK настроен
- Сервер: Отправка push при новых сообщениях
- Тестирование: Получение токена работает
- Тестирование: Push-уведомления приходят
🚀 Следующий шаг
Сейчас нужно:
- Получить
google-services.jsonиз Firebase Console - Добавить его в
rosetta-android/app/google-services.json - Реализовать серверную часть (обработка PacketPushToken + отправка push)
- Протестировать end-to-end