在iOS中app的前台同时出现多个推送通知时如何处理

时间:2013-05-23 14:22:03

标签: iphone ios httpwebrequest apple-push-notifications

我已经在应用程序的委托方法中向服务器发送请求:(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:发送请求和获取响应的方法..........

请建议我如何处理。

  1. 多次推送通知时调用的委托方法的次数是多少次?
  2. 发送http请求和获取响应之间需要多长时间(最长时间)?

2 个答案:

答案 0 :(得分:1)

  1. 对于到达您设备的每个推送通知,它会被调用一次,但如果您同时向同一设备发送过多通知,则APNS服务器可能只会将其中一些通知发送到设备

  2. 这不是你应该依赖的东西。您应该对服务器进行异步调用,以免挂起/崩溃您的应用。

答案 1 :(得分:1)

  1. 每次通知一次,但仅限应用程序正在运行。如果应用程序在通知到达时处于打开状态(即用户正在使用该应用程序),则iOS不会显示通知消息,您需要使用application:(UIApplication *)application didReceiveRemoteNotification来处理它。否则(应用程序未运行),用户可以选择通过单击任何推送通知来启动应用程序。

  2. 同步HTTP往返时间可能会花费太多时间。避免委托方法中的同步调用。您可以将请求排入持久性本地存储中的服务器,并最终在网络连接可用时将它们异步发送到服务器。看看如何通过移动后端平台解决这个问题,例如Parse.com或InnoQuant MOCA(我在InnoQuant工作)。