FCM: устройство получает только одно из нескольких уведомлений - PullRequest
0 голосов
/ 16 января 2020

В настоящее время я пишу приложение Android с использованием Flutter и Node.js backend.

На стороне клиента я выполнил первые 3 шага документов firebase_messaging для интеграции FCM в моем приложении. Logi c моего приложения подписывается на und отменяет подписку по нескольким темам (в среднем один пользователь подписывается на 12 тем) на основе различных настроек.

Серверный лог c должен отправлять различные уведомления с учетом условий :

const firebase = require('firebase-admin')

firebase.initializeApp({
  credential: firebase.credential.applicationDefault(),
  databaseURL: 'https://<PROJECT>.firebaseio.com'
})

const title = ...
const msgList = [...]
const notifications = []
for (let msg of msgList) {
  let condition = `'${msg.topicA}' in topics && '${msg.topicB}' in topics`
  if (msg.topicX !== '') {
    condition = `${condition} && !('${msg.topicX}' in topics)`
  }
  notifications.push(buildMessage(title, msg.body, condition))
}

new Promise((resolve, reject) => {
  return firebase.messaging().sendAll(notifications).then(resp => {
    console.log(`Sent ${resp.successCount} messages, ${resp.failureCount} failed`)
    resolve()
  })
}).then(() => {
  firebase.app().delete()
}).catch(err => {
  console.error(err)
})

function buildMessage(title, body, condition) => {
  return message = {
    notification: { title, body },
    android: {
      ttl: 24 * 60 * 60 * 1000, // 1d
      notification: {
        sound: 'default',
        vibrate_timings: [
          '0s', '0.1s',
        ]
      }
    },
    condition
  }
}

Когда я запускаю этот код, он регистрирует Sent 72 messages, 0 failed. Поэтому я предполагаю, что отправка сообщений работала. Количество отправленных сообщений и соответствующие темы, а также заголовок меняются как минимум ежедневно. Исходя из моих подписок topi c, я должен получить около 4 pu sh уведомлений на свой телефон. Однако за один раз я получаю только одно уведомление. После того, как я переустановил приложение и, следовательно, снова подписался на темы с новым токеном, я получил все сообщения, которые я должен был получить. Однако через несколько дней оно вернулось к старому поведению, и я получаю ровно одно сообщение каждый раз, когда сервер отправляет пакет сообщений.

1 Ответ

0 голосов
/ 27 января 2020

С помощью BigQuery я выяснил, в чем проблема: все сообщения имеют одинаковый collapse_key (название приложения). Таким образом, если я не могу получать сообщения на моем устройстве в то время, когда сервер отправляет сообщения (например, когда я не подключен к Inte rnet), сообщения свернуты, и я получаю только одно сообщение ( последнее отправленное сообщение). Такое поведение, по-видимому, предназначено для уведомлений:

Не складывающиеся и складные сообщения (Документы FCM):

За исключением уведомлений, все сообщения по умолчанию неразборный.

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

Мне, вероятно, придется используйте обходной путь, отправляя сообщения с данными, а затем создавая надлежащие уведомления pu sh на стороне клиента.


Related: Как сделать сообщение типа уведомления GCM / FCM неразборным

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