2014-01-31 4 views
1

Я разрабатываю приложение iOS, и я хочу проверить, находится ли он в сети или нет. Моей первой идеей было отправить циклически на расстоянии 5 секунд асинхронные подключения из приложения на php-страницу, которая обновляет поле в базе данных, вставляя текущую дату и время. Затем, чтобы проверить, находится ли конкретный пользователь в сети, приложение извлекает эти данные из базы данных каждые 5 секунд и сравнивает его с текущим временем: если текущее время больше, чем собранные данные (более 5 секунд), это означает, что пользователь вне форума, в противном случае он онлайн. Это работает, но, безусловно, приложения для обмена мгновенными сообщениями не используют этот метод, потому что это слишком дорого. Какой подход следует использовать?Проверьте, находится ли пользователь в мобильном приложении

Надеюсь, я объяснил сам, спасибо!

ответ

0

Вот как я бы атаковать эту проблему:

  1. есть приложение присвоить уникальный идентификатор устройства IOS. (Я бы сохранил его в NSUserDefaults)
  2. Когда приложение запускает проверку URL-адреса, чтобы получить ответ (т. Е. Проверить, находится ли пользователь в сети)
  3. Подключитесь к серверу, и если он еще этого не сделал, сравните уникальный ключ с другими записями
  4. Если нет других записей во всей истории записей, установите еще один NSUserDefault (BOOL) , чтобы сообщить приложению, что ему еще раз не нужно проверять.
  5. Этот уникальный ключ теперь становится «регистрационным» и может быть передан на сервер.
  6. (необязательно) имеют пользовательскую информацию, чтобы сервер мог связать ключ с персоной/статистикой/любой информацией , а не просто одинокий ключ и загрузить эту информацию (если это сделано, AFAIK, яблоко требует, чтобы вы предупреждали пользователей о том, что их информация берется.)
  7. Устройства посылают сообщение так часто на сервер, чтобы сообщить это «эй, я все еще жив»
  8. Периодически повторяйте цикл сервера (я бы сказал, ~ удвоить время, когда устройство IOS отправляет сообщение «Я жив», то есть: если устройство сообщает сервер каждые 5 секунд он все еще в сети, проверьте сервер список и ответы каждые 7,5 - 10 секунд) и удалить список онлайн-ключей, используя информацию, собранную в таблице ответов. Если устройство IOS не отправило сообщение при прохождении сервера, оно не должно быть подключено к сети.

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

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

+0

Хорошо, вы отлично выглядите. Я уже что-то сделал об этом. Я могу видеть, находится ли пользователь в сети или нет, читает BOOL в базе данных. Этот BOOL обновляется из пользовательского приложения два раза в минуту и ​​устанавливается в TRUE или FALSE, если пользователь закрывает приложение.Теперь, если в приложении пользователя закрыто сообщение об ошибке, мой BOOL не может быть TRUE навсегда, поэтому мне нужно сделать цикл на сервере. Как вы говорите, мой сервер должен это сделать: если BOOL TRUE, и он не обновлялся в последнюю минуту, я должен отметить его как FALSE, своего рода тайм-аут. Как я могу сделать это на стороне сервера базы данных? – lubilis

+0

Извините, это заняло так много времени. Ладно, так что серверная сторона вещей, которые я не могу вам помочь :(Я сделал несколько курсов, но я не очень уверен, чтобы дать вам код, который компилируется (прошло некоторое время). Если вам нравится, я могу объяснить, как я буду атаковать это один, но у меня нет кода, который бы вам дал. Возможно, возникла идея задать новый вопрос, более ориентированный на взаимодействие с sql и сервером. Удачи! – blindman457

Смежные вопросы