在后台任务中安排通知
我正在开发一个与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
的枚举是UIBackgroundFetchResultNewData
, UIBackgroundFetchResultNoData
, UIBackgroundFetchResultFailed
。 根据您的获取结果使用其中之一。
//在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]; //泄漏
}