0
votes

We are developing an Ionic app for Android and iOS that has Push Notifications. We send these notifications via Firebase Cloud Messaging

On iOS we have this problem (we have accepted Notifications Permission for the app):

  • When the app is in foreground, we get the notification instantly (we get it inside the app, not with a card).
  • When the app is closed or in background it seems like we do not get the notification. However wehn we open or resume the app, we get the notification as is it was recieved with the app in foreground. Our hypothesis is that we are getting silent notifications.
  • (When we send Firebase test notification we get the same behaviour).

We have the next configurations:

  • Xcode: Capabilities -> Background Modes -> Remote Notifications (shows one check)
  • Xcode: Capabilities -> Push Notifications (shows two checks)
  • Apple Developer: Identifiers -> my app -> Push Notifications (with certificates for both dev and prod)
  • Apple Developer: Keys -> .p8 key with "Apple Push Notifications service (APNs)"
  • Firebase: my app -> Configuration -> Cloud Messaging (.p8 file uploaded with key and team IDs)

This is one of the several notifications we have tried to send via Firebase POST API, which combines almost everything we have read while researching this problem. (we also send required Firebase HTTP headers)

{
   "to": "<firebase_token>",
   "notification": {
      "body": "NOTIFICATION BODY",
      "title": "NOTIFICATION TITLE",
   },
   "apns": {
      "headers": {
        "apns-push-type": "alert",
        "apns-expiration": 0,
        "apns-priority": 5,
        "apns-topic": "<my_app>"
      },
      "payload": {
         "alert": {
            "title": "NOTIFICATION TITLE",
            "body": "NOTIFICATION BODY"
         },
         "aps": {
            "content-available": 1,
            "alert": {
                "title": "NOTIFICATION TITLE",
                "body": "NOTIFICATION BODY"
             }
         },
         "sound": "default",
         "content-available": 1
      }
   },
   "data": {
      "field": "1",
      "type": "CHAR"
   }
}

Despite this POST request may be incorrect for bacground notifications, we believe that would not be the problem, as Firebase test notifications also fail to show when on background.

3
make sure that you are not using wildcard bundle id.Shineeth Hamza
Any update on this, do you auto sign your xcode app?Stefan Sprenger
It looked like a problem with .p12 certs after iOS13 update (we were not getting logs or warnings). I have just posted an answer with the simplest payload we have been able to make work both on background and foreground.Antonio Parra

3 Answers

1
votes

We finally were able to get notifications with app on background and on foreground.

The payload for Firebase is:

{
   "to": "<firebase token>",
   "notification": {
      "title": "TITLE",
      "body": "BODY"
   },
   "data": {
      "title": "TITLE",
      "body": "BODY",
      "extraField1": "extra value 1",
      "extraField2": "extra value 2"
   },
   "apns": {
      "headers": {
         "apns-topic": "<my-app>",
         "apns-push-type": "background",
         "apns-priority": 10
      }
   }
}

It looked like there were an problem with .p12 certificates after updating to iOS 13 that we solved using a .p8 cert. After changing the certificates at Firebase the background notifications started to be recieved, but foreground stopped for the first hours.

0
votes

I am not sure, But it seems like your payload structure is not proper.

Please refer below sample

{
     "to" : "FCM TOKEN",
     "notification" : {
         "body" : "Body of Your Notification",
         "title": "Title of Your Notification"
     },
     "data" : {
         "body" : "Body of Your Notification in Data",
         "title": "Title of Your Notification in Title",
         "key_1" : "Value for key_1",
         "key_2" : "Value for key_2"
     }
}

If you're working with normal APNS then no need to pass content-available

0
votes

Look for the message in XCode logs. Here is what I got, see below:

In the js code to access body, use data.aps.alert.body

this.fcm.onNotification().subscribe(data => {
            console.log("notifiation data", data);
            alert(data.aps.alert.body);


    Message ID 1: 1593974546767029
    {
        aps =     {
            alert =         {
                body = "Hi, this is ios and android test 6!!!";
                title = " iOS and Android Test";
            };
            badge = 1;
            sound = default;
        };
        "gcm.message_id" = 1593974546767029;
        "gcm.n.e" = 1;
        "gcm.notification.sound2" = default;
        "google.c.a.c_id" = 2904766990309581961;
        "google.c.a.e" = 1;
        "google.c.a.ts" = 1593974546;
        "google.c.a.udt" = 0;
        "google.c.sender.id" = 291488852090;
    }