If you send this payload to an iOS device via FCM, and also invoke UNUserNotificationCenter
's didReceive response: withCompletionHandler
callback method, iOS will both display a text notification as well as allow you app some background time to deal with the data object you're sending along your push notification.
Unfortunately on Android even using my recommended payload you won't achieve this behavior. If you send both notification
and data
, only the notification will be shown, and the OnMessageReceived
callback method won't be called to handle the data object.
But if you're in charge of the FCM payload creation, you can put the notification's title and body into the data
object like this:
{
"message":{
"token":"<device registration id>",
"data":{
"account":{
"first-name":"Igor",
"last-name":"Z"
},
"androidTitle":"title",
"androidBody":"body"
}
}
}
And when OnMessageReceived
is called with the contents of this payload, you just create a local heads-up notification based on the info in androidTitle
and androidBody
with this code:
This code is a bit verbose, but is guaranteed to be working on all current versions of Android, which is invaluable 🙂 You just put androidTitle
and androidBody
as parameters of the method above and a nice default nofitication will appear on each message.
Now you can enjoy notification+data push notifications in a single message on Android with this hack, instead of sending two messages each time.