Ravi Mathur
Ravi Mathur

Reputation: 11

I am not receiving fcm push notifications in background on IOS

This is my json that I am sending but I am only receiving notifications in foreground in IOS but not in background.

remoteMessage.appData {          colorCode = XXXXX;         description = "XXXXX";     from = XXXXX;     notification =     {         body = "XXXXX";         e=1;     };     notificationName = "XXXXX";     notificationType = XXXXX;     outbid = XXXXX;     paused = XXXXX;     sound = "XXXXX.wav";     suspended = XXXXX; }

Here is the php code that I am using to generate the above json :

public function sendPushNotification($registration_ids, array $notification, array $message= null) {

       $url = 'https://fcm.googleapis.com/fcm/send';
    $notification['notification']['sound'] = $this->_notificationSoundFile;
    $fields = array(
        'registration_ids' => array($registration_ids),
        'notification' =>  $notification['notification'],
        'data' =>  $message['message']
    );
    $headers = array(
        'Authorization:key=' . $this->_fcmKey,
        'Content-Type: application/json'
    );


    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields));

    $result = curl_exec($ch);


    if ($result === false)
        throw new Exception('Curl failed ' . curl_error());

    curl_close($ch);
    if ($result) {
        return json_decode($result, true)['success'] == true ? true : false;
    }
} :

    enter code here

Expected Output :

{
    aps =     {
        alert =         {
            body = "XXXX";
            title = "";
        };        
        sound = "XXXX.wav";
    };
    "gcm.message_id" = "XXXX";
    "gcm.notification.appointmentId" = XXXX;
    "gcm.notification.carCode" = XXXX;
    "gcm.notification.deal_lost" = XXXX;
    "gcm.notification.dealerCode" = XXXX;
    "gcm.notification.notificationName" = "XXXX";
    "gcm.notification.notificationType" = XXXX;
    "gcm.notification.outbid" = XXXX;
    "gcm.notification.paused" = XXXX;
    "gcm.notification.suspended" = XXXX;
}

Help appreciated.

Upvotes: 1

Views: 530

Answers (3)

ankit
ankit

Reputation: 144

You should check for the content_available tag. This is a standard FCM payload that Apple automatically converts to aps->alert (For Background notification handling).

{
   "notification" : {
      "title": "XXX",
      "body" : "xxx",
      "title": "xxx",
      "content_available": 1
   },
   "data" : {
       //contain the payload
   }
}

Just for more reference : FCM guidelines to send notification

Upvotes: 1

Prabhat Pandey
Prabhat Pandey

Reputation: 277

I have implemented following methods in app Delegate in objective C

Dnyaneshwar Wakchaure

- (void)applicationReceivedRemoteMessage:(FIRMessagingRemoteMessage *)remoteMessage {
}
- (void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification
         withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler {
}
- (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response
         withCompletionHandler:(void (^)())completionHandler {
}
- (void) application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
}
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
}

Upvotes: 0

Dnyaneshwar Wakchaure
Dnyaneshwar Wakchaure

Reputation: 232

In notification =     { alert : ""}

Alert should be there. And one more thing backgroundfetch handler method implement in you appdelegate class.

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {

} Hope it will work.

Upvotes: 1

Related Questions