react-native-notifications: Android notifications won't wake up device

Hi,

First of all, I always successfully receive the push notifications that I’m sending from server side. However, they do not wake up the device if it’s locked. There are also a couple more problems I’ve noticed that may be related to this.

I’m going to list all the instances of unusual behaviour of the notification system:

  1. If the device is locked (display off), the notifications are received, but they do not wake up the device, nor do they trigger any sound or vibration at all.
  2. If the device is unlocked and my app is completely closed or in background, my device receives the notifications but again, they do not trigger sound/vibration.
  3. If the device is unlocked and my app is opened/in foreground, the notifications are received, they do trigger the default sound and vibration, but their content is empty, as if I didn’t specify a title or body.

The payload that I send to https://gcm-http.googleapis.com/gcm/send looks like this:

{  
    "notification": {  
        "title": "Notification title test",
        "body": "Notification description test"
     },
     "priority": "high",
     "collapse_key": "test",
     "sound": "default",
     "to":"fkvgOg..[...]..r7xbb"
}

I use react-native-notifications@1.1.7 and react-native@0.39.2.

If you have any idea about why this happens or if the issue is from somewhere else, please let me know. Thanks.

About this issue

  • Original URL
  • State: closed
  • Created 7 years ago
  • Comments: 15

Most upvoted comments

Ok, so the solution to this specific problem is to send both data and notification objects within the payload. If you want to send along some custom data, just append it to the data object, like you normally would. I suspect this is because when in background, Gcm automatically handles and displays the notification, while when the app is in foreground, react-native-notifications handles the notification.

This is how the payload should look:

{
    "notification": {
            "priority" : "high",
            "sound" : "default",
            "tag": "example",
            "icon" : "icon",
            "title" : "Notification Title",
            "body" : "Notification Body"
    },
    "data": {
            "priority" : "high",
            "sound" : "default",
            "tag": "example",
            "icon" : "icon",
            "title" : "Notification Title",
            "body" : "Notification Body",
            "custom_field" : {}
    },
    "registration_ids" : [
            "dikzJkIhCPs...TPA9"
    ]
}

This solves the problem mentioned at the beginning.

If you were to send only the notification object, you would have the following issues:

  • The notification would be empty when received in foreground
  • The notification would be ok when received in background, but it wouldn’t trigger sound/vibration

If you were to send only the data object containing the notification fields:

  • The notification would be empty when received in background
  • The notification would be ok when received in foreground

Therefore, the only solution that I had found was to send the notification fields within both of these objects in the payload.

However, applying this would introduce the problem of #38, whose root cause was exactly the fact that he sent both data and notification with the payload, which in this case is the solution.

Send only data message and use below code in FCM onMessageReceived() method.

PowerManager pm = (PowerManager)context.getSystemService(Context.POWER_SERVICE); boolean isScreenOn = pm.isScreenOn(); Log.e(“screen on…”, “”+isScreenOn); if(isScreenOn==false) { WakeLock wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK |PowerManager.ACQUIRE_CAUSES_WAKEUP |PowerManager.ON_AFTER_RELEASE,“MyLock”); wl.acquire(10000); WakeLock wl_cpu = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,“MyCpuLock”);

wl_cpu.acquire(10000);

}

@d4vidi From what I understand, the problem from #38 was the fact that both data and notification were sent along with the request, while the solution was sending only the data object with all the notification options inside it.

In my case, I only send the notification payload, without data. So I don’t think I have the same problem. If I apply the suggested changes and use data instead of notification, the device obviously doesn’t display any kind of notification at all. GCM’s docs even state that the client is responsible for processing data messages, while the notification messages are automatically displayed as system notifications.

Can you please give me an example of a payload that you would normally send to gcm, which successfully triggers notifications? Perhaps something is wrong with mine.

@arnebr @andreipham Please have a look at issue #38 (more specifically, refer to this link: https://developers.google.com/cloud-messaging/concept-options#target)

Is it possible that your devices are in Doze mode when this takes place? Try to compare your behavior with other (low-priority, e.g. not WhatsApp) notifications.