在后台任务中安排通知

我正在开发一个与Web服务器同步的iOS日历/闹钟应用程序。 在服务器上添加活动时,发送推送通知,以便iOS客户端可以获取新数据,并在需要时更新和计划下一个警报(本地通知)的时间。

但是这只有在客户端打开应用程序时才有效。 我希望客户端能够收到推送通知,如果需要的话,可以在后台重新计划下一次闹钟的时间。

这在iOS上是不可能的吗?

您可以使用后台抓取进行此操作,操作系统将定期“唤醒”您的应用程序以在后台执行数据抓取。

首先,为您的应用启用后台抓取function。 在XCode 6中,查看您的项目,然后转到Capabilities选项卡,打开Background Modes ,然后选中Background Fetch

那么你将不得不在App Delegate中实现一些代码:

application:didFinishLaunchingWithOptions:添加:

 [application setMinimumBackgroundFetchInterval:UIApplicationBackgroundFetchIntervalMinimum]; 

上面设置了多久你希望系统“唤醒”你的应用程序的理想的后台进程。 请注意,最终的频率由iOS中的algorithm决定,所以不一定总是这样。

 -(void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{ //fetch code here completionHandler(UIBackgroundFetchResultNewData); 

}

以上是在这个后台进程期间调用的实际重写函数。 请记住调用completionHandler ,否则可能会降低您的应用程序在后台运行的可能性(或者说文档)。 你可能传递给completionHandler的枚举是UIBackgroundFetchResultNewDataUIBackgroundFetchResultNoDataUIBackgroundFetchResultFailed 。 根据您的获取结果使用其中之一。

//在Appdeleagte中使用这个方法

  • (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {

    [self showAlarm:notification.alertBody]; application.applicationIconBadgeNumber = 1; application.applicationIconBadgeNumber = notification.applicationIconBadgeNumber-1;

}

//在appdelagete中调用 – (void)makeNotificationRequest:(UILocalNotification *)notification1 {

 [self showAlarm:notification1.alertBody]; 

}

//在appdelagte中调用这个方法 – (void)showAlarm:(NSString *)text {

强大的文本 //设置通知,并调用这个通知方法你的另一个视图….. [[NSNotificationCenter defaultCenter] postNotificationName:@“uniqueNotificationName”object:self]; //泄漏

}