Как загрузить файлы с использованием http / ftp на iphone / ipad?(Например, ifile, goodreader) - PullRequest
8 голосов
/ 25 февраля 2011

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

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

РЕДАКТИРОВАТЬ: Я собираюсь обновить файлы в приложении для конкретных устройств в корпоративной среде, поэтому ipad извлекает файлы с центрального сервера также является альтернативой.Но мне пришлось бы отправлять сообщения на эти ipads, чтобы сказать им, чтобы получить эти файлы.

Ответы [ 7 ]

3 голосов
/ 03 марта 2011

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

Руководство по программированию push-уведомлений

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

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

2 голосов
/ 05 марта 2011

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

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

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

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

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

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

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

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


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

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

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

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


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

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

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

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


(Правка)

Я не мог заботиться о частных API.Поскольку ваше приложение не для AppStore, вы можете свободно использовать частные API.(Это совсем другое дело при взломе джейлбрейка. Существует так много скрытых функций, которые исключены из документации) Я не знаю о частных API, но возможно, что есть какой-то API, который обеспечивает поддержкуживой из приложения.Однако эта реверс-инжиниринг работа настолько болезненна, если вы не рождены для взлома.

2 голосов
/ 28 февраля 2011

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

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

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

1 голос
/ 14 марта 2011

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

Вот блог и снимки экрана о работающем cocoahttpserver и загрузке файла на iphone .

1 голос
/ 05 марта 2011

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

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

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

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

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

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

    ОБНОВЛЕНО: Возможно, мне следовало быть более явнымо том, как сделать № 2.Вы можете настроить загрузку таким образом, чтобы она не прерывалась при выходе пользователя из приложения (вам не нужно делать взлом Voip).Ознакомьтесь с разделом Выполнение задачи конечной длины в разделе «Фон» в Руководстве по программированию для iOS.

1 голос
/ 02 марта 2011

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

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

0 голосов
/ 25 февраля 2011

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


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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...