Ответ
У меня есть опыт полного цикла интеграции push-уведомлений в Flutter-приложения, от настройки до глубокой кастомизации обработки.
1. Базовая настройка с Firebase Cloud Messaging (FCM): Я настраивал FCM для проектов на Android, iOS и Web.
- Добавление конфигурационных файлов (
google-services.json,GoogleService-Info.plist). - Настройка entitlements и capabilities для iOS (Push Notifications, Background Modes).
- Реализация запроса разрешений с учётом платформенных особенностей.
Future<void> requestPermissions() async { FirebaseMessaging messaging = FirebaseMessaging.instance; NotificationSettings settings = await messaging.requestPermission( alert: true, badge: true, sound: true, ); if (settings.authorizationStatus == AuthorizationStatus.authorized) { print('Разрешение получено'); } }
2. Обработка уведомлений во всех состояниях приложения: Ключевая задача — корректно обработать уведомление, где бы ни было приложение.
// 1. Foreground
FirebaseMessaging.onMessage.listen((RemoteMessage message) {
// Показываем своё уведомление, т.к. системное не появится.
showLocalNotification(message);
});
// 2. Background/Терминировано (требуется статический/глобальный обработчик)
@pragma('vm:entry-point')
Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage message) async {
// Инициализируем Firebase в изоляте.
await Firebase.initializeApp();
// Обрабатываем данные уведомления.
handleNotificationData(message.data);
}
// Регистрируем обработчик в main()
FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler);
3. Глубокие ссылки и кастомные действия:
Я использовал пакет flutter_local_notifications для отображения кастомных уведомлений с действиями (actions) и передавал в payload данные для навигации внутри приложения.
// При инициализации канала уведомлений добавляем действия.
const AndroidNotificationDetails androidDetails = AndroidNotificationDetails(
'channel_id',
'Channel Name',
actions: [
AndroidNotificationAction('reply', 'Ответить', showsUserInterface: true),
],
);
// При тапе на уведомление или действие извлекаем payload и перенаправляем пользователя.
4. Тестирование и отладка: Я использовал консоль Firebase, Postman для отправки тестовых уведомлений и тщательно логировал токены устройств и статусы доставки для отладки проблем, особенно на iOS (сертификаты APNs).