在后台10分钟后,UILocalNotification不会触发

我有一个VoIP应用程序。 哪个工作正常。 呼叫在前台和后台工作。

以下步骤完成:

  1. UIBackgroundModes =>在Info.plist中的VoIP

  2. 为VoIP使用configuration了其中一个应用套接字。

  3. 在移动到后台之前,setKeepAliveTimeout:handler:被调用

  4. configurationaudio会话来处理转入和转出活动使用。

  5. 为了确保在iPhone上获得更好的用户体验,使用核心电话框架来调整与基于蜂窝的电话呼叫相关的行为;

  6. 为确保VoIP应用的良好性能,使用“系统configuration”框架来检测networking更改,并尽可能让应用hibernate。

现在的情况是,当应用程序在后台,一个电话来,然后UILocalNotification触发以下。 用户可以通过两个buttonCANCEL和RECEIVE看到通知

- (void)applicationDidEnterBackground:(UIApplication *)application { bgTask = [application beginBackgroundTaskWithExpirationHandler:^{ [application endBackgroundTask: bgTask]; bgTask = UIBackgroundTaskInvalid; }]; dispatch_async(dispatch_get_main_queue(), ^{ while ([application backgroundTimeRemaining] > 1.0) { NSString *friend = [self checkForIncomingChat]; if ([friend length]>0) { [[UIApplication sharedApplication] cancelAllLocalNotifications]; UILocalNotification *localNotif = [[UILocalNotification alloc] init]; if (localNotif) { localNotif.alertBody = [NSString stringWithFormat: NSLocalizedString(@"%@", nil), friend]; localNotif.alertAction = NSLocalizedString(@"Receive", nil); localNotif.soundName = @"alarmsound.caf"; localNotif.applicationIconBadgeNumber = 1; [application presentLocalNotificationNow:localNotif]; friend = nil; } } sleep(1); } [application endBackgroundTask:self->bgTask]; self->bgTask = UIBackgroundTaskInvalid; }); } - (NSString *) checkForIncomingChat { NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; NSString *incall = [prefs objectForKey:@"incall"]; if ([incall length]>0) { [prefs setObject:@"" forKey:@"incall"]; return incall; } return @""; }; 

现在的问题是:

如果任何通话在10分钟内到达,则通过按主页button应用程序进入背景后触发UILocalNotification。

如果有任何来电10分钟,它将在后台运行。 UILocalNotification不会触发,所以用户不知道任何东西。

这是因为后台任务在10分钟后停止。

我如何pipe理它或延长后台任务长时间运行或重新启动后台任务。

search后发现越来越多的答案,但长期运行的后台任务没有任何作用。

请有人帮助我。 我正在尝试,因为2周。

这听起来像你有一个VoIP套接字,你正在接受的呼叫,所以,而不是循环和轮询的通话状态,你可以只提出本地通知的地方,你读的数据从套接字。

如果VoIP控制套接字是TCP,并用相应的...NetworkServiceTypeVoIP键标记,则您的应用程序将自动从暂停状态唤醒10秒钟,此时您可以显示本地通知。

有关更多信息,请参阅configuration套接字以使用VoIP 。

一旦完成,上面共享的所有代码都可以被删除。