当iOS应用程序在后台时,如何进行GCM推送通知?

5

我正在尝试使用GCM向我的iOS应用程序发送推送通知。当应用程序处于后台时,它无法接收到通知,但当其在前台运行时可以接收到通知。我还通过一个PHP脚本来测试推送通知,该脚本直接将消息发送到APNS,即使在后台也能正常工作。

发送给GCM的JSON数据:(我正在使用REST客户端进行测试)

{
  "to" : "token...",
  "notification" : {
    "title": "GCM TITLE",
    "body" : "FROM GCM",
    "badge": "1",
    "sound": "default"
  }
}
不起作用:在didReceiveRemoteNotification:中接收到的来自GCM的userInfo。
Notification received: [aps: {
    alert =     {
        body = "FROM GCM";
        title = "GCM TILE";
    };
    badge = 1;
    sound = default;
}, gcm.message_id: 123...]

工作中:当从PHP脚本发送时收到的userInfo(我还将message_id添加到JSON中以查看是否存在问题)

Notification received: [aps: {
    alert =     {
        body = "FROM PHP";
        title = "PHP TITLE";
    };
    badge = 2;
    sound = default;
}, gcm.message_id: 123...]

我尝试使用不同的组合将content_available添加到JSON中,但没有帮助,同时设置了Content-Type和Authorization请求头:

Content-Type:application/json
Authorization:key=... 

可能有效,我曾遇到类似问题,请尝试从JSON中删除标题。 - Rob85
谢谢你的建议!不幸的是,它仍然无法正常工作。 - barna941
你从GCM那里得到了成功的返回吗?你正在测试哪个环境,你是否已经归档了应用程序或直接在设备上进行测试? - Rob85
是的,我知道消息已成功传送,我正在我的设备上进行测试。但现在似乎它正在工作,我在JSON中将优先级设置为“高”,现在我可以在后台收到通知! - barna941
mmm GCM 对你来说,我花了一些时间才完全搞定,我在几个应用程序中都使用了它,但似乎在 APNS 方面总是有些不确定性。无论如何,很高兴你把它搞定了。 - Rob85
2个回答

8
如果有人遇到同样的问题,我的解决方法是将“priority”:“high”添加到JSON中。这样我就可以在后台收到通知。
{
  "to" : "token...",
  "priority": "high",
  "notification" : {
    "title": "GCM TITLE",
    "body" : "FROM GCM",
    "badge": "1",
    "sound": "default"
  }
}

1

要在应用程序处于后台时收到通知,我注意到我们需要添加:

"content_available":true // when app in background
"priority":"high" //when app is completely closed not even running in background

 // "content_available":true  ..most important field 

{
"to" : "token...",
 "priority":"high",
 "content_available":true,
 "notification" : {
 "title": "GCM TITLE",
 "body" : "FROM GCM",
 "badge": "1",
 "sound": "default"
  }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接