我正在为iOS开发一个与Web服务器同步的日历/闹钟应用程序。在服务器上添加活动时,会发送推送通知,以便iOS客户端可以获取新数据,并在需要时更新并安排下次警报的时间(本地通知)。
但这仅在应用程序在客户端打开时才有效。我希望客户端接收推送通知,如果需要,可以在后台重新安排下一次报警的时间。
这在iOS上是不可能的吗?
答案 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
的枚举是UIBackgroundFetchResultNewData
,UIBackgroundFetchResultNoData
,UIBackgroundFetchResultFailed
。根据获取结果使用其中一种。
答案 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
}