我已经在应用程序的委托方法中向服务器发送请求:(UIApplication *)应用程序didReceiveRemoteNotification:但是当多个推送通知同时出现因为没有应用程序崩溃。请求发送到服务器。
在委托方法中,我写下以下代码:
if (!downloadInboxQueue) {
downloadInboxQueue = [[NSOperationQueue alloc] init];
downloadInboxQueue.maxConcurrentOperationCount=1;
}
NSNumber *ischatnumber=[[NSNumber alloc] initWithInt:0];
operationObject=[[Operation_Inbox alloc] init];
NSInvocationOperation *operation22= [[NSInvocationOperation alloc] initWithTarget:operationObject selector:@selector(getEventFromServer:) object:ischatnumber];
[downloadInboxQueue addOperation:operation22];
operation22=nil;
NSInvocationOperation *operation2= [[NSInvocationOperation alloc] initWithTarget:operationObject selector:@selector(getEventFromServer:) object:ischatnumber];
[downloadInboxQueue addOperation:operation2];
operation2=nil;
// getEventFromServer:发送请求和获取响应的方法..........
请建议我如何处理。
答案 0 :(得分:1)
对于到达您设备的每个推送通知,它会被调用一次,但如果您同时向同一设备发送过多通知,则APNS服务器可能只会将其中一些通知发送到设备
这不是你应该依赖的东西。您应该对服务器进行异步调用,以免挂起/崩溃您的应用。
答案 1 :(得分:1)
每次通知一次,但仅限应用程序正在运行。如果应用程序在通知到达时处于打开状态(即用户正在使用该应用程序),则iOS不会显示通知消息,您需要使用application:(UIApplication *)application didReceiveRemoteNotification
来处理它。否则(应用程序未运行),用户可以选择通过单击任何推送通知来启动应用程序。
同步HTTP往返时间可能会花费太多时间。避免委托方法中的同步调用。您可以将请求排入持久性本地存储中的服务器,并最终在网络连接可用时将它们异步发送到服务器。看看如何通过移动后端平台解决这个问题,例如Parse.com或InnoQuant MOCA(我在InnoQuant工作)。