Я использую функцию Firebase Topic для отправки уведомлений на несколько устройств в моем проекте Spring Boot. Я использую библиотеку firebase-admin для интеграции на стороне сервера.
Проблема в том, что когда я отправляю уведомления через тему, я не получаю никаких информация об устройствах с недействительными или НЕЗАРЕГИСТРИРОВАННЫМИ токенами. Это затрудняет управление неактивными устройствами в моей базе данных.
Я знаю, что отправка уведомлений на отдельные устройства с использованием их токенов будет возвращать ошибки типа UNREGISTERED, что позволяет мне очистить свою базу данных.
Однако при наличии более 100 000 устройств отправка уведомлений одно за другим кажется неэффективной и не масштабируемой.
Есть ли способ способ справиться НЕЗАРЕГИСТРИРОВАННЫЕ токены при использовании тематических уведомлений?
Если нет, то рекомендуется ли отправлять уведомления по отдельности на большое количество устройств (например, более 100 000)?
Существуют ли какие-либо рекомендации по управлению действительностью токена при использовании тем для уведомлений?
При отправке уведомлений на все устройства в моей базе данных с темой:
private fun sendToTopic(
firebaseApp: FirebaseApp,
title: String,
body: String
): CustomPushNotificationResponse {
val message = Message.builder()
.setTopic(FCMUtils.TOPIC_LOGSNAIL)
.setNotification(
Notification.builder()
.setTitle(title)
.setBody(body)
.build()
)
.build()
return try {
val messageId = FirebaseMessaging.getInstance(firebaseApp).send(message)
CustomPushNotificationResponse(isSuccess = true, messageId = messageId)
} catch (e: FirebaseMessagingException) {
CustomPushNotificationResponse(isSuccess = false, errorMessage = e.message)
} catch (e: Exception) {
CustomPushNotificationResponse(isSuccess = false, errorMessage = e.message)
}
}
При отправке уведомлений на определенное устройство:
private fun sendToDevice(
firebaseApp: FirebaseApp,
deviceUuid: String,
title: String,
body: String
): CustomPushNotificationResponse {
val device = deviceRepository.findByDeviceUuid(deviceUuid)
.orElseThrow { IllegalArgumentException("Device with UUID $deviceUuid not found") }
val token = device.androidFirebaseToken
?: return CustomPushNotificationResponse(
isSuccess = false,
errorMessage = "Firebase token not available for device UUID $deviceUuid"
)
val message = Message.builder()
.setToken(token)
.setNotification(
Notification.builder()
.setTitle(title)
.setBody(body)
.build()
)
.build()
return try {
val messageId = FirebaseMessaging.getInstance(firebaseApp).send(message)
CustomPushNotificationResponse(isSuccess = true, messageId = messageId)
} catch (e: FirebaseMessagingException) {
handleUnregisteredToken(device, e)
} catch (e: Exception) {
CustomPushNotificationResponse(isSuccess = false, errorMessage = e.message)
}
}
Подробнее здесь: https://stackoverflow.com/questions/793 ... ifications
Как обрабатывать НЕЗАРЕГИСТРИРОВАННЫЕ токены при использовании тем Firebase для уведомлений ⇐ Android
Форум для тех, кто программирует под Android
1735115904
Anonymous
Я использую функцию Firebase Topic для отправки уведомлений на несколько устройств в моем проекте Spring Boot. Я использую библиотеку firebase-admin для интеграции на стороне сервера.
Проблема в том, что когда я отправляю уведомления через тему, я не получаю никаких информация об устройствах с недействительными или НЕЗАРЕГИСТРИРОВАННЫМИ токенами. Это затрудняет управление неактивными устройствами в моей базе данных.
Я знаю, что отправка уведомлений на отдельные устройства с использованием их токенов будет возвращать ошибки типа UNREGISTERED, что позволяет мне очистить свою базу данных.
Однако при наличии более 100 000 устройств отправка уведомлений одно за другим кажется неэффективной и не масштабируемой.
Есть ли способ способ справиться НЕЗАРЕГИСТРИРОВАННЫЕ токены при использовании тематических уведомлений?
Если нет, то рекомендуется ли отправлять уведомления по отдельности на большое количество устройств (например, более 100 000)?
Существуют ли какие-либо рекомендации по управлению действительностью токена при использовании тем для уведомлений?
[b]При отправке уведомлений на все устройства в моей базе данных с темой:[/b]
private fun sendToTopic(
firebaseApp: FirebaseApp,
title: String,
body: String
): CustomPushNotificationResponse {
val message = Message.builder()
.setTopic(FCMUtils.TOPIC_LOGSNAIL)
.setNotification(
Notification.builder()
.setTitle(title)
.setBody(body)
.build()
)
.build()
return try {
val messageId = FirebaseMessaging.getInstance(firebaseApp).send(message)
CustomPushNotificationResponse(isSuccess = true, messageId = messageId)
} catch (e: FirebaseMessagingException) {
CustomPushNotificationResponse(isSuccess = false, errorMessage = e.message)
} catch (e: Exception) {
CustomPushNotificationResponse(isSuccess = false, errorMessage = e.message)
}
}
[b]При отправке уведомлений на определенное устройство:[/b]
private fun sendToDevice(
firebaseApp: FirebaseApp,
deviceUuid: String,
title: String,
body: String
): CustomPushNotificationResponse {
val device = deviceRepository.findByDeviceUuid(deviceUuid)
.orElseThrow { IllegalArgumentException("Device with UUID $deviceUuid not found") }
val token = device.androidFirebaseToken
?: return CustomPushNotificationResponse(
isSuccess = false,
errorMessage = "Firebase token not available for device UUID $deviceUuid"
)
val message = Message.builder()
.setToken(token)
.setNotification(
Notification.builder()
.setTitle(title)
.setBody(body)
.build()
)
.build()
return try {
val messageId = FirebaseMessaging.getInstance(firebaseApp).send(message)
CustomPushNotificationResponse(isSuccess = true, messageId = messageId)
} catch (e: FirebaseMessagingException) {
handleUnregisteredToken(device, e)
} catch (e: Exception) {
CustomPushNotificationResponse(isSuccess = false, errorMessage = e.message)
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79306078/how-to-handle-unregistered-tokens-when-using-firebase-topics-for-notifications[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия