Smack — Когда вызывать MultiUserChat.Join()

Я немного запутался и не могу найти ответ в документы. Я разрабатываю простое приложение для чата для Android. Я создал группу (muc), и все работает, но нужно ли мне продолжать вызывать join() каждый раз, когда я открываю приложение?

Я заметил, что иначе это не работает.. Не понимаю, почему, так как сервер знает, что мой jabberID подключен к этому muc.

Надеюсь, мой вопрос достаточно ясен. Спасибо.


person Aviv Ben Shabat    schedule 08.06.2015    source источник


Ответы (2)


(Надеюсь) полное объяснение: краткий ответ - да.

Когда на вашем сервере создается постоянная комната, и вы выходите из нее или выходите из нее, вам нужно каждый раз повторно присоединяться. Выход из системы или потеря соединения очевидны, но когда вы выходите (выходите) из комнаты, вы также не будете получать сообщения напрямую из нее (даже если вы все еще подключены к серверу), сервер знает, что ваш id аффилирован< /strong> с этим MUC (например, в качестве члена), но вы не внутри его, для получения дополнительной информации см. XEP о MUC, а также почитайте о том, как ваш конкретный сервер реализует это в документах вашего сервера (вероятно, сохраняет сообщения под номером для офлайн-пользователей или что-то подобное ).

Это в основном то, что происходит в WhatsApp, когда вы входите и выходите из групповых чатов, но у них также есть свой собственный способ (уровень, который они создали поверх базового сервера xmpp), чтобы сообщить вам о непрочитанных сообщениях, включая как сервис (его можно увидеть в телефоне в общих настройках->приложения), и push-уведомления.

person TommySM    schedule 10.06.2015
comment
Спасибо! именно то, что я имел в виду. Я не думаю, что буду использовать сервис, это хорошее решение, потому что вы не можете реализовать фоновые сервисы и в IOS, а я хочу разработать одно и то же приложение для обеих платформ... - person Aviv Ben Shabat; 10.06.2015
comment
это прекрасно, в моей работе мы тоже не использовали сервис по той же причине (параллельное приложение IOS), вместо этого мы используем собственный веб-сервис в сочетании с Parse, чтобы покрыть это, push-уведомления обычно создают довольно хорошее взаимодействие между пользователем и приложением. - person TommySM; 10.06.2015

  1. Создать сервис
  2. Добавьте в него свой код xmpp, например, логин, чат один на один, чат MUC.

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

person NullByte    schedule 08.06.2015
comment
Вместо этого я могу использовать push-уведомления, но это был не мой вопрос. Я спросил, должен ли я присоединяться к muc только один раз, когда я его создаю (или приглашаю в него), или каждый раз, когда устанавливается соединение xmpp (например, при открытии приложения или загрузке телефона..) - person Aviv Ben Shabat; 08.06.2015
comment
Да, вы должны присоединяться каждый раз, когда приложение теряет соединение с сервером, вам необходимо поддерживать соединение с сервером, поэтому вам необходимо реализовать службу (создайте прослушиватель вещания при загрузке телефона, чтобы запустить службу для инициализации ваших соединений) - person NullByte; 09.06.2015