我是iOS和后端开发的新手,所以请耐心地缺乏技术知识。我为可能令人困惑的标题道歉,但这是我的问题:
我正在尝试创建一个iOS应用,允许用户在用户选择的课程状态为OPEN时接收推送通知。
检查所选课程状态是否为OPEN的方法是来自我学校API的GET请求,以及一些解析JSON响应以提取课程状态。
那么我该怎样做GET请求以不断检查所选课程的状态,并在用户打开时向用户发送推送通知?
如果有人能指出我的研究方向,那就太好了,谢谢。
答案 0 :(得分:1)
推送通知应该来自某个地方的服务器。如果您希望应用程序正在进行工作,我认为您正在寻找的是带有本地通知的民意调查。这方面的缺点是应用程序必须运行才能进行轮询。我建议您观看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文件中设置属性。您需要使用UIBackgroundModes
值添加密钥fetch
。