Облачная функция Firebase: отправлять уведомления всем пользователям, используя sendToDevice () - PullRequest
0 голосов
/ 17 февраля 2019

Я уже использую функцию облачных сообщений в Firebase и использовал устаревший метод sendToTopic() для отправки уведомлений всем подписчикам, но я видел ограничение на использование темы в моем приложении.Теперь я хочу управлять своим способом отправки и получения уведомлений, отправляя уведомления каждому устройству, используя зарегистрированный токен устройства в документе пользователя, который хранится как объект карты.Я буду выполнять итерацию для каждого токена устройства и использовать sendToDevice() для отправки уведомлений каждому устройству.

У меня есть функция, позволяющая вызывать ее new_added , которая срабатывает при каждом добавлении нового документа в коллекцию.,Теперь каждый раз, когда вызывается функция new_added , она будет повторяться для каждого документа в коллекции Users и записывать новый документ в коллекцию Notification.Структура будет такой Users (collection)> uid (document)> Notifications> doc.Каждый новый добавленный элемент в коллекции Notification будет запускать функцию на сервере.Эта операция является слишком тяжелой, особенно, если существует миллион пользователей. Может ли эта операция выполняться на стороне сервера с использованием облачной функции в течение 540 секунд, которая называется максимальным временем выполнения функции после запуска триггера?Я действительно хочу, чтобы это работало так.Есть ли инструмент, который поможет минимизировать операцию?

1 Ответ

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

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

Но если вы хотите реализовать ее самостоятельно, подумайте, как оптимизировать ее для базовой системы.Поскольку вы храните токены в Firestore, количество прочитанных вами документов является ключевым фактором в стоимости.

Одним из способов уменьшения количества прочитанных документов может быть сохранение токенов для группы устройств в одном документе.Например, вы можете создать документ для каждой «темы» и добавить токены в этот документ по мере их записи в базу данных.Затем, когда вам нужно отправить сообщение на все устройства для какой-либо темы, вы просто читаете этот документ-тему и получаете все токены за один раз.Это становится особенно простым, если вы называете документ в честь темы, для которой он содержит токены, например, mytopic-tokens.

Основная проблема этого подхода заключается в том, что размер документа не может превышать 1 МБ.Допустим, что токены имеют длину не более 256 байтов (они кажутся 152-162 символами ), вы можете хранить 4000 токенов в документе.Если у вас есть больше токенов, вам нужно будет создать несколько документов.Простая схема именования может иметь большое значение, например, mytopic-tokens-1, mytopic-tokens-2 и т. Д. Вы можете получить все эти документы с помощью одного запроса диапазона в Firestore.

...