2016-02-07 3 views
6

Я создаю приложение, которое загружает файлы на сервер через ajax. Проблема заключается в том, что пользователи, скорее всего, иногда не будут иметь интернет-соединения, и клиент хотел бы, чтобы вызов ajax был запланирован на время, когда у пользователя есть соединение. Возможно, пользователь заплатит загрузку файла, когда он находится в автономном режиме и закроет приложение. Можно ли выполнить вызов ajax, когда приложение закрыто (не в фоновом режиме)? Когда приложение находится в фоновом режиме, мы можем использовать background-fetch, но я никогда не сталкивался с проблемой, чтобы что-то сделать, когда приложение закрыто.Задача iOS при закрытии приложения

+0

использовать фоновый процесс, чтобы сделать загрузку затем ... –

+0

@FahimParkar - вы имеете в виду, когда приложение открыто в фоновом режиме или любой или любой другой вид фонового процесса? – Tukkan

+1

Исследуйте NSURLSession, так как это позволяет делать фоновые передачи, которые ОС позаботится и сообщит вам, когда они будут завершены, включая перезапуск вашего приложения в фоновом режиме, чтобы сообщить вам, что передача выполнена. Он может сделать все, что вам нужно. (Я только начинаю исследовать этот объект, поэтому я не эксперт.) –

ответ

4

Короткий ответ: нет, ваше приложение не может запускать код после его завершения.

Вы можете запустить код в AppDelegate's applicationWillTerminate, но этот метод предназначен в основном для сохранения пользовательских данных и других подобных задач.

См. Также this answer.

2

Да, вы можете делать вещи в фоновом режиме. Вы ограничены несколькими различными фоновыми режимами исполнения. Связь с сервером является одним из режимов, которые разрешены (выбор фона). Убедитесь, что вы правильно настроили свойства в Xcode в соответствии с рекомендациями (т. Е. Не говорите, что являетесь аудио-приложением при передаче данных). Смотрите подробности здесь:

https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html

Я нашел ваш вопрос, потому что он имеет тег Кордова, связанный с ним. Если вы используете Кордову вы можете использовать эту плагин здесь, чтобы управлять вещами в фоновом режиме:

https://github.com/katzer/cordova-plugin-background-mode

Edit: Если пользователь FORCE/закрытие завершения приложения, то нет ничего, что вы можете сделать. Если они просто выходят из приложения на главный экран и используют другие приложения, вы можете работать в фоновом режиме.

Другой вариант, который вы можете сделать, - запланировать локальное уведомление для загрузки файла. Если приложение успешно загружает файл, потому что оно открыто/имеет соединение/сделало это в фоновом режиме, вы отмените локальное уведомление.

Если местное уведомление не отменено, оно напомнит пользователю, что файл не загружен, и когда они открывают уведомление, ваше приложение начнет работу там, где оно было остановлено.

1
- (void)applicationWillTerminate:(UIApplication *)application { 
if (application) { 
    __block UIBackgroundTaskIdentifier backgroundTask = UIBackgroundTaskInvalid; 
    backgroundTask = [application beginBackgroundTaskWithName:@"MyTask" expirationHandler:^{ 
     backgroundTask = UIBackgroundTaskInvalid; 
    }]; 
    [self doSomething]; 
    [application endBackgroundTask:backgroundTask]; 
    backgroundTask = UIBackgroundTaskInvalid; 
    } 
} 
Смежные вопросы