Приложение для iPhone, серверный компонент, интеграция синтаксического анализа

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

С точки зрения пользователя, приложение отслеживает уровень воды в местном озере и получает push-уведомления, когда уровень воды изменяется на указанную пользователем величину. Я думаю, что использовать Parse будет проще всего для управления пользовательскими данными, и я попытаюсь использовать серверный компонент Node.js на Nodester (я знаю некоторые основы JS и считаю, что это хороший и перспективный язык для ознакомления). Вот как я вижу, как это работает...

  • Пользователь создает учетную запись на устройстве и указывает lakeLevelChange сумму, на которую он получит push-уведомление. Данные пользователя передаются в управление данными Parse.
  • The server side component will run this program 3-6 times a day:
    • Pulls a currentLakeLevel via HTTP request
    • Извлекает пользовательские данные из Parse
    • Сравнивает currentLakeLevel с указанным пользователем lakeLevelChange
    • Если разница => lakeLevelChange, отправляется HTTP-запрос push-уведомления для каждого пользователя, для которого выполняется указанное условие.
  • Parse получает POST-запрос и отправляет push-уведомление на сервер APNS.
  • Клиент получает push-уведомление

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


person mnort9    schedule 03.04.2012    source источник
comment
Давайте разберемся с приложением iOS здесь, пожалуйста. Откройте другой вопрос, если у вас есть вопросы по узлу   -  person ControlAltDel    schedule 04.04.2012


Ответы (2)


Немного логической проблемы:

Компонент на стороне сервера будет запускать эту программу 3-6 раз в день:
Извлекает текущий уровень уровня LakeLevel через HTTP-запрос.
Извлекает пользовательские данные из Parse
Сравнивает текущий уровень LakeLevel с указанным пользователем LakeLevelChange
Если разница is => lakeLevelChange, HTTP-запрос push-уведомления отправляется для каждого пользователя, для которого выполняется указанное условие.

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

Представьте, если бы я сказал, что хочу получать оповещения, когда уровень изменится на 6 дюймов. Затем вы записываете семь событий, в которых уровень каждый раз повышается на дюйм. Ни разу вы не заметили изменения более чем на 6 дюймов, но общее изменение превышает мой порог уведомления, и я, вероятно, хотел, чтобы вы уведомили меня об этом.

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

person Dan Ray    schedule 03.04.2012
comment
Я не думал об этом, хотя это логично, спасибо. - person mnort9; 04.04.2012
comment
Я поставлю +1 за хорошо продуманный подход к делу, которое, вероятно, не было бы обнаружено раньше. - person jmstone617; 04.04.2012

Вы упускаете несчастный путь. Это путь, по которому программисты никогда не идут, в то время как программы всегда путешествуют. Ничто не идет так, как мы планируем, поэтому мы должны планировать неудачи. Задайте себе такие вопросы, как «Что происходит, когда сервер выключается для обслуживания или простоев и пропускает один или все запланированные запуски 3–6?» «Должны ли пропущенные выполнения стоять в очереди и рассылать кучу пропущенных уведомлений?» «Что происходит, когда пользователь изменяет то, что он указал как lakeLevelChange, но радио отсутствует и/или запрос сервера не может быть выполнен?» «Что происходит, когда Parse получает мусорные данные или создает мусорную дату?» Задав несколько из них, вы направите вас к оптимальному дизайну.

person Cliff    schedule 03.04.2012