我对iOS和后端开发真的很陌生,所以请容忍我缺乏技术知识。我为这个可能令人困惑的标题道歉,但这是我的问题:
我正在尝试创建一个iOS应用程序,该应用程序允许用户在所选课程的状态为打开时接收推送通知。
检查所选课程状态是否打开的方法是从我学校的API发出一个GET请求,并对JSON响应进行一些解析以提取课程状态。
那么,如何不断地执行此GET请求以检查所选课程的状态,并在课程打开时向用户发送推送通知?
如果有人能给我指明一个具体的研究方向,那就太好了,谢谢。
发布于 2014-02-18 05:30:21
推送通知应该来自某处的服务器。我认为如果你想让应用程序来做这项工作,你需要的是一个带有本地通知的投票。这样做的缺点是应用程序必须运行才能进行轮询。我推荐观看this WWDC Session以了解更多关于它的工作原理。要启动请求进行轮询,您可以执行如下操作:
在您的界面中:
@property (nonatomic, retain) NSTimer *timer;并且在实现中:
-(void)someMethodSomewhere
{
// Create a timer and automatically start it.
self.timer = [NSTimer scheduledTimerWithTimeInterval:10.0f // some number of seconds
target:self
selector:@selector(checkStatus)
userInfo:nil
repeats:YES];
}
-(void)checkStatus
{
// Perform request, check course status
if (/* course status is open */)
{
UILocalNotification *notification = [[UILocalNotification alloc]init];
notification.alertBody = @"The course is now open";
notification.fireDate = [NSDate date];
[[UIApplication sharedApplication]presentLocalNotificationNow:notification];
// Stop the timer
[self.timer invalidate];
}
}编辑
要让它在后台运行,您可能应该阅读this document。结果是您需要覆盖AppDelegate上的application:performFetchWithCompletionHandler:选择器,并从那里调用上面的checkStatus方法。但是,您无法控制调用此函数的频率。这是操作系统的工作,在某种程度上也是用户的喜好。在处理结束时,一定要调用完成处理程序。
您还必须设置获取的最小间隔。在你的应用程序的application:didFinishLaunchingWithOptions:中,你需要添加如下内容:
-(BOOL)application:(UIApplication*)app didFinishLaunchingWithOptions:
{
[application setMinimumBackgroundFetchInterval:UIApplicationBackgroundFetchIntervalMinimum];
return YES;
}假设上面的代码也在AppDelegate中:
- (void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler
{
[self checkStatus];
completionHandler(UIBackgroundFetchResultNewData);
}您还必须在应用程序的Info.plist文件中设置一个属性。您需要使用fetch值添加密钥UIBackgroundModes。
https://stackoverflow.com/questions/21839218
复制相似问题