Как запустить код в фоновом режиме на iOS? Не уверен, какая методология имеет смысл [закрыто] ⇐ IOS
-
Anonymous
Как запустить код в фоновом режиме на iOS? Не уверен, какая методология имеет смысл [закрыто]
Я пытаюсь настроить фоновые HTTP-запросы на загрузку (синхронизацию файлов с телефона пользователя на сервер), которые периодически запускаются в моем приложении Swift. У меня нет строгих требований к тому, когда это произойдет (это может произойти ночью или в течение дня).
Я знаю, что Apple предоставляет несколько API для фоновых задач в iOS (beginBackgroundTask, BGAppRefreshTaskRequest, BGProcessingTaskRequest, URLSession загрузка по сравнению с фоновым сеансом). И я видел этот пост на форумах разработчиков Apple, в котором пытаются объяснить различия и когда какой использовать, а также страницу Apple на эту тему, но мне до сих пор не ясно, как некоторые из них работают на практике, и таким образом, какие из них мне следует использовать в моем случае.
Мои вопросы:
[*]Как запланировать периодическую загрузку файлов в фоновом режиме? Я предполагаю, что мне следует использовать BGProcessingTaskRequest, поскольку я не знаю точно, сколько времени займет эта задача (это может быть синхронизация всего 1-2 файлов, а может быть и сотен), и я не знаю, меня не волнует, если он будет работать всю ночь. [*]Как обеспечить возможность выполнения задач переднего плана после закрытия приложения? (т. е. когда пользователь запускает синхронизацию вручную в приложении) Со страницы Apple в URLSessionUploadTask: «В отличие от задач обработки данных, вы можете использовать задачи загрузки для загрузки контента в фоновом режиме». Означает ли это, что любые запросы, которые я делаю с помощью URLSession.shared.upload(), будут автоматически выполняться в фоновом режиме, если пользователь закроет приложение? Даже с версией async/await, или мне нужно использовать версию completionHandler? [*]Нужно ли мне вызывать beginBackgroundTask, если я использую URLSession.shared.upload(), чтобы гарантировать, что у меня будет больше времени для завершения загрузки? [*]А как насчет последовательных запросов (т. е. запросов, которые еще не начались к моменту закрытия приложения)? Судя по этому ответу SO, похоже, мне может потребоваться заранее запустить все загрузки параллельно? https://stackoverflow.com/a/53949607/2359478 [*]Стоит ли мне рассматривать URLSessionConfiguration.background для моего варианта использования? Похоже, я использую beginBackgroundTask и BGProcessingTaskRequest, тогда это может быть ненужно?
Спасибо!
Я пытаюсь настроить фоновые HTTP-запросы на загрузку (синхронизацию файлов с телефона пользователя на сервер), которые периодически запускаются в моем приложении Swift. У меня нет строгих требований к тому, когда это произойдет (это может произойти ночью или в течение дня).
Я знаю, что Apple предоставляет несколько API для фоновых задач в iOS (beginBackgroundTask, BGAppRefreshTaskRequest, BGProcessingTaskRequest, URLSession загрузка по сравнению с фоновым сеансом). И я видел этот пост на форумах разработчиков Apple, в котором пытаются объяснить различия и когда какой использовать, а также страницу Apple на эту тему, но мне до сих пор не ясно, как некоторые из них работают на практике, и таким образом, какие из них мне следует использовать в моем случае.
Мои вопросы:
[*]Как запланировать периодическую загрузку файлов в фоновом режиме? Я предполагаю, что мне следует использовать BGProcessingTaskRequest, поскольку я не знаю точно, сколько времени займет эта задача (это может быть синхронизация всего 1-2 файлов, а может быть и сотен), и я не знаю, меня не волнует, если он будет работать всю ночь. [*]Как обеспечить возможность выполнения задач переднего плана после закрытия приложения? (т. е. когда пользователь запускает синхронизацию вручную в приложении) Со страницы Apple в URLSessionUploadTask: «В отличие от задач обработки данных, вы можете использовать задачи загрузки для загрузки контента в фоновом режиме». Означает ли это, что любые запросы, которые я делаю с помощью URLSession.shared.upload(), будут автоматически выполняться в фоновом режиме, если пользователь закроет приложение? Даже с версией async/await, или мне нужно использовать версию completionHandler? [*]Нужно ли мне вызывать beginBackgroundTask, если я использую URLSession.shared.upload(), чтобы гарантировать, что у меня будет больше времени для завершения загрузки? [*]А как насчет последовательных запросов (т. е. запросов, которые еще не начались к моменту закрытия приложения)? Судя по этому ответу SO, похоже, мне может потребоваться заранее запустить все загрузки параллельно? https://stackoverflow.com/a/53949607/2359478 [*]Стоит ли мне рассматривать URLSessionConfiguration.background для моего варианта использования? Похоже, я использую beginBackgroundTask и BGProcessingTaskRequest, тогда это может быть ненужно?
Спасибо!
Мобильная версия