Я использую Firebase (FCM) в проекте, где я использую функцию тем для рассылки ежедневных уведомлений множеству разных пользователей в разных часовых поясах.Уведомления всегда рассылаются, когда время пользователя 12:00, для достижения этого я каждый день создаю уникальную тему для группы пользователей, которую я собираюсь уведомить.На данный момент наши темы могут выглядеть следующим образом: x_daily_notification_1550152751 - Ранее у меня была система, которая создавала статические темы на основе часового пояса, поэтому пользователи могли подписываться на такие темы, как: x_daily_notification_europe_london, но это оказалось слишком ненадежным и сложным для управления,из-за перемещения пользователей между часовыми поясами.
Принцип работы системы основан на исследованиях и советах, которые я сформулировал в конце прошлого года: Ограничения тем в FCM и истечение срока действия / аннулирование старых неиспользуемых тем?
Итак, подведем итоги:
- Массовая подписка пользователей на тему
- Через 5 минут отошлите тему.Задержка происходит из-за незнания того, ожидает ли FCM обработки всех массовых подписок, прежде чем отправлять уведомления
- через 10 минут после отправки темы, снова отмените подписку на все токены из темы, удалив тему из FCM.
Причина этих задержек в том, что я заметил, что иногда мы не получаем уведомлений.Единственная причина, по которой я могу придумать, заключается в том, что мы слишком быстро отправляем и отписываемся от темы, поэтому, если 100K пользователей будут уведомлены, и мы удалили их сразу, только немногие получат это.Похоже, что FCM не ожидает завершения одного запроса до обработки другого.
Даже если я жду 10 минут, прежде чем отписаться, кажется, что иногда не все пользователи получают уведомление, что может означать, что они не былиобработано, прежде чем я снова отписался от них, поэтому я хотел бы подождать дольше, прежде чем отписать всех от темы, чтобы убедиться, что они получили уведомление.Первое решение, о котором я подумал, - это просто подождать, пока следующая партия не будет готова к обработке, а затем удалить предыдущую тему, что будет примерно через час, где я могу быть более или менее уверенным, что все получили уведомление вэтот момент.
Мой реальный вопрос: нужно ли вообще отписываться?Это может привести к путанице на стороне Firebase, но, безусловно, у них есть системы, способные справиться с этим, поскольку в документации по очистке ничего не сказано.