Notification.addAction Не работает, когда приложение отключено или закрыто - PullRequest
0 голосов
/ 17 июня 2020

Я использую FCM для отображения уведомлений pu sh, но когда приложение находится в фоновом режиме или закрыто, уведомление не отображает действия.

Я получаю сообщение в полученном сообщении и создаю уведомление, используя NotificationCompat.Builder

    val notification: Notification =
      NotificationCompat.Builder(this, getString(R.string.default_notification_channel_id))
        .setContentTitle(message.notification?.title ?: "Title")
        .setContentText(message.notification?.body ?: "Body")
        .setStyle(
          NotificationCompat.BigTextStyle()
            .bigText(message.notification?.body ?: "Grant access?")
        )
        .addAction(getApproveAction(message.data["pushId"] ?: ""))
        .addAction(getRejectAction(message.data["pushId"] ?: ""))
        .setSmallIcon(R.drawable.logo)
        .build()
    val manager = NotificationManagerCompat.from(applicationContext)
    manager.notify(NOTIFICATION_ID, notification)

методы действия выглядят очень похожими, с той лишь разницей, что действие и логическое значение ACCEPTED. Вот как выглядит действие утверждения:

  private fun getApproveAction(pushId: String): NotificationCompat.Action {
    val approveIntent =
      Intent(this, NotificationActionReceiver::class.java).setAction(getString(R.string.notification_action_approve))
        .apply {
          putExtra(PUSH_ID, pushId)
          putExtra(ACCEPTED, true)
        }
    val approvePendingIntent: PendingIntent =
      PendingIntent.getBroadcast(this, 1, approveIntent, PendingIntent.FLAG_CANCEL_CURRENT)
    return NotificationCompat.Action(R.drawable.done, "Accept", approvePendingIntent)
  }

Когда приложение находится на переднем плане, уведомление отлично отображается с двумя действиями. Но когда приложение заблокировано или закрыто, я вижу только заголовок и тело, никаких действий. Я тестирую эмулятор пикселя 3a с Android 10.

Я попытался обновить формат намерения, чтобы он был похож на тот, который описан здесь { ссылка }, но мне не повезло .

1 Ответ

0 голосов
/ 17 июня 2020

Проблема была вызвана форматом уведомления, отправляемого с нашего сервера. Формат был

  const message = {
    token: pushToken,
    notification: {
      title: 'Title',
      body: 'Body',
    },
    data: {
      pushId,
    },
  };

, что означало, что когда приложение находилось в фоновом режиме или закрыто, Firebase создавала само уведомление, а функции добавления никогда не вызывались. Мы перешли на:

const message = {    
    token: pushToken,
    data: {
      pushId,
      title: 'Title',
      body: 'Body',
    },
  };

, что полностью соответствует данным о.е. sh и позволило нам самостоятельно создать уведомление.

Это также означало, что нам пришлось внести еще одно небольшое изменение в создание уведомления. Вместо того, чтобы получать заголовок и текст сообщения, мы получаем их непосредственно из данных.

NotificationCompat.Builder(this, getString(R.string.default_notification_channel_id))
        .setContentTitle(message.data.get("title") ?: "Title")
        .setContentText(message.data.get("body") ?: "Body")
        ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...