我的应用程序如果已经在后台长时间(例如:过夜),则不会收到GCM推送通知。如果应用程序重新启动(双击主页,轻扫,重新启动应用程序),则排队的消息将被传递。
我们的应用程序接收数据有效负载,然后使用有效负载的内容构建iOS本地通知。
它适用于以下场景:前景中的应用程序,后台应用程序(点击主页按钮),应用程序被杀死(双击主页,轻扫应用程序)。
有效载荷
{
"data": {
"title":"Test Title",
"message": "Message body",
},
"content_available":true,
"priority": "high"
}
如果应用程序被杀,为什么它会起作用,但是当它已经在后台很长时间时却没有。是应用程序被终止还是被暂停?
好的,我做了一些测试,现在看来正在发生什么。
注意:我们正在做一些GCM在他们的示例中没有做的事情。我们在应用启动时连接到GCM(不是applicationDidBecomeActive
,我们在applicationDidEnterBackground
期间不会与GCM断开连接)
didReceiveRemoteNotification
被调用,这会创建本地通知didFinishLaunchingWithOptions
会执行didReceiveRemoteNotification
我的理论是GCM在第一次设置时设置了一些后台任务。如果应用程序终止,此后台任务将侦听GCM消息并执行didFinishLaunchingWithOptions
。但是,当应用程序暂停时,它可以在没有警告的情况下终止。如果发生这种情况,我会认为这个后台任务无法执行,并且由于应用程序终止,因此没有与GCM的连接。
可能使用(ctrl-f) Hybrid messages with both notification and data payload