Как сделать так, чтобы уведомление FCM не отображало уведомление, когда пользователь находится на экране чата?
Я создаю приложение для чата и использую FCM для уведомления. Всякий раз, когда пользователь получает новое сообщение, он получает всплывающее уведомление, когда приложение находится на переднем плане.
Однако я хотел бы настроить уведомление таким образом, чтобы оно не отображало всплывающее сообщение, а только вибрировало, когда пользователь находится на самом экране чата. Когда его нет на экране чата, уведомление будет показывать всплывающее окно и вибрировать.
Есть идеи, как это сделать на стороне клиента? Заранее спасибо!
1 ответ
Есть два типа уведомлений: сообщение с данными и сообщение уведомления. Уведомления не обрабатываются вашим приложением, но вы можете управлять сообщениями с данными.
Во-вторых, вам нужно проверить, находитесь ли вы на экране чата с конкретным пользователем, который отправил вам сообщение, или нет. Чтобы выполнить это требование, вы можете сохранить идентификатор пользователя в любом месте (SharedPref, Utils или любой синглтон) при открытии комнаты чата и удалить его при выходе из chatRoom. Теперь, когда вы получаете уведомление, просто сравните его с сохраненным идентификатором пользователя, чтобы определить, хотите ли вы показывать уведомление или вибрировать.
Для вибрации телефона вы можете использовать пакет flutter_vibrate 1.0.0, а для генерации уведомлений вы можете использовать пакет flutter_local_notifications.
FirebaseMessaging.onMessage.listen((RemoteMessage message) {
if(message.data.senderID == prefs.getString(‘chatRoomID)){
// Check if the device can vibrate
bool canVibrate = await Vibrate.canVibrate;
// Vibrate
// Vibration duration is a constant 500ms because
// it cannot be set to a specific duration on iOS.
Vibrate.vibrate();
// Vibrate with pauses between each vibration
final Iterable<Duration> pauses = [
const Duration(milliseconds: 500),
const Duration(milliseconds: 1000),
const Duration(milliseconds: 500),
];
// vibrate - sleep 0.5s - vibrate - sleep 1s - vibrate - sleep 0.5s - vibrate
Vibrate.vibrateWithPauses(pauses);
} Else{ AndroidNotificationDetails(
'your channel id', 'your channel name', 'your channel description',
importance: Importance.max,
priority: Priority.high,
showWhen: false); }
});
Еще одна вещь, которую вам также необходимо сделать, - это показать это новое сообщение на экране чата. Для этого вы можете использовать Stream Builder.