на экране при работе с приложением iOS.
В частности:
Есть чат с одним собеседником. При получении сообщения требуется, если пользователь находится на экране чата, пуш не должен отображаться. Но во всех других случаях, пуш нужен.
Как такое возможно сделать для iOS?
а как технически сделать так, чтобы iOS не показывал уведомление? он зараза такой всегда их показывает... перейти на local notifications? другого варианта нет?
В общем, разобрался. Спасибо за наводку @olegys93 Сценарий 1. Приложение закрыто (или свёрнуто), приходит пуш (типа notification). Иос сам отображает такой пуш. В мобилке остается только прописать логику клика на него. Сценарий 2. Приложение открыто. Так как в некоторых случаях пуш отображать не надо, а в некоторых надо, то отключим стандартное отображение пуша на открытом приложении с помощью инициализации: FirebaseMessaging.instance.setForegroundNotificationPresentationOptions( alert: false, badge: false, sound: false, ); В таком случае будет приходить и его можно будет обработать в коде, но ИОС сам его не отобразит. Чтобы отобразить пуш, используем local notifications внутри подписки onMessage: FirebaseMessaging.onMessage.listen((RemoteMessage message) async { print('onMessage: ' + message.messageId); showLocalNotification(message); }); Если же в каких-то случаях (или на каких-то экранах, как в моем случае) отображать пуш не требуется, то перед показом локального уведомления просто ставим нужное условие, например: void showLocalNotification(RemoteMessage message) async { if (await needShowNotification(message.from, message.data)) { await flutterLocalNotificationsPlugin.show(0, messageNotification.title, messageNotification.body, platformChannelSpecifics, payload: jsonEncode(message.data)); } } где static final flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin() Надеюсь, кому-нибудь поможет сэкономить пару-тройку (или больше, как это было в моем случае) часов.
Обсуждают сегодня