如何在布尔值为true之前发送进行API调用的请求

时间:2014-02-17 21:03:55

标签: ios get

我是iOS和后端开发的新手,所以请耐心地缺乏技术知识。我为可能令人困惑的标题道歉,但这是我的问题:

我正在尝试创建一个iOS应用,允许用户在用户选择的课程状态为OPEN时接收推送通知。

检查所选课程状态是否为OPEN的方法是来自我学校API的GET请求,以及一些解析JSON响应以提取课程状态。

那么我该怎样做GET请求以不断检查所选课程的状态,并在用户打开时向用户发送推送通知?

如果有人能指出我的研究方向,那就太好了,谢谢。

1 个答案:

答案 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