推送通知不在后台iOS中接收

我正在通过GCM在我的项目中推送通知。 我的应用程序能够在前台收到通知,但不能在后台收到通知。

我在方法里面收到一条消息

func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) 

当应用程序在前台,但我没有得到任何调用的方法

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

当应用程序在后台模式。

我在互联网上search了很长时间,才知道这是我收到的有效载荷格式的问题。 我收到的有效载荷看起来像

[通知:{“body”:“任何东西”,“标题”:“任何标题”},优先级:高,content_available:true,至:kcF23gblKok ….,collapse_key:do_not_collapse,from:7812 ….]

任何人都可以build议我有效载荷的正确格式?

使用这个有效载荷

 { "aps": { "alert": "Hello World", "sound": "default" "content-available" :1 } } 

启用内容可用:

1个应用程序在前台

没有显示系统警报

应用程序:didReceiveRemoteNotification:fetchCompletionHandler:被调用

2应用程序是在后台

显示系统警报

应用程序:didReceiveRemoteNotification:fetchCompletionHandler:被调用

3App处于暂停状态

应用程序状态更改为后台

显示系统警报

应用程序:didReceiveRemoteNotification:fetchCompletionHandler:被调用

4应用程序没有运行,因为用户死亡

显示系统警报

没有callback被称为

以这种模式创build通知

 { "to": "ID", "notification": { "sound": "default", "title": "TITLE", "body": "BODY" }, "priority": "high" } 

对于那些正在处理Pushy而不是GSM的人,pushy的完成处理程序可能不会在应用程序处于后台时被调用,因为:

即使您使用有效的键和值来configuration通知负载,例如:

 {"to":"device***Token", "data": {"message": "Hello World!"}, "notification": {"title": "test", "body": "my message"}, "content_available": true} 

并发送它使用Pushy的控制台,它发生所有这些数据被放置在pushy的站点字段:'通知数据'。 所以使用控制台,我们发现没有办法发送:true,对于key:“content_available”这是必要的,当应用程序在后台时涉及处理程序。

你可以通过使用Postman来解决这个问题,例如configuration你的请求:

  1. 键入:POST;
  2. 生的;
  3. url: https : //api.pushy.me/push? api_key = YOUR_APP_API_KEY ;
  4. Content-Type:application / json;

并在身体上放置你需要发送的东西,例如:

  {"data":{"message": "Hello World!"},"tokens":["device***Token"],"content_available": true} 

有了这个,你会把“content_available”键放在“aps”里面,而不是放在“data”里面,这会在应用程序处于后台时调用你的处理程序。