-
Notifications
You must be signed in to change notification settings - Fork 3
Description
Is your feature request related to a problem? Please describe.
There are several errors when sending notifications because the devices could be unregistered and there is no handling of this error code.
Describe the solution you'd like
When a notification is sent to a device that is unregistered, FCM SDK reports its error code. This can be used to delete the FCM token for the user and also delete any scheduled notifications for them
The change can be added here
RADAR-Appserver/src/main/java/org/radarbase/appserver/service/scheduler/MessageSchedulerService.java
Line 237 in f4201d4
| log.warn("The Device was unregistered."); |
will also require adding a parameter of type Message to handleFCMErrorCode so can get details on the user from
Line 102 in f4201d4
| handleFCMErrorCode(exc.getMessagingErrorCode()); |
Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.
Priority
2
Difficulty
3
Additional context
Relevant Logs-
2021-06-25 17:30:00,112 ERROR [quartzScheduler_Worker-3] org.radarbase.appserver.service.scheduler.NotificationSchedulerService: Error occurred when sending downstream message.
com.google.firebase.messaging.FirebaseMessagingException: Requested entity was not found.
at com.google.firebase.messaging.FirebaseMessagingException.withMessagingErrorCode(FirebaseMessagingException.java:47)
at com.google.firebase.messaging.FirebaseMessagingClientImpl$MessagingErrorHandler.createException(FirebaseMessagingClientImpl.java:293)
at com.google.firebase.messaging.FirebaseMessagingClientImpl$MessagingErrorHandler.createException(FirebaseMessagingClientImpl.java:282)
at com.google.firebase.internal.AbstractHttpErrorHandler.handleHttpResponseException(AbstractHttpErrorHandler.java:57)
at com.google.firebase.internal.ErrorHandlingHttpClient.send(ErrorHandlingHttpClient.java:108)
at com.google.firebase.internal.ErrorHandlingHttpClient.sendAndParse(ErrorHandlingHttpClient.java:72)
at com.google.firebase.messaging.FirebaseMessagingClientImpl.sendSingleRequest(FirebaseMessagingClientImpl.java:127)
at com.google.firebase.messaging.FirebaseMessagingClientImpl.send(FirebaseMessagingClientImpl.java:113)
at com.google.firebase.messaging.FirebaseMessaging$1.execute(FirebaseMessaging.java:135)
at com.google.firebase.messaging.FirebaseMessaging$1.execute(FirebaseMessaging.java:132)
at com.google.firebase.internal.CallableOperation.call(CallableOperation.java:36)
at com.google.firebase.messaging.FirebaseMessaging.send(FirebaseMessaging.java:102)
at com.google.firebase.messaging.FirebaseMessaging.send(FirebaseMessaging.java:86)
at org.radarbase.fcm.downstream.AdminSdkFcmSender.send(AdminSdkFcmSender.java:117)
at org.radarbase.appserver.service.scheduler.NotificationSchedulerService.send(NotificationSchedulerService.java:97)
at org.radarbase.appserver.service.scheduler.quartz.MessageJob.execute(MessageJob.java:91)
at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573)
Caused by: com.google.api.client.http.HttpResponseException: 404 Not Found
POST https://fcm.googleapis.com/v1/projects/radar-armt-notification/messages:send
{
"error": {
"code": 404,
"message": "Requested entity was not found.",
"status": "NOT_FOUND",
"details": [
{
"@type": "type.googleapis.com/google.firebase.fcm.v1.FcmError",
"errorCode": "UNREGISTERED"
}
]
}
}
at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:1113)
at com.google.firebase.internal.ErrorHandlingHttpClient.send(ErrorHandlingHttpClient.java:96)
... 13 common frames omitted