Проблема с получением уведомлений, когда приложение находится в фоновом режиме - PullRequest
0 голосов
/ 10 июля 2020

Я использую службу Firebase FCM для своего приложения android. Столкнувшись с перечисленными проблемами в нем.

  1. Иногда, когда приложение получает уведомления, он не звучит. Ниже приведен фрагмент кода.
private fun createNotificationChannel(
    context: Context, id: String, name: String, description: String,
    path: Uri?, dnd: Boolean, importance: Int,
    notificationManager: NotificationManager
) {


    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        val existingChannel =
            notificationManager.getNotificationChannel(id)

        if (existingChannel != null) {
            notificationManager.deleteNotificationChannel(id)
        }
        val mAudioManager =
            context.getSystemService(Context.AUDIO_SERVICE) as AudioManager

        mAudioManager.setStreamVolume(
            AudioManager.STREAM_ALARM,
            mAudioManager.getStreamMaxVolume(AudioManager.STREAM_ALARM),
            0
        )

        val channel = NotificationChannel(id, name, importance)

        channel.description = description
        channel.enableLights(true)
        channel.setShowBadge(true)
        channel.describeContents()
        channel.setBypassDnd(dnd)
        channel.lockscreenVisibility = Notification.VISIBILITY_PRIVATE
        channel.lightColor = R.color.red
        channel.enableVibration(true)

        if (id == CHANNEL_ID_NORMAL_PRIORITY) {
            if (!SharedPrefUtils.getSharedPrefIsAppInForeground(context)) {
                channel.setSound(
                    path,
                    AudioAttributes.Builder()
                        .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
                        .setUsage(AudioAttributes.USAGE_ALARM)
                        .build()
                )
            }
        } else if (id == CHANNEL_ID_HIGH_PRIORITY) {

            channel.setSound(
                path,
                AudioAttributes.Builder()
                    .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
                    .setUsage(AudioAttributes.USAGE_ALARM)
                    .build()
            )
        }

        notificationManager.createNotificationChannel(channel)
    }
}
Если приложение не запускается в течение длительного времени, то метод onMessageReceived () службы обмена сообщениями firebase не вызывается. В этом случае, когда приложение выходит на передний план, я получаю уведомления. В уведомлении pu sh я отправляю только полезные данные, потому что когда приложение находится в фоновом режиме (запущено или закрыто) и получает уведомление, если мы используем полезную нагрузку уведомления, он не будет устанавливать большой значок на баннер. Ниже приведен фрагмент кода для Pu sh Notification.
AndroidConfig androidConfig = AndroidConfig.builder()
        .setTtl(3600 * 1000)
        .setPriority(AndroidConfig.Priority.HIGH)
        //.setNotification(androidNotification)
        .putData("title", title)
        .putData("body", StringEscapeUtils.unescapeJava(content))
        .putData("icon", icon)
        .putData("sound", soundData)
        .putData("channelid", channelId)
        .build();

Message msg = Message.builder()
        .setAndroidConfig(androidConfig)
        .setToken(token)
        .build();

String response = FirebaseMessaging.getInstance().send(msg);

1 Ответ

0 голосов
/ 10 июля 2020

Так же, как Майкл указал в комментарии , это (к сожалению) ожидаемое поведение FCM при использовании поля notification.

Подробнее см. Handling messages раздел документации . И важный бит:

резюме обработки сообщений

Обычное исправление для такого сценария ios - изменить способ структурирования FCM:

Не использовать notification поле (оставьте его полностью unused), , но используйте поле data и создайте локальные уведомления pu sh на основе этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...