@atomnato

Push-уведомления когда, если приложение закрыто?

При разработке push-уведомлений, которые работают в фоновом режиме(по типу уведомлений от инстаграм, телеграм, вк), в своем приложении у меня возникли сложности с их работой в фоновом и закрытом режиме. Для их написания использовал плагин от FireBase ( Cloud Messaging ).
При отправке Notification message уведомления приходят при работе приложения в фоном режиме, в случае когда приложения закрыто уведомления не приходят вообще. Я попробовал перехватить ответы с сервера использовав прослушиватели onResume и onLaunch, но первый срабатывал лишь в случае перехода в приложение через уведомление, второй срабатывал лишь при первом запуске приложения.
При отправке Data message прослушиватели onResume и onLaunch, вообще не срабатывали.

В общем основная проблема в том, что я не понимаю как отловить ответ с сервера о приходе нового сообщение и обработать его в при фоновой и закрытой работе приложения. Буду рад если вы также укажите ссылки на хоть какую-нибудь реализацию.

Тело запроса при notification Message:
6128bba0236fc034404092.png

Тело запроса при data Message:
6128bba870871336608861.png

Мой манифест:
6128bc1bdc177923278366.png

Код обработчика уведомлений:
class NotificationProvider {

  static NotificationProvider _instance;

  static final FirebaseMessaging _messaging = FirebaseMessaging();

  static String _fcmToken;
  static Function callback;

  static Notification _parseNotification(Map<String,dynamic> message){
    Notification data;
    if (Platform.isAndroid){
      data = Notification.fromJson(message,isIos: false);
    }
    else if (Platform.isIOS){
      data = Notification.fromJson(message,isIos: true);
    }
    return data;
  }

  static Future<dynamic> _onLaunchMessageHandler( Map<String,dynamic> message){
    final notification = _parseNotification(message);
    if (notification != null){
      callback.call(notification.header?.title ?? '');
    }
  }

  static Future<dynamic> _onMessageMessageHandler( Map<String,dynamic> message){
    final notification = _parseNotification(message);
    if (notification != null){
      callback.call(notification.header?.title ?? '');
    }
  }

  static Future<dynamic> _onResumeMessageHandler( Map<String,dynamic> message){
    final notification = _parseNotification(message);
    if (notification != null){
      callback.call(notification.header?.title ?? '');
    }
  }

  factory NotificationProvider(){
    return _instance ??= NotificationProvider._init();
  }

  NotificationProvider._init(){
    _messaging.configure(
      onMessage: _onMessageMessageHandler,
      onResume: _onResumeMessageHandler,
      onLaunch: _onLaunchMessageHandler,
    );
    if(Platform.isIOS){
      _messaging.requestNotificationPermissions();
    }
    _messaging.getToken().then((token) => _fcmToken = token);
  }

  Future<String> fcmToken() async {
    return _fcmToken ??= await _messaging.getToken();
  }
}
  • Вопрос задан
  • 1438 просмотров
Пригласить эксперта
Ответы на вопрос 1
vadimpopov94
@vadimpopov94
Dev
Когда приложение закрыто (или в любом другом случае), при нажатии на пуш сработает один из этих колбеков.
_messaging.configure(
   onMessage: _onMessageMessageHandler,
   onResume: _onResumeMessageHandler,
   onLaunch: _onLaunchMessageHandler,
 );
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы