2014-02-17 4 views
0

Я действительно новичок в разработке iOS и бэкэнд, поэтому, пожалуйста, несите мои технические знания. Приносим извинения за потенциально запутывающий заголовок, но вот моя проблема:Как отправить запрос на вызовы API до тех пор, пока значение boolean не будет истинным

Я пытаюсь создать приложение iOS, которое позволяет пользователю получать push-уведомления, когда статус выбранного выбранного пользователя ОТКРЫТО.

Способ проверки того, является ли выбранный статус курса ОТКРЫТО, является запросом GET из API моей школы и небольшим анализом ответа JSON для извлечения статуса курса.

Итак, как мне сделать этот запрос GET постоянно, чтобы проверить статус выбранного курса и отправить пользователю push-уведомление, когда оно открыто?

Было бы здорово, если бы кто-то мог указать мне на конкретное направление исследований, спасибо.

ответ

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]; 
    } 
} 

Edit

Чтобы запустить его в фоновом режиме, вы, вероятно, должны прочитать this document. Результатом является то, что вам нужно переопределить селектор application:performFetchWithCompletionHandler: на AppDelegate и оттуда вызвать метод 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.

+0

Но может ли таймер запускаться, когда приложение закрывается пользователем? – Solistice

+0

@ Солистика См. Мое редактирование. – ahruss

Смежные вопросы