Может ли приложение для iPhone получить эксклюзивный контроль или надежно записать, почему оно утратило контроль - PullRequest
1 голос
/ 02 августа 2009

Я пытаюсь определить осуществимость определенных функций, необходимых в (потенциальном) проекте. Я (пока) не ищу практические рекомендации, просто могу. Я прошу прощения за любую неопределенность и невежество: первый из-за NDA, который делает Apple NDA похожим на GPL, а второй из-за того, что у меня нет опыта iPhone или MAC.

У меня есть четкое понимание Objective-C и конструктора интерфейса (возвращаясь к NextStep) и некоторый опыт разработки PDA, поэтому я, вероятно, пойму ответы, даже если мои вопросы наивны. Я немного просмотрел, поэтому знаю некоторые модные слова.

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

  • большое количество пользователей в одной комнате просят выполнить задачу (и) в приложении (скажем, загадку)
  • они находятся под наблюдением, но монитор не может внимательно наблюдать за ними
  • им не разрешается оставлять заявку до завершения.
  • они не могут отправлять / получать телефонные звонки или сообщения во время выполнения задания.
  • монитор получает уведомления о различных шагах во время выполнения задачи
  • монитор получает уведомление о завершении задачи или выходе из приложения
  • приложение отправляет сердцебиение, поэтому монитор также знает, пропал ли сигнал
  • Джейлбрейк не вариант.
  • Приложение также должно работать на iPod Touch.

То, что мне нужно сделать, это кажется мне рискованным

  • можно ли отключить (или потребовать от пользователя выключить) телефон и смс, но при этом иметь возможность отправлять http на мой сервер
  • могу ли я предотвратить отключение приложения (даже если, скажем, срабатывает приложение будильника или звонит телефон).
  • Не пройдя предотвращение, могу ли я хотя бы обнаружить любое из этих событий и уведомить мой сервер.
  • уведомление о сбое. Могу ли я записать событие для проверки монитором позже.

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

Приложение будет взаимодействовать только с центральным сервером (запущенным моей компанией) - монитор не сможет купить серверное программное обеспечение, а URL-адреса сервера не будут изменены пользователем (или монитором).

Эй! Это похоже на приложение для сдачи экзаменов. Не то, что я делаю, но это было бы круто!

РЕДАКТИРОВАТЬ -

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

Таким образом, используя аналогию с экзаменом, пользовательский опыт в автономном режиме будет выглядеть примерно так

  1. Запустить приложение
  2. Загрузка приложений, вопросы теста, время начала регистрации и т. Д.
  3. Выключить телефон (если приложение не может сделать это самостоятельно)
  4. Отключить любое приложение, которое может прервать мое приложение (может ли приложение сделать это?)
  5. Возобновить и сдать тест
  6. Укажите выполненный тест (или завершите последнюю проблему).
  7. Включите телефон (если приложение не может) и перезапустите приложение (если необходимо).
  8. Приложение загружает результаты тестов и регистрирует любые прерывания.

Итак, вопрос становится

  • Уверен ли я, что, по крайней мере, я могу записать любое прерывание, которое не могу предотвратить
  • Могу ли я узнать причину прерывания (телефон ответил, сигнал тревоги активирован, пользователь активирован)?
  • можно ли запретить пользователю изменять журнал
  • можно ли узнать, какие другие приложения работают при запуске? (для защиты от демона, который иногда отображает подсказку или что-то в этом роде.

Я все еще хотел бы работать с загрузками в реальном времени, поэтому на ум приходят несколько других идей.

  • Если я смогу надежно обнаружить и записать, что телефон или другое приложение использовалось, это почти так же хорошо, как и предотвращение.
  • Может ли пользователь запретить звонок телефона, даже если он включен (например, переадресация вызова + звонок выключен)
  • Может ли мое приложение знать, выключен ли звонок
  • Тот же вопрос для смс сообщений
  • Если я не могу заблокировать его, может ли пользователь просто игнорировать (беззвучный) вызов или сообщение и не покидать мое приложение. Будет ли мое приложение знать это?

1 Ответ

3 голосов
/ 02 августа 2009

Похоже, вам лучше покончить с телефоном и сделать его эксклюзивным для iPod Touch.

Вы прибили свои проблемные места.

  • Невозможно отключить функции телефона и в то же время поддерживать сетевые функции любого типа (3G, WiFi или Bluetooth). Если вы отключите работу телефона в режиме полета, все они будут отключены.
  • Нет способа предотвратить возврат кнопки «Домой» в Springboard
  • Вы можете уведомить сервер о преждевременном прерывании приложения (в вашем делегате приложения есть метод applicationWillTerminate:), но это не надежно. Если операция займет слишком много времени, ваше приложение будет принудительно завершено.
  • Вы можете написать в локальную файловую систему, что произошло преждевременное прерывание, и это было бы гораздо надежнее, поскольку эта операция была бы намного быстрее.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...