Как обрабатывать НЕЗАРЕГИСТРИРОВАННЫЕ токены при использовании тем Firebase для уведомленийAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Как обрабатывать НЕЗАРЕГИСТРИРОВАННЫЕ токены при использовании тем Firebase для уведомлений

Сообщение Anonymous »

Я использую функцию 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»