Как загрузить файлы с помощью http / ftp на iphone / ipad? (Напр. в iFile, goodreader)

есть ли хорошие советы по загрузке файлов в устройство? Я видел, как многие приложения создают http-сервер на 80 или 8080 для загрузки файлов. Означает ли это, что я тоже должен реализовать сервер?

есть ли сторонние библиотеки? (Предпочтительно с открытым исходным кодом и без GPL)

EDIT: я собираюсь обновить файлы в приложении для определенных устройств в корпоративной среде, поэтому iPad, вытягивающий файлы с центрального сервера, также является альтернативой. Но мне придется отправлять сообщения. к этим айпадам, чтобы сказать им принести эти файлы.

7 ответов


Я предполагаю, что вы хотите это своего рода автоматическое обновление. Приложение делает что-то по заказу с сервера без ручного управления пользователя.

Я не знаю корпоративную лицензию конкретной функции iOS. Но я считаю, что таких корпоративных API нет. И, как я знаю,автоматическое обновление практически невозможно. Так,

  1. нет поддержки на уровне системы для автоматического обновления. (пока?)
  2. Итак, обмен сообщениями и выборка функция должна быть реализована в приложении.
  3. но ни одно приложение не гарантированно работать в фоновом режиме в течение длительного времени.
  4. , а также пользователь может отключить любое приложение в любой момент.
  5. нет способа отправить сообщение в приложение, которое не работает.
  6. даже вы можете отправить, нет способа обратиться к каждому клиенту с сервера.

Если ваше приложение работает, отправка сообщения или командование ими, чтобы принести или сделать что-нибудь просто простая работа. Проблема is нет регулярного способа заставить их всегда оставаться в живых. даже в таких ситуациях, как перезагрузка ОС или ненормальное завершение.

однако есть альтернатива. Просто регистрация приложения как VOIP приложение, как Skype. OS не поддерживает работу приложения, но будет контролировать конкретный порт сокета и разбудит ваше приложение, когда сокет получит какое-либо сообщение. Дополнительные сведения см. здесь: http://developer.apple.com/library/ios/documentation/iphone/conceptual/iphoneosprogrammingguide/BackgroundExecution/BackgroundExecution.html#//apple_ref/doc/uid/TP40007072-CH5-SW15

в AppStore приложение, использующее VOIP для других целей, таких как автоматическое обновление, не будет передано, но вам не нужно беспокоиться об этом.

и другой способ отправить сообщение на устройство без запуска приложения -push-уведомления. Эта функция поддерживается в системный уровень. Но это не предназначено для командования app. Это предназначено для отправки текстового сообщения. Поэтому, если ваше приложение не запущено, сообщение будет отображаться пользователю. Однако вы можете указать пользователю, как запустить приложение, отправив push-уведомление.

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


Если вы решил использовать метод VOIP, извините, я больше не могу вам помочь. У меня нет опыта реализации такого рода приложений. Но это не должно быть так сложно.

однако трудная часть сервер. Это определенно требует пользовательской серверной программы, которая поддерживает соединение TCP / IP. Нельзя использовать обычный HTTP-сервер. Потому что сам HTTP разработан так, чтобы не поддерживать соединение TCP/IP. Вы должны построить такой сервер сами с нуля. Вам придется обрабатывать TCP/IP более низкого уровня передачи.

есть несколько решений (оба бесплатных/коммерческих) для такого сервера, но ни один из них не популярен, потому что этот тип сервера регулярно нуждается в полной настройке. Так что нет ничего, чтобы использовать или делиться.

однако я считаю, что это наиболее подходящая реализация для вашего приложения.


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

Это легко реализовать, потому что вы можете использовать обычные HTTP-серверы для этого. Клиент периодически подключается и загружает последние обновления с центрального сервера. Если есть новое обновление, просто получить и делать то, что вы хотите. И приложение запускается, просто сначала проверьте обновление. Запретить все операции до обновления.

Это обычный способ. Большинство приложений построены с помощью этого метода. В этом случае вам не нужно реализовывать server или hard вещь.

однако скорость применения обновления зависит от периода опроса.


(редактировать)

Я не мог заботиться о частных APIs. Поскольку ваше приложение не предназначено для AppStore,вы можете свободно использовать частный API. (С побегом из тюрьмы дело обстоит иначе. Их так много!--1-->скрытый features by excluded from documentation) я не знаю о частных API, но возможно, есть какой-то API, который включает поддержку keep-alive приложение. Однако это инженерный работа настолько болезненна, если вы не рождены, чтобы взломать.


но мне пришлось бы отправлять сообщения эти ipads, чтобы сказать им, чтобы принести этот файл.

Руководство По Программированию Push-Уведомлений

или почта с пользовательской схемой URL для запуска вашего приложения.

руководство по программированию приложений iOS-реализация пользовательских схем URL


вы можете попробовать использовать в своем проекте следующий открытый исходный код:

http://code.google.com/p/cocoahttpserver/

https://github.com/robin/cocoa-web-resource/wiki


Apple имеет некоторый пример кода на своем веб-сайте, который подробно описывает именно то, что вы ищете:

http://developer.apple.com/library/mac/samplecode/CocoaHTTPServer/CocoaHTTPServer.zip


Итак, у вас есть несколько вариантов:

  1. вы можете распространять свое приложение по беспроводной сети в своей организации и выталкивать новый контент в качестве обновлений приложений. Apple предоставляет эту опцию своим Разработчики.

    Распространение Беспроводных Приложений

    iPhone позволяет предприятиям безопасно размещать и беспроводно распространять внутренние приложения для сотрудников через Wi-Fi и 3G. Приложения могут быть обновлены без требуется подключение пользователей к их компьютерам. В приложения могут быть размещены на любом веб-сервере, доступном для пользователей. Пользователи просто нажмите на URL-адрес для установки приложений по беспроводной сети без необходимости подключения к своим компьютерам.

  2. альтернативой является настройка приложения для получения обновленных данных. Вы описываете добавление HTTP-сервера на устройство iOS, но сервер не может получать данные, когда приложение не работает. Учитывая ваши потребности, это, вероятно, сработает лучше внедрить веб-клиент в ваше приложение.

    Если бы я был на вашем месте (и вариант № 1 не работал), я бы использовал ASIHTTPRequest чтобы проверить с сервером при запуске / ежедневно. Если есть новые обновления, приложение может либо предложить пользователю загрузить новые файлы данных, либо просто молча загрузить их в фоновом потоке.

    UPDATED: возможно, я должен был быть более явным о том, как сделать #2. Вы можете настроить загрузку так не прерывается, когда пользователь выходит из приложения (вам не нужно делать VoIP hack). Проверьте завершение задачи конечной длины в фоновом режиме раздел в руководстве по программированию iOS.


есть http сервер образец коды от Apple и сообщества с открытым исходным кодом, таких как cocoahttpserver TouchHTTPD. Вы можете загрузить файл на http-сервер на iphone.

вот блог и скриншоты о запуск cocoahttpserver и загрузка файла на iphone.


Python CGIHTTPServer позволяет создавать сервер в 0 строках кода:


jcomeau@intrepid:~/rentacoder/bin2txt$ python -m CGIHTTPServer
Serving HTTP on 0.0.0.0 port 8000 ...

на самом деле реализация скрипта для анализа ввода и сохранения файла потребует немного больше усилий.

[далее] Хорошо, так что забудьте об этом, Apple не позволяет этого. См.локальный сервер на iPad по крайней мере для iPad.