在后台任务中安排通知

时间:2014-11-21 16:43:15

标签: ios ios7

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

但这仅在应用程序在客户端打开时才有效。我希望客户端接收推送通知,如果需要,可以在后台重新安排下一次报警的时间。

这在iOS上是不可能的吗?

2 个答案:

答案 0 :(得分:1)

您可以使用后台提取功能,操作系统会定期“唤醒”您的应用以在后台执行数据提取。

首先,为您的应用启用后台提取功能。在XCode 6中,查看您的项目,然后转到功能选项卡,打开背景模式,并选中后台获取

然后你必须在App Delegate中实现一些代码:

application:didFinishLaunchingWithOptions:中,添加:

[application setMinimumBackgroundFetchInterval:UIApplicationBackgroundFetchIntervalMinimum];

以上设置了您希望系统理想地“唤醒”应用程序以进行后台处理的频率。请注意,最终频率由iOS中的算法确定,因此可能并不总是如此。

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

}

以上是在此后台进程期间调用的实际重写函数。请记住致电completionHandler - 如果不这样做可能会降低您的应用在下次运行的可能性(或者说是文档)。您传递给completionHandler的枚举是UIBackgroundFetchResultNewDataUIBackgroundFetchResultNoDataUIBackgroundFetchResultFailed。根据获取结果使用其中一种。

答案 1 :(得分:0)

// use this methods in Appdeleagte
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {

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

//  call this  in appdelagete
-(void)makeNotificationRequest:(UILocalNotification *)notification1
{
    [self showAlarm:notification1.alertBody];
}

// call this mathods in appdelagte
- (void)showAlarm:(NSString *)text {

**strong text**
// set notification and call this notification methods your another view ..... 
  [[NSNotificationCenter defaultCenter] postNotificationName:@"uniqueNotificationName" object:self]; //leak

}