Я создаю приложение для iOS 7, которое позволяет пользователю выбирать изображения и загружать их на сервер. В идеальном мире пользователь выберет изображения, нажмет «Загрузить» и сможет закрыть приложение. Я заглянул в NSURLSession, чтобы установить это, но, похоже, он берет только файл. Есть ли способ отправить свои NSData, как в NSURLRequest? Кроме того, когда я не подключен к Интернету, могу ли я как-то сделать опрос приложения для подключения к Интернету в фоновом режиме и заставить его отправлять изображения при установлении соединения? Я не думаю, что это было возможно с более ранними версиями iOS, но в iOS 7, похоже, есть несколько новых опций, касающихся фоновых задач. Заранее благодарю за любую помощь!
Могу ли я заставить iOS 7 отправлять изображения в фоновом режиме при установленном сетевом соединении?
Ответы (2)
Пара мыслей:
Вы правы, что фоновые загрузки должны использовать файл. Поэтому просто сохраните
NSData
в файл (например, с помощью методаwriteToFile
), а затем используйте этот путь к файлу.Что касается проверки подключения к Интернету, фон
NSURLSession
позаботится об этом за вас, так что нет, вам не нужно этого делать.Что касается фоновых загрузок в более ранних версиях iOS, вы могли инициировать загрузку, но явно запросить немного больше времени для выполнения этой задачи конечной длины, пока приложение работает в фоновом режиме с
UIBackgroundTaskIdentifier
. См. Выполнение задачи конечной продолжительности в фоновом режиме обсуждается в разделе Состояния приложения и многозадачность в Руководстве по программированию приложений для iOS.Это не так надежно, как новая фоновая функциональность
NSURLSession
(которая более умна в применении дискреционной логики, чтобы ваше приложение не оказывало существенного неблагоприятного воздействия на приложения переднего плана, контролируя, разрешена ли загрузка через сотовое соединение, позволяя более длинные запросы, работающие, даже если ваше приложение было остановлено (например, из-за нехватки памяти) и т. д.). НоUIBackgroundTaskIdentifier
— это возможное решение для версий iOS до 7, где вы хотите дать возможность выполнить запрос на загрузку, даже если пользователь покинул ваше приложение.
NSURLSessionConfiguration
вместо стандартного. Что касается второго пункта, то это плохие новости для вас, потому что это относится только к фоновым сеансам (которые, как мы пришли к выводу, вы не можете использовать). Используя стандартные сеансы, вы должны самостоятельно проверять доступность через Доступность а>.
- person Rob; 04.02.2014
NSURLSessionConfiguration
этого не делает. У него есть возможность подключения через сотовую связь, но это противоположная проблема. Если вам действительно нужно принудительно подключиться к сотовому соединению, используйте Reachability, чтобы определить тип соединения, а затем действуйте соответствующим образом.
- person Rob; 04.02.2014
.ipa
является безопасным контейнером. А папка с документами и т. д. существуют вне приложения.
- person Clay Bridges; 10.02.2014
ephemeralSessionConfiguration
, гарантируя, что, если устройство когда-либо будет скомпрометировано, конфиденциальная информация не останется). Понятно, что если бы он мог сохранить файл в папку «Документы» или куда-то еще, то использование NSURLSessionUploadTask
сработало бы нормально. Но вы правы в том, что, возможно, мне не стоило воспринимать комментарий за пределами безопасного контейнера как должное.
- person Rob; 10.02.2014
Re: Ваш комментарий по поводу "GOOD Dynamics SDK", я его быстро просмотрел. Он позволяет обмениваться документами между приложениями на основе SDK. Я не знаю, означает ли это, что он записывает один зашифрованный файл на диск в процессе или использует зашифрованную папку для хранения всего. Если бы у вас был доступ iOS к этому файлу и способ расшифровать его на сервере, у вас был бы шанс использовать магию фоновой загрузки на основе файлов.