1

我已经在应用程序的委托方法中向服务器发送请求:(UIApplication *)application 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 请求和获得响应之间需要多少时间(最长时间)?
4

2 回答 2

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

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

于 2013-05-23T21:12:16.537 回答
1
  1. 每个到达您设备的推送通知都会调用一次,但如果您一次向同一设备发送太多通知,APNS 服务器可能只会将其中一些通知发送到设备。

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

于 2013-05-23T14:50:45.593 回答