androidiosreact-nativeamazon-snsfirebase-notifications

Firebase notifications on ios - React native


I'm trying to get push notifications running with React Native on iOS and Android. To do so I am using firebase, as that seemed to be very convenient.

On Android I managed to show notifications when the app is in the foreground and at least show a log when the app is in the background, meaning I can process them.

On iOS I have not managed to do any of those, not from our custom backend in aws (via SNS), nor from firebase console with fcm token. What interestingly worked, was to show a badge on the ios app icon when sending broadcast messages to all users. So something seems to be received on the phone.

Now looking into this a little deeper I found that iOS needs notifications in the following format:

{
  "Simulator Target Bundle": "com.compass.SomeExampleApp",

   "aps": {
       "badge": 0,
       "alert": {
           "title": "Push Notification Test",
           "subtitle": "Hey! 👋",
           "body": "Is this working?",
       },
      "sound":"default"
   }
}

At least this is how you can test them on the sim.

1. Does it mean that I have to send the notifications in that same format? Or can it be something like:

{
    "data":{},
    "apns":  {   
    "Simulator Target Bundle": "com.company.Example",
    "aps": {
        "alert": {
            "body": "Wellcome to MyApp!",
            "title": "MyApp"
            
        }
        
    }
    
}}

2. How can I send a format that iOS AND Android can read, show on screen and process in background if necessary?

Since we are sending only data messages I think this might be part of the issue, if I look at our backend. Still when sending from firebase I am not able to show anything on screen on ios Device. Any hint?


Solution

  • I found a solution that actually works on both platforms although it is a bit weird since it seems to be outdated. Code needs to look like this to send to both iOS and Android:

    {  "GCM": "{ \"notification\" : {\"content_available\" : true }, \"data\": { \"body\": \"Sample message for iOS endpoints\", \"title\":\"Hello world\"} }"  }
    

    As seen here APNS attributes seem to at least partly work if added within the GCM message like content_available in this case or badge.