douzi1350 2016-08-11 13:05
浏览 99

未在后台iOS GCM中接收推送通知

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.

  • 写回答

1条回答 默认 最新

  • dpyu7978 2016-08-12 07:29
    关注

    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.

    评论

报告相同问题?

悬赏问题

  • ¥15 Mac系统vs code使用phpstudy如何配置debug来调试php
  • ¥15 目前主流的音乐软件,像网易云音乐,QQ音乐他们的前端和后台部分是用的什么技术实现的?求解!
  • ¥60 pb数据库修改与连接
  • ¥15 spss统计中二分类变量和有序变量的相关性分析可以用kendall相关分析吗?
  • ¥15 拟通过pc下指令到安卓系统,如果追求响应速度,尽可能无延迟,是不是用安卓模拟器会优于实体的安卓手机?如果是,可以快多少毫秒?
  • ¥20 神经网络Sequential name=sequential, built=False
  • ¥16 Qphython 用xlrd读取excel报错
  • ¥15 单片机学习顺序问题!!
  • ¥15 ikuai客户端多拨vpn,重启总是有个别重拨不上
  • ¥20 关于#anlogic#sdram#的问题,如何解决?(关键词-performance)