GCM下游消息JSON格式的iOS

我有一个使用GCM的swift / iOS9应用程序的通知(WIP)。

应用程序授权确定。 证书是可以的。 configuration文件确定。 一切都在苹果的开发者门户开发configuration。

收到通知时调用此函数。

func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) { GCMService.sharedInstance().appDidReceiveMessage(userInfo); print(userInfo.debugDescription) } 

问题

当服务器发送以下格式时,我只能检测到前面介绍的函数中的通知,并且“有效”,因为我有一个断点来检测它,否则什么都不会发生。

 { "registration_ids" : ["regId"], "data" : { "to" : "regId", "notification" : { "sound" : "default", "badge" : "2", "title" : "anyTitle", "body" : "anyMessage" } } } 

负责web服务的负责人为我做了这个,并且复制了现有的Android(“registration_ids”是否有用?)。

由于行为不是预期的行为,我们从GCM网站上试了一下:

{“to”:“regId”,“content_available”:true,“notification”:{“body”:“很棒的比赛!”,“title”:“Portugal vs. Denmark”}}

该消息创build错误服务器端(GCM格式无效)?

我们错过了什么明显的?

请求是邮件和标题/url:

 https://gcm-http.googleapis.com/gcm/send Content-Type:application/json Authorization:key=AIzaSyZ-1u...0GBYzPu7Udno5aA 

编辑

添加工作日志和非工作日志。

 { "registration_ids":[ "regId" ], "data":{ "to":"regId", "notification":{ "sound":"default", "badge":"2", "title":"testNotif", "body":"welcome in the Showcase Apple owner" } } } 

 Exchange[ Id ID-FR-LIL-D00184-54996-1457452459441-0-5 ExchangePattern InOnly Headers {Accept=text/html,application/xhtml+xml,application/xml;q=0.9,​*/*​;q=0.8, Accept-Encoding=gzip, deflate, Accept-Language=fr-fr, Authorization=key=AIzaSyAB_E2Op0GqShCmCmh_6ZxnwrFKoXOaIHU, beaconId=46589-47438, breadcrumbId=ID-talend2-48271-1456928459992-11-173, Cache-Control=max-age=0, CamelHttpMethod=POST, CamelHttpPath=, CamelHttpQuery=custLogin=alex@cgi.com&beaconId=46589-47438&regId=khjGINhshr4:APA91bGXuzrC3tU_jkBMZGCziqIwA9wKv1B-U4acxy68sQxvChJQvKb187o863CzKJyop1AwhP0BNo7I2SJJiWdrtnHFC42LxcBQzOo2Ah868xPde9TBFmj_FLVG8rhyH4Yl48zuQMCJ, CamelJmsDeliveryMode=2, CamelRedelivered=false, CamelRedeliveryCounter=0, CamelServletContextPath=/setBeaconEvent, Connection=keep-alive, Content-Type=application/json, custLogin=, dateEvent=20160308172331, deviceType=ios, DNT=1, Host=192.168.1.239, JMSCorrelationID=null, JMSDeliveryMode=2, JMSDestination=queue://Q.NOTIFIER, JMSExpiration=0, JMSMessageID=ID:FR-LIL-D00184-64570-1457442695117-1:52:1:1:1, JMSPriority=4, JMSRedelivered=false, JMSReplyTo=null, JMSTimestamp=1457454212345, JMSType=null, JMSXGroupID=null, JMSXUserID=null, regId=khjGINhshr4:APA91bGXuzrC3tU_jkBMZGCziqIwA9wKv1B-U4acxy68sQxvChJQvKb187o863CzKJyop1AwhP0BNo7I2SJJiWdrtnHFC42LxcBQzOo2Ah868xPde9TBFmj_FLVG8rhyH4Yl48zuQMCJ, User-Agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/601.4.4 (KHTML, like Gecko) Version/9.0.3 Safari/601.4.4} BodyType String Body {"registration_ids":["khjGINhshr4:APA91bGXuzrC3tU_jkBMZGCziqIwA9wKv1B-U4acxy68sQxvChJQvKb187o863CzKJyop1AwhP0BNo7I2SJJiWdrtnHFC42LxcBQzOo2Ah868xPde9TBFmj_FLVG8rhyH4Yl48zuQMCJ"],"to":"khjGINhshr4:APA91bGXuzrC3tU_jkBMZGCziqIwA9wKv1B-U4acxy68sQxvChJQvKb187o863CzKJyop1AwhP0BNo7I2SJJiWdrtnHFC42LxcBQzOo2Ah868xPde9TBFmj_FLVG8rhyH4Yl48zuQMCJ", "content_available": true, "notification":{"title": "testNotif","body": "welcome in the Showcase Apple owner" }} ] Stacktrace --------------------------------------------------------------------------------------------------------------------------------------- org.apache.camel.component.http.HttpOperationFailedException: HTTP operation failed invoking https://android.googleapis.com/gcm/send?custLogin=alex@cgi.com&beaconId=46589-47438&regId=khjGINhshr4:APA91bGXuzrC3tU_jkBMZGCziqIwA9wKv1B-U4acxy68sQxvChJQvKb187o863CzKJyop1AwhP0BNo7I2SJJiWdrtnHFC42LxcBQzOo2Ah868xPde9TBFmj_FLVG8rhyH4Yl48zuQMCJ with statusCode: 400 

EDIT2

感谢亚瑟的build议,现在通知离开服务器没有错误,我收到它。

目前的格式是:

 { "to":"regId", "data":{ "notification":{ "sound":"default", "badge":"2", "title":"testNotif", "body":"welcome in the Showcase Apple owner" } } } 

剩下的问题是,如果应用程序在后台, didReceiveRemoteNotification fetchCompletionHandler不会收到它。 此外didReceiveRemoteNotification接收它时,应用程序是前台,但如果我不显示它没有发生。

我应该打电话给“系统风格”通知? 如果格式正确,是否可以开箱即用?

我无法通过networkingfind关于此的信息。

所以当你使用你提到的第一种格式时,你会收到通知(应用程序停在断点处)? 我唯一的想法是,当你收到通知时,你的应用程序可能在前台? 它应该在后台或closures,否则你不会注意到任何东西。

好吧,毕竟唯一的问题是JSON格式:

 { "to":"regId", "notification":{ "sound":"default", "badge":"2", "title":"testNotif", "body":"welcome in the shop Apple owner" } } 

通过这种方式,通知由APNS进行处理并以正确的格式得到完善。