Android: предотвращение появления уведомлений о данных на экране, когда приложение работает в фоновом режиме. - PullRequest
0 голосов
/ 13 февраля 2020

Я отправляю data полезных нагрузок через FCM и обрабатываю их методом onMessageReceived() из FirebaseMessagingService. Проблема в том, что когда приложение находится в фоновом режиме, уведомления pu sh появляются, как только устройство их обрабатывает. Я бы хотел, чтобы они молчали, подобно тому, как Android доставляет notification полезных данных.

enter image description here

Как сделать так, чтобы уведомления не создать этот всплывающий эффект? Я на Android 9.

Вот как уведомление генерируется на клиенте:

var pendingIntent = PendingIntent.GetActivity(this, 0, intent, PendingIntentFlags.OneShot);
var notificationBuilder = new NotificationCompat.Builder(this, myChannelId)
                              .SetContentTitle(title)
                              .SetContentText(body)
                              .SetSmallIcon(Resource.Mipmap.ic_launcher)
                              .SetAutoCancel(true)
                              .SetContentIntent(pendingIntent);

и вот как оно уведомляется:

if (Build.VERSION.SdkInt >= BuildVersionCodes.O)
   notificationBuilder.SetChannelId(myChannelId);

var notificationManager = NotificationManager.FromContext(this);
notificationManager.Notify(myId, notificationBuilder.Build());

Ответы [ 3 ]

2 голосов
/ 17 февраля 2020

Уведомления будут отображаться с всплывающим эффектом (' Heads Up '), как показано на скриншоте, если вы установите приоритет канала уведомлений на IMPORTANCE_HIGH или выше, так что чтобы прекратить это, вы должны убедиться, что приоритет канала равен IMPORTANCE_DEFAULT или ниже.

Если у вас есть другие уведомления о том, что вы делаете хотите использовать вид «вверх головой» Затем вы должны создать отдельный канал NotificationChannel для этого уведомления. Обратите внимание, что каналы уведомлений отображаются как «Категории» в настройках уведомлений для вашего приложения , что позволяет пользователю выбирать, какие типы уведомлений они хотят видеть от вас, и два уведомления, желающие иметь другой приоритет, являются хорошим индикатором. что они должны быть в разных категориях

0 голосов
/ 23 февраля 2020

Используйте android lifecyclehandler и проверьте, находится ли приложение на переднем или заднем плане, и не отображайте уведомление, если приложение на переднем плане lifecyclerhandler

0 голосов
/ 17 февраля 2020

Когда приложение убито / в фоновом режиме ...

  • Когда в запросе передается только полезная нагрузка 'data', уведомление генерируется с помощью всплывающего окна, и обрабатывается пользователем в «onMessageReceived»

  • Когда в запросе передается только полезная нагрузка «уведомление», уведомление генерируется без всплывающего окна и обрабатывается android OS

  • Когда в запросе передаются полезная нагрузка «данные» и «уведомление», уведомление будет генерироваться без всплывающего окна и обрабатываться ОС android, а данные будут доступны для обработки в дополнениях намерения.


Таким образом, в нашем случае (не нужно показывать уведомление в виде всплывающего окна) передайте полезную нагрузку «данные» и «уведомление» в параметрах запроса. (Здесь будет отображаться заголовок и текст, что передается в уведомлении)

Ссылка на официальную ссылку: https://firebase.google.com/docs/cloud-messaging/android/receive#handling_messages

...