2014-11-21 108 views
1

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

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

在iOS上这是不可能的吗?

回答

1

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

首先,为您的应用启用后台抓取功能。在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。根据您的抓取结果使用其中之一。

0

//使用此方法在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

}