Antonio Parra
Antonio Parra

Reputation: 33

Push notifications via Firebase not appearing on iOS with app on background

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):

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.

Upvotes: 0

Views: 2071

Answers (3)

Taras Gleb
Taras Gleb

Reputation: 187

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;
    }

Upvotes: 0

Antonio Parra
Antonio Parra

Reputation: 33

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.

Upvotes: 2

Hitesh Surani
Hitesh Surani

Reputation: 13537

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

Upvotes: 0

Related Questions