Push Notifications Delivery

Hi there

I need a little help if possible understanding the possible low delivery rate of my backendless push notifications.

I have over 2250 devices in my DeviceRegistration table. This is reflected in my estimated number of recipients when I compose a push. Yet when I send a push notification we estimate approximately only 100 users actually read the notification. Even with users turning off their notifications and other problems of push notifications this seems lower than I would expect. We are using the push Templates in the console for sending push notifications. All notifications are always delivered to my devices and a few colleagues devices - be it in production or development mode. So setup must be more or less correct.

We can only estimate the number of messages read once a user clicks on a notification and goes to a custom view controller/activity to read the notification. I know this isn’t bullet proof but is the best we could come up with.

So first question.
Is there any means of somehow debugging the push messages - finding out if they are getting sent or if there is a problem - other than our crude method of just recording messages which have been read in the app?

Second question.
The DeviceRegistration table - is that kept up to date automatically? Do the deviceTokens expire or become invalid on this table? Do we need to do anything to make sure this table is maintained with valid devices eligible for push notification delivery? I am wondering if the problem is with users who haven’t used the app for a very long time or something like that?

I am just going through all the docs again and double checking setup have noticed some differences with our setup which was 2 years ago… I have a few questions along the way, but probably best if I setup a new topic for this.

Many thanks and would appreciate any helpful hints in trying to solve this and getting the numbers up…


Hello @mike-turner

Please write your app id.

How many channels do you have for sending messages?
Do you have over 2250 devices in my DeviceRegistration table, are they all subscribed to the same channel?
When you send a push, are you sending it to one channel or Segment?

We have an automatic update of the data in the DeviceRegistration table by the expiration date, when it expires, the record is deleted.
We also have an automatic update of data in the DeviceRegistration table - in the case when the deviceId of one device changes and this device is registered to a new channel, then all records with this device are updated with the new deviceId.

There is no automatic validation of all devices when sending push notifications.

Push notifications do not come with a delivery guarantee.
An Apple:
Because the delivery of remote notifications is not guaranteed, never include sensitive data or data that can be retrieved by other means in your payload.
Creating the Remote Notification Payload
FCM does not guarantee the order of delivery.
When submitting, Google may return a list of invalid devices, but the opposite is not true. That is, in other words, if deviceId falls into the invalid category, then it is definitely invalid. But if it didn’t get it, it doesn’t mean that it is valid, and it doesn’t mean that there will be delivery.

Thanks Vladimir


Just using default channel so just one.

hmm, I don’t remember setting a subscription channel so I am guessing that means they are subscribed to default.

OK thanks for confirming the information about DeviceRegistration - thats great - sounds like there is not a lot we can do to ‘clean’ this table.

Yep I understand about not sending critical data, which we don’t but still surprised by the low volume of push notifications which are definitely read.

Many thanks


Hello @mike-turner !

In your DeviceRegistration table, the records do not have values for the expiration field.

You may be able to increase the conversion by changing the Messaging -> PUSH NOTIFICATIONS -> Push Templates + Edit or Compose Push -> OPTIONS -> Remove after option: increase this value from 1 minute to, for example, 20 minutes.

Thanks @Vladimir_Yalovy

There is no option ‘Remove after’ in ios so this may just help Android conversion yes?

No I do not set expiration when I registerDevice() - Is it better to do so? - how is this likely to increase conversion somehow? If so what kind of value for expiration should I be putting in here - a month, 6 months, a year? I was presuming if no expiration was set then this would last forever so by putting an expiration value in this would limit push notifications in the future would it not if a user did not open the app before the expiration value occured?

This is my registration code (ios) in delegate

 func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
                                             response: {
                                                registeredDeviceId in
                                                print("Device has been registered in Backendless (Device Id: \(registeredDeviceId!))")
                                             error: {
                                                fault in
                                                print("Server reported an error: \(fault!.message!)")

Hello @mike-turner

Yes, this option for the Android.

It depends on what goals you are pursuing, it’s up to you. You asked if the table is automatically updated, I indicated only in connection with this.

Yes you are right.