0

I am trying to receive push notifications while in background, but it doesn't seem to be working. Here is my AppDelegate code:

func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) {

     GCMService.sharedInstance().appDidReceiveMessage(userInfo);
    var notification = UILocalNotification()
    notification.alertBody = "Nova poruka od korisnika "+(userInfo["gcm.notification.username"] as! String) // text that will be displayed in the notification
    notification.fireDate=NSDate(timeIntervalSinceNow: 0)
    notification.applicationIconBadgeNumber=0
    notification.soundName = UILocalNotificationDefaultSoundName // play default sound
    notification.userInfo=userInfo // assign a unique identifier to the notification so that we can retrieve it later
    notification.timeZone=NSTimeZone.localTimeZone()
    UIApplication.sharedApplication().scheduleLocalNotification(notification)
    completionHandler(UIBackgroundFetchResult.NoData)


}

I receive a callback to this function when I am in the foreground, but as soon as I tap the home button, the notifications are not received (I am guessing the VPN portion fails).

This is the PHP code that sends the notifications:
(I know it's horrible code but I am debugging atm :P)

foreach ($iosIDs as $id) {
        $fields = array("to" => $id, "notification" => $msg, "priority" => "high", "content_available" => true);
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, 'https://gcm-http.googleapis.com/gcm/send');
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields));
        $result = curl_exec($ch);
        echo $result;
        curl_close($ch);
    }

I have read at least 10 of these questions, but can't seem to figure it out. Many thanks.

abielita
  • 13,147
  • 2
  • 17
  • 59
Leo Starić
  • 331
  • 1
  • 4
  • 16
  • Could you possibly try Firebase Cloud Messaging instead, the implementation is much simpler, however your question only includes the code to handle the message callback, could you add the code that registers your app to receive remote notifications? – Arthur Thompson Aug 12 '16 at 23:51

1 Answers1

1

Make sure that you add the "priority": "high" to the JSON. This way, you can get the notifications in the background.

GCM attempts to deliver high priority messages immediately, allowing the GCM service to wake a sleeping device when possible and open a network connection to your app server. Apps with instant messaging, chat, or voice call alerts, for example, generally need to open a network connection and make sure GCM delivers the message to the device without delay. Set high priority only if the message is time-critical and requires the user’s immediate interaction, and beware that setting your messages to high priority contributes more to battery drain compared to normal priority messages.

If this doesn't help, I found in this thread that you should send data in proper format. Sample:

{
"notification":{
"badge":"12",
"alert":"default",
"sound":"default",
"title":"default"
},
"content_available":true,
"to":"YOUR_KEY_HERE"
}

You can also check on this link.

Community
  • 1
  • 1
abielita
  • 13,147
  • 2
  • 17
  • 59