Как я могу подойти к обмену сообщениями со всеми пользователями приложения?
С помощью веб-интерфейса можно отправить уведомление всем пользователям приложения, поэтому я предполагаю, что сделать то же самое с функцией, и сообщение с данными (или, по крайней мере, с уведомлением) возможно и с функцией, но я не мог найти способ сделать это.

Моя попытка

Я попробовал подписать все устройства на тему, позвонив:

FirebaseMessaging.getInstance().subscribeToTopic("all");

В событии onCreate моего FirebaseMessagingService, затем отправка сообщения с помощью облачной функции:

exports.sendMessage = functions.database.ref("/messages/{meta}")
    .onCreate((snapshot, context) => {
        const message = snapshot._data;
        console.log("msg", message["title"]);
        // logs the correct data, therefore the event triggers
        const payload = {
            data: {
                title: message["title"]
                /* blah blah */
            },

            topic: "all"
        }

        admin.database().ref("/messages/" + context.params.meta).remove()
        return admin.messaging().send(payload)
    })

Но onMessageReceived не срабатывает (в отличие от того, когда я отправляю уведомление через графический интерфейс).
Жизнеспособен ли этот подход в любом случае? Что мне не хватает?

2
Omer Lubin 15 Апр 2020 в 08:10

1 ответ

Лучший ответ

Я считаю, что единственное, что вам нужно будет изменить, - это конец. Здесь вам не понадобится эта деталь admin.database().ref("/messages/" + context.params.meta).remove().

Для обмена сообщениями ваш код должен выглядеть примерно так:

// Send a message to devices subscribed to the provided topic.
admin.messaging().send(payload)
  .then((response) => {
    // Response is a message ID string.
    console.log('Successfully sent message:', response);
  })
  .catch((error) => {
    console.log('Error sending message:', error);
  });

Вам нужно использовать уловку для управления ошибкой - так вы также сможете визуализировать, что может вызвать вашу проблему. Дополнительную информацию можно найти в этой документации здесь: Отправляйте сообщения в темы.

Кроме того, я нашел этот замечательный репозиторий, к которому вы можете получить доступ здесь - с некоторыми примерами и дополнительными примерами кода о том, как использовать облачные функции с FCM.

Дайте мне знать, помогла ли вам информация!

0
gso_gabriel 15 Апр 2020 в 06:26