Я хочу реализовать функцию обновления фона в своем приложении, когда будет получен push. Перед тем, как пользователю будет отправлено push-уведомление, я хочу загрузить новые сообщения с моего сервера (Parse.com) и сохранить их в массиве. Я следую руководству отсюда: http://developer.xamarin.com/guides/ios/application_fundamentals/backgrounding/part_3_ios_backgrounding_techniques/updating_an_application_in_the_background/
Я не уверен, насколько точно это руководство. В нем говорится: iOS 7 (и выше) расширяет обычные push-уведомления, предоставляя приложениям возможность обновлять контент в фоновом режиме до, уведомляя пользователя, чтобы пользователь мог открыть приложение и получить новое содержимое немедленно.
Итак, я попытался реализовать мой фоновый вывод следующим образом:
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))handler
{
if([[userInfo objectForKey:@"aps"] objectForKey:@"content-available"]){
NSLog(@"Doing the background refresh");
UINavigationController *navigationController=(UINavigationController *)[[[UIApplication sharedApplication] keyWindow] rootViewController];
MyViewController *myViewController = (MyViewController *)[[navigationController viewControllers] objectAtIndex:1];
[myViewController.currentUser refreshMessagesArrayWithCompletionHandler:^(BOOL successful, BOOL newMiaos) {
NSLog(@"messages refreshed the array now has %lu messages",(unsigned long)[myViewController.currentUser.messages count]);
handler(UIBackgroundFetchResultNewData);
}];
}
}
Вызывается фоновое обновление и отображается push, однако push-уведомление не дожидается завершения фоновой задачи. Он отображается только после его получения. Это правильная функциональность? В приведенном выше руководстве говорится, что уведомление не будет отображаться до завершения фоновой задачи.
Затем я начал пробовать молчаливое уведомление, это заставляет приложение загружать сообщения в фоновом режиме, когда нажимается, но не отображается уведомление. Поэтому я делаю это, открывая локальное уведомление, после завершения загрузки. Это действительно правильный способ сделать это? Как традиционные приложения, такие как whatsapp, запускают обновление фона с помощью молчаливого уведомления, а затем запускают локальный? Кажется немного взломанным. Разумеется, идея фонового нажатия состоит в том, чтобы подготовить данные перед показом уведомления, но это не совсем так.
Другая вещь, которую я заметил, - это то, что тихие уведомления ограничены по скорости, у них более низкий приоритет, чем типичное push-уведомление, поэтому это, безусловно, мешает эффективности приложения...
Любые указатели на это будут действительно оценены. Просто пытаюсь опустить голову, если я подхожу к этому правильно или нет. Все кажется очень взломанным...