在后台任务中安排通知
我正在开发与Web服务器同步的iOS日历/闹钟应用程序。当在服务器上添加活动时,会发送推送通知,以便iOS客户端可以获取新数据,并在需要时更新和计划下一次警报的时间(本地通知)。在后台任务中安排通知
但是,这只适用于当客户端打开应用程序。我希望客户端能够收到推送通知,如果需要,可以在后台重新计划下一次闹钟的时间。
在iOS上这是不可能的吗?
您可以使用后台抓取进行此操作,操作系统将定期“唤醒”您的应用程序以在后台执行数据抓取。
首先,为您的应用启用后台抓取功能。在XCode 6中,查看您的项目,然后转到功能选项卡,打开背景模式,并检查背景获取。
那么你就必须实现在App代表的一些代码:
在application:didFinishLaunchingWithOptions:
,添加:
[application setMinimumBackgroundFetchInterval:UIApplicationBackgroundFetchIntervalMinimum];
多久你要“唤醒”系统上面套你的应用程序理想地为后台进程。请注意,最终频率由iOS中的算法决定,因此它可能并不总是如此。
-(void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{
//fetch code here
completionHandler(UIBackgroundFetchResultNewData);
}
以上是实际重写功能,其在此期间后台进程的调用。请记住致电completionHandler
- 否则可能会降低您的应用下次在后台运行的可能性(或者如此说文档)。您可能传递给completionHandler
的枚举是UIBackgroundFetchResultNewData
,UIBackgroundFetchResultNoData
,UIBackgroundFetchResultFailed
。根据您的抓取结果使用其中之一。
//使用此方法在Appdeleagte
-
(无效)应用:(UIApplication的*)应用didReceiveLocalNotification:(UILocalNotification *)通知{
[自SHOWALARM:notification.alertBody]; application.applicationIconBadgeNumber = 1; application.applicationIconBadgeNumber =通知。applicationIconBadgeNumber-1;
}
//调用此在appdelagete - (无效)makeNotificationRequest:(UILocalNotification *)notification1 {
[self showAlarm:notification1.alertBody];
}
//调用此注资方式在appdelagte - (void)showAlarm:(NSString *)text {
strong text //设置通知并调用此通知方法您的另一个视图..... [[NSNotificationCenter defaultCenter] postNotificationName:@“uniqueNotificationName”object:self]; // leak
}